Pangkalan pengetahuan
Jual pengehosan Zinn® daripada HostBill, Blesta, atau sistem anda sendiri
Jual pengehosan Zinn daripada HostBill, Blesta atau sistem anda sendiri: modul HostBill percuma, klien PHP fail tunggal, dua peraturan yang mengenakan bayaran apabila dilanggar, dan dua medan permintaan yang mudah tertinggal.
Jika anda menggunakan WHMCS, gunakan modul WHMCS sebaliknya — halaman ini adalah untuk perkara lain. Terdapat dua pilihan, kedua-duanya percuma dan kedua-duanya berlesen GPL-2.0-atau-kemudian.
HostBill
Satu modul pengehosan dengan enam tindakan yang sama seperti modul WHMCS.
- Muat turun dan ekstrak fail zip.
- Muat naik direktori
zinnke dalamincludes/modules/Hosting/supaya fail berada di - Settings → Modules → Hosting, aktifkan Zinn Digital®, dan tambah sambungan:
includes/modules/Hosting/zinn/class.zinn.php dan includes/modules/Hosting/zinn/ZinnHostBillClient.php.
- API address:
https://api.zinndigital.com - API key: kunci API Zinn® anda (medan
password, jadi HostBill menyimpannya secara tersulit)
- Pada produk, tetapkan Product line (cth.
mainstream), Stack (wordpresssecara - Tekan Test connection.
lalai), dan secara pilihan Application serta PHP version.
⛔ Jangan namakan semula direktori
zinn. Pemuat HostBill menerbitkan kelas yang dicarinya daripada nama direktori, jadi tindakan menamakannya semula menghasilkan modul yang disenaraikan oleh panel tetapi tidak pernah dipanggil.
Perkara lain — klien PHP
Satu fail, tiada kebergantungan, tiada andaian panel. Letakkan ZinnProvisioning.php ke dalam pangkalan kod anda sendiri dan panggil enam kaedah.
require_once 'ZinnProvisioning.php';
$zinn = new ZinnProvisioning(getenv('ZINN_API_KEY'));
// Apabila pesanan dibayar — sekali bagi setiap PELANGGAN, kemudian sekali bagi setiap PERKHIDMATAN:
$orgId = $zinn->account('customer-4211', 'Acme Ltd');
$siteId = $zinn->provision('service-9915', $orgId, 'acme.com', 'mainstream', 'wordpress');
// Simpan $orgId untuk pelanggan anda dan $siteId untuk perkhidmatan anda.
$zinn->suspend($siteId, 'INV-2026-114 unpaid'); // invois tidak dibayar
$zinn->unsuspend($siteId); // mereka membayar
$zinn->terminate($siteId); // mereka membatalkan — menjadualkan pemadaman
// Apabila mereka mengklik "log in to my hosting" — hasilkannya semasa KLIK, jangan sekali-kali semasa paparan halaman:
header('Location: ' . $zinn->signInLink($siteId));
Tidak menulis PHP? Panggilan yang sama terdapat dalam rujukan API dan anda boleh melakukannya daripada apa jua bahasa.
Kunci API
Tujuh kebenaran, dan tiada lagi: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Bukan
reseller.manage. Kunci yang anda tampal ke dalam panel bil sepatutnya dapat menangguhkan klien kerana kegagalan pembayaran dan melog masuk mereka; ia tidak sepatutnya dapat menulis semula kredensial gerbang pembayaran anda sendiri.
Dua peraturan yang melibatkan kos apabila dilanggar
- Gunakan kunci akaun pada PELANGGAN anda, dan tapak pada PERKHIDMATAN anda. Pesanan kedua
- Hantar kunci idempotensi pada setiap ciptaan, yang diterbitkan daripada id anda sendiri untuk perkara tersebut. Setiap
seorang pelanggan mesti dimasukkan ke dalam akaun yang telah mereka miliki. Jika kedua-duanya diindeks pada perkhidmatan, satu pelanggan akan berakhir dengan tiga akaun yang tidak berkaitan dan tiga panel kawalan yang berasingan.
sistem bil akan mencuba semula — panggilan balik gerbang tiba dua kali, pentadbir menjalankan semula penyediaan yang gagal, pelanggan mengklik dua kali. Tanpanya, percubaan kedua akan mencipta tapak kedua dan anda akan dikenakan bil untuknya. Kedua-dua modul dan klien PHP melakukan ini untuk anda; jika anda memanggil API secara terus, hantar Idempotency-Key.
Tiga medan yang mudah terlepas pandang
Setiap satu merosakkan keseluruhan kata kerja, dan tiada satu pun dipaparkan sebagai perkara lain melainkan ralat pengesahan — kecuali yang pertama, yang dipaparkan sebagai tiada apa-apa langsung:
- ⛔⛔ Klien mesti dimasukkan ke dalam pelan SEBELUM tapak pertama mereka disediakan, dengan
POST /v1/reseller/clients/{orgId}/plan, dan subscription_id milik mereka diluluskan ke POST /v1/sites. Ini adalah medan tanpa sebarang ralat untuk dibaca. Akaun klien baharu tidak memegang sebarang langganan dan POST /v1/sites tidak mempunyai medan pelan, jadi tapak yang disediakan tanpanya membawa tiada pelan langsung: penyataan borong anda dibina daripada langganan aktif klien anda, jadi tiada barisan dijana dan Zinn® tidak mengenakan sebarang bil kepada anda selagi pengehosan itu beroperasi; klien anda tidak mewarisi sebarang elaun, jadi tiada kuota dianjurkan pada tapak mereka; dan tiada apa-apa untuk diubah oleh naik taraf. Pesanan mengembalikan 201, tapak disediakan, dan ia berfungsi dengan sempurna. Tiada apa-apa di mana-mana penghujung yang melaporkan sebarang perkara ini.
Urutan adalah penting: POST /v1/sites merekodkan apa jua langganan yang wujud pada saat ia dijalankan, jadi pelan yang ditetapkan selepas itu tidak dikaitkan secara retroaktif.
POST /v1/sitesmemerlukanstack_type. Tinggalkannya dan tiada pesanan yang boleh berjaya.- **
DELETE /v1/sites/{siteId}memerlukan badan `{"confirm_domain": "<the site's own
domain>"}** — pengesahan yang ditaip, kerana ini ialah kata kerja pemusnahan. Tinggalkannya dan tiada pembatalan yang boleh berjaya, jadi perkhidmatan terus berjalan dan anda terus dikenakan bil untuknya. Baca semula domain daripada GET /v1/reseller/services/{siteId}` berbanding menggunakan rekod anda sendiri: ia dibandingkan dengan domain utama tapak itu sendiri dan tidak sekali-kali dengan alias.
Baca keseluruhan ralat, bukan sekadar ayat tersebut
Mesej penolakan pengesahan sengaja bersifat umum — "The request was well-formed but failed validation." — kerana separuh bahagian yang boleh ditindaklanjuti berada dalam details, yang menamakan medan dan sebabnya. Kedua-dua modul dan klien PHP melampirkannya pada mesej yang dipaparkan kepada pentadbir anda. Jika anda memanggil API sendiri, baca error.details; sesetengah entri membawa nilai asas berbanding satu ayat, yang merupakan cara max_sites: 0 sampai kepada anda apabila pelan pembekal semula anda tidak mempunyai ruang.
Sebelum pesanan pertama anda
Tapak yang dibeli oleh klien anda dikira dalam elaun tapak pelan pembekal semula anda, jadi anda memerlukan pelan yang mempunyai ruang di dalamnya. Ujian sambungan tidak dapat mengesan perkara ini — ia membaca program anda dan tidak menyediakan apa-apa — jadi ia melaporkan akaun sihat yang belum boleh menjual. Pesanan yang dibuat tanpa elaun akan ditolak dengan mesej yang menyatakan perkara itu secara tepat.
Sahkan muat turun anda
Kedua-dua arkib dihidangkan melalui TLS daripada nama hos kami sendiri, tidak sekali-kali dihalakan semula ke tempat lain, dengan jumlah semakan SHA-256 dicetak di sebelah pautan muat turun pada halaman muat turun.
Masih buntu?
Sokongan disertakan dalam setiap pelan dan dijawab dalam bahasa anda sendiri.
Hubungi sokongan → Semua artikel →