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.

  1. Preuzmite ga i raspakirajte.
  2. Prenesite direktorij zinn u includes/modules/Hosting/ tako da se datoteke nalaze na
  3. includes/modules/Hosting/zinn/class.zinn.php i includes/modules/Hosting/zinn/ZinnHostBillClient.php.

  4. Settings → Modules → Hosting, aktivirajte Zinn Digital® i dodajte vezu:
  • API address: https://api.zinndigital.com
  • API key: vaš Zinn® API ključ (password polje, tako da ga HostBill sprema šifrirano)
  1. Na proizvodu postavite Product line (npr. mainstream), Stack (zadano
  2. wordpress) i po želji Application i PHP version.

  3. Pritisnite Test connection.

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

  1. Povežite račun s KLIJENTOM, a stranicu s USLUGOM. Druga narudžba klijenta
  2. 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.

  3. Pošaljite ključ idempotencije za svako stvaranje, izveden iz vašeg vlastitog ID-a za tu stavku. Svaki
  4. 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/sites zahtijeva stack_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