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 menelan belanja apabila dilanggar, dan dua medan permintaan yang mudah tertinggal.

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.

  1. Muat turunnya dan nyahmampat.
  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 disulitkan)
  1. Pada produk, tetapkan Product line (cth. mainstream), Stack (wordpress secara
  2. lalai), dan 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 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

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

  3. Hantar kunci kedua-samaan (idempotency key) pada setiap pembuatan, yang diterbitkan daripada id anda sendiri untuk perkara tersebut. Setiap
  4. 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.

Terkini daripada blog

Apa yang telah kami tulis tentang pengehosan, SEO dan pengendalian tapak secara berskala besar.

SEO dan Pembinaan Pautan daripada Lapisan Pengehosan: Pandangan Pengendali 2026

Bagaimana pengehosan membentuk pengindeksan dan ekuiti pautan pada tahun 2026: memastikan halaman kekal diindeks, menyemak domain lama sebelum membinanya, membina pautan tanpa jejak enjin carian, dan pandangan jujur tentang perkara yang boleh dan tidak boleh dilakukan oleh infrastruktur untuk SEO.

Baca siaran →

Menjadikan WordPress Pantas dan Selamat: Senarai Semak Prestasi dan Pemalam

Senarai semak praktikal untuk WordPress yang pantas dan selamat: pengecaman pada peringkat pelayan, cache objek bagi setiap tapak, beberapa pemalam yang berbaloi digunakan, memastikan timbunan sentiasa terkini, dan halaman WooCommerce yang tidak boleh anda cache sama sekali.

Baca siaran →

Cara Memilih Pengehosan Web Terurus pada Tahun 2026: Panduan Pembeli

Apakah yang sebenarnya membezakan pengehosan terurus yang baik daripada kotak murah dengan panel kawalan — migrasi, sandaran, pengasingan, pencachean sebenar dan penskalaan jujur — serta cara menilainya sebelum anda membuat komitmen.

Baca siaran →

Baca blog →

Masih memerlukan bantuan?

Sokongan disertakan dalam setiap pelan, meja bantuan dibuka selama 24 jam sehari, dan anda boleh menulis kepada kami dalam mana-mana daripada 58 bahasa kami — kami akan menjawab anda dalam bahasa anda.

Hubungi sokongan → Semua artikel →