Jika anda menjalankan WHMCS, gunakan modul WHMCS sebaliknya — halaman ini adalah untuk semua perkara lain. Terdapat dua pilihan, kedua-duanya percuma dan kedua-duanya GPL-2.0-atau-kemudian.
HostBill
Modul pengehosan dengan enam tindakan yang sama seperti modul WHMCS.
- Muat turunnya dan nyahmampat.
- Muat naik direktori
zinn ke dalam includes/modules/Hosting/ supaya fail berada di
includes/modules/Hosting/zinn/class.zinn.php dan includes/modules/Hosting/zinn/ZinnHostBillClient.php.
- Settings → Modules → Hosting, aktifkan Zinn Digital®, dan tambah sambungan:
- API address:
https://api.zinndigital.com
- API key: kunci API Zinn® anda (medan
password, jadi HostBill menyimpannya secara disulitkan)
- Pada produk, tetapkan Product line (cth.
mainstream), Stack (wordpress secara
lalai), dan pilihan Application serta PHP version.
- Tekan Test connection.
⛔ Jangan namakan semula direktori zinn. Pemuat HostBill menerbitkan kelas yang dicarinya daripada nama direktori, jadi tindakan menamakan semula menghasilkan modul yang disenaraikan oleh panel dan tidak pernah dipanggil.
Perkara lain — klien PHP
Satu fail, tiada kebergantungan, tiada andaian panel. Masukkan 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 masuk ke pengehosan saya" — hasilkan pautan pada KLIK tersebut, jangan sekali-kali semasa paparan halaman:
header('Location: ' . $zinn->signInLink($siteId));
Tidak menulis PHP? Panggilan yang sama terdapat dalam rujukan API dan anda boleh membuatnya daripada apa sahaja.
Kunci API
Tujuh kebenaran, dan tidak lebih: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Bukan reseller.manage. Kunci yang anda tampal ke dalam panel pengebilan sepatutnya boleh menggantung klien kerana ketiadaan bayaran dan melogmasukkan mereka; ia tidak sepatutnya boleh menulis semula kelayakan gerbang pembayaran anda sendiri.
Dua peraturan yang melibatkan kos wang apabila ia dilanggar
- Kuncikan akaun pada PELANGGAN anda, dan tapak pada PERKHIDMATAN anda. Pesanan kedua
pelanggan mestilah masuk ke dalam akaun yang telah mereka miliki. Jika anda menguncikan kedua-duanya pada perkhidmatan, seorang pelanggan akan berakhir dengan tiga akaun yang tidak berkaitan dan tiga panel kawalan yang berasingan.
- Hantar kunci kedua-samaan (idempotency key) pada setiap pembuatan, yang diterbitkan daripada id anda sendiri untuk perkara tersebut. Setiap
sistem pengebilan mencuba semula — panggilan balik gerbang tiba dua kali, pentadbir menjalankan semula peruntukan yang gagal, pelanggan mengklik dua kali. Tanpanya, percubaan kedua mencipta tapak kedua dan anda dibilkan untuknya. Kedua-dua modul dan klien PHP melakukan ini untuk anda; jika anda memanggil API secara terus, hantar Idempotency-Key.
Tiga medan yang mudah ditinggalkan
Setiap satu merosakkan keseluruhan kata kerja, dan tiada satu pun yang dipaparkan selain ralat pengesahan — kecuali yang pertama, yang dipaparkan sebagai tiada apa-apa langsung:
- ⛔⛔ Klien mesti diletakkan pada pelan SEBELUM tapak pertama mereka diperuntukkan, dengan
POST /v1/reseller/clients/{orgId}/plan, dan subscription_id miliknya dihantar ke POST /v1/sites. Inilah yang tiada ralat untuk dibaca. Akaun klien baharu tidak memegang sebarang langganan dan POST /v1/sites tidak mempunyai medan pelan, jadi tapak yang diperuntukkan tanpanya tidak membawa sebarang pelan langsung: penyata borong anda dibina daripada langganan langsung klien anda, jadi tiada baris caj dinaikkan dan Zinn® tidak membilkan apa-apa kepada anda sepanjang pengehosan berjalan; klien anda tidak mewarisi sebarang peruntukan, jadi tiada kuota dikenakan pada tapak mereka; dan tiada apa-apa untuk diubah oleh peningkatan taraf. Pesanan mengembalikan 201, tapak diperuntukkan, dan ia berfungsi dengan sempurna. Tiada apa-apa di kedua-dua pihak yang melaporkan sebarang perkara ini.
Urutan tindakan adalah penting: POST /v1/sites merekodkan apa sahaja langganan yang wujud pada saat ia berjalan, jadi pelan yang ditetapkan selepas itu tidak dilampirkan secara retrospektif.
POST /v1/sites memerlukan stack_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 pemusnah. Tinggalkannya dan tiada pembatalan yang boleh berjaya, jadi perkhidmatan terus berjalan dan anda terus dibilkan untuknya. Baca domain kembali daripada GET /v1/reseller/services/{siteId}` dan bukannya menggunakan rekod anda sendiri: ia dibandingkan dengan domain utama tapak itu sendiri dan tidak sekali-kali dengan alias.
Baca keseluruhan ralat, bukan ayat itu sahaja
Mesej penolakan pengesahan sengaja dibuat secara generik — "Permintaan adalah dalam bentuk yang betul tetapi gagal dalam pengesahan." — kerana bahagian yang boleh diambil tindakan 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 ringkas semata-mata dan bukannya satu ayat, iaitu cara max_sites: 0 sampai kepada anda apabila pelan penjual semula anda tiada ruang.
Sebelum pesanan pertama anda
Tapak yang dibeli oleh klien anda dikira dalam peruntukan tapak pelan penjual semula anda, jadi anda memerlukan pelan yang mempunyai ruang di dalamnya. Ujian sambungan tidak dapat mengesan perkara ini — ia membaca program anda dan tidak memperuntukkan apa-apa — jadi ia melaporkan akaun sihat yang belum boleh menjual. Pesanan yang dibuat tanpa peruntukan akan ditolak dengan mesej yang menyatakan perkara itu dengan tepat.
Sahkan muat turun anda
Kedua-dua arkib disediakan melalui TLS daripada nama hos kami sendiri, tidak pernah dialihkan ke tempat lain, dengan checksum SHA-256 dicetak di sebelah pautan muat turun pada halaman muat turun.