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.

  1. Muat turun dan ekstrak fail zip.
  2. Muat naik direktori zinn ke dalam includes/modules/Hosting/ supaya fail berada di
  3. includes/modules/Hosting/zinn/class.zinn.php dan includes/modules/Hosting/zinn/ZinnHostBillClient.php.

  4. 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 tersulit)
  1. Pada produk, tetapkan Product line (cth. mainstream), Stack (wordpress secara
  2. lalai), dan secara pilihan Application serta PHP version.

  3. Tekan Test connection.

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

  1. Gunakan kunci akaun pada PELANGGAN anda, dan tapak pada PERKHIDMATAN anda. Pesanan kedua
  2. 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.

  3. Hantar kunci idempotensi pada setiap ciptaan, yang diterbitkan daripada id anda sendiri untuk perkara tersebut. Setiap
  4. 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/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 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
Jual pengehosan Zinn® daripada HostBill, Blesta, atau sistem anda sendiri