Baza znanja
Prodajte Zinn® hosting putem sustava HostBill, Blesta ili vlastitog sustava
Prodajte Zinn hosting putem sustava HostBill, Blesta ili vlastitog sustava: besplatni HostBill modul, PHP klijent s jednom datotekom, dva pravila koja koštaju novca kada se prekrše i dva polja zahtjeva koja je lako izostaviti.
Ako koristite WHMCS, umjesto toga upotrijebite WHMCS modul — ova je stranica namijenjena svemu ostalom. Postoje dvije opcije, obje besplatne i obje u verziji GPL-2.0-or-later.
HostBill
Modul za hosting s istih šest radnji kao i WHMCS-ov.
- Preuzmite ga i raspakirajte.
- Prenesite direktorij
zinnuincludes/modules/Hosting/tako da se datoteke nalaze na - Settings → Modules → Hosting, aktivirajte Zinn Digital® i dodajte vezu:
includes/modules/Hosting/zinn/class.zinn.php i includes/modules/Hosting/zinn/ZinnHostBillClient.php.
- API address:
https://api.zinndigital.com - API key: vaš Zinn® API ključ (
passwordpolje, tako da ga HostBill sprema šifrirano)
- Na proizvodu postavite Product line (npr.
mainstream), Stack (zadano - Pritisnite Test connection.
wordpress) i po želji Application i PHP version.
⛔ Nemojte preimenovati direktorij
zinn. HostBillov učitavač izvodi klasu koju traži iz imena direktorija, pa preimenovanje stvara modul koji ploča prikazuje, ali ga nikada ne poziva.
Bilo što drugo — PHP klijent
Jedna datoteka, bez ovisnosti, bez pretpostavki o upravljačkoj ploči. Ubacite ZinnProvisioning.php u svoju bazu koda i pozovite šest metoda.
require_once 'ZinnProvisioning.php';
$zinn = new ZinnProvisioning(getenv('ZINN_API_KEY'));
// When an order is paid — once per CUSTOMER, then once per SERVICE:
$orgId = $zinn->account('customer-4211', 'Acme Ltd');
$siteId = $zinn->provision('service-9915', $orgId, 'acme.com', 'mainstream', 'wordpress');
// Store $orgId against your customer and $siteId against your service.
$zinn->suspend($siteId, 'INV-2026-114 unpaid'); // an invoice goes unpaid
$zinn->unsuspend($siteId); // they pay
$zinn->terminate($siteId); // they cancel — schedules a deletion
// When they click "log in to my hosting" — mint it on the CLICK, never on page render:
header('Location: ' . $zinn->signInLink($siteId));
Ne pišete u PHP-u? Isti se pozivi nalaze u API reference i možete ih uputiti iz bilo čega.
API ključ
Sedam dozvola, i ništa više: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Ne
reseller.manage. Ključ koji zalijepite u naplatnu ploču trebao bi moći staviti klijenta na čekanje zbog neplaćanja i prijaviti ga; ne bi smio moći prepisivati vaše vlastite vjerodajnice pristupnika za plaćanje.
Dva pravila koja koštaju novac kada se prekrše
- Povežite račun s KLIJENTOM, a stranicu s USLUGOM. Druga narudžba klijenta
- Pošaljite ključ idempotencije za svako stvaranje, izveden iz vašeg vlastitog ID-a za tu stavku. Svaki
mora završiti na računu koji već ima. Povežite oboje s uslugom i jedan klijent završava s tri nepovezana računa i tri zasebne upravljačke ploče.
sustav naplate pokušava ponovno — povratni poziv pristupnika stiže dvaput, administrator ponovno pokreće neuspješnu isporuku, klijent dvaput klikće. Bez toga drugi pokušaj stvara drugu stranicu i za to vam se ispostavlja račun. I moduli i PHP klijent ovo rade umjesto vas; ako pozivate API izravno, pošaljite Idempotency-Key.
Tri polja koja je lako izostaviti
Svako od njih ruši cijelu naredbu, i nijedno se ne prikazuje kao išta drugo osim kao pogreška provjere valjanosti — osim prve, koja se prikazuje kao ništa:
- ⛔⛔ Klijent mora biti stavljen na paket PRIJE nego što se njegova prva stranica isporuči, s
POST /v1/reseller/clients/{orgId}/plan, i njegov subscription_id se prosljeđuje u POST /v1/sites. Ovo je jedina stavka bez pogreške za čitanje. Novi korisnički račun nema pretplatu i POST /v1/sites nema polje paketa, tako da stranica isporučena bez njega nema nikakav paket: vaša veleprodajna izjava temelji se na aktivnim pretplatama vaših klijenata, tako da se nijedan redak ne postavlja i Zinn® vam ne naplaćuje ništa sve dok hosting radi; vaš klijent ne nasljeđuje nikakve kvote, tako da se nikakva kvota ne primjenjuje na njihovu stranicu; i nema ničega što nadogradnja može promijeniti. Narudžba vraća 201, stranica se isporučuje, i radi savršeno. Ništa ni na jednoj strani ne prijavljuje ništa od toga.
Redoslijed je važan: POST /v1/sites bilježi bilo koju pretplatu koja postoji u trenutku kada se izvršava, tako da se naknadno postavljeni paket ne primjenjuje retroaktivno.
POST /v1/siteszahtijevastack_type. Izostavite ga i nijedna narudžba neće uspjeti.- **
DELETE /v1/sites/{siteId}zahtijeva tijelo `{"confirm_domain": "<the site's own
domain>"}** — upisanu potvrdu, jer je ovo destruktivna naredba. Izostavite je i nijedno otkazivanje neće uspjeti, tako da usluga nastavlja raditi i za to vam se i dalje naplaćuje. Pročitajte domenu natrag iz GET /v1/reseller/services/{siteId}` umjesto da koristite vlastiti zapis: uspoređuje se s vlastitom primarnom domenom stranice, a nikada s aliasom.
Pročitajte cijelu pogrešku, ne samo rečenicu
Poruka odbijanja provjere valjanosti namjerno je generička — "The request was well-formed but failed validation." — budući da se polovica koja zahtijeva radnju nalazi u details, koja navodi polje i razlog. I moduli i PHP klijent dodaju je poruci koju prikazuju vašem administratoru. Ako pozivate API sami, pročitajte error.details; neki unosi nose golu vrijednost umjesto rečenice, što je način na koji vam stiže max_sites: 0 kada vaš resellerski paket nema prostora.
Prije vaše prve narudžbe
Stranice koje vaši klijenti kupuju uračunavaju se u dopušteni broj stranica vašeg resellerskog paketa, tako da trebate paket s dovoljno prostora. Test veze ne može ovo otkriti — on čita vaš program i ne isporučuje ništa — pa javlja zdrav račun koji još uvijek ne može prodavati. Narudžba poslana bez dopuštenog broja stranica odbija se s porukom koja govori upravo to.
Provjerite svoje preuzimanje
Oba se arhiva poslužuju putem TLS-a s našeg vlastitog naziva hosta, nikada preusmjerena negdje drugdje, s pripadajućim SHA-256 kontrolnim zbrojevima ispisanima pored veza za preuzimanje na stranici za preuzimanje.
Još uvijek zapeli?
Podrška je uključena u svaki paket i odgovori stižu na vašem jeziku.
Kontaktirajte podršku → Svi članci →