Baza znanja

Prodajte Zinn® hosting sa platforme HostBill, Blesta ili iz sopstvenog sistema

Prodajte Zinn hosting putem sistema HostBill, Blesta ili sopstvenog sistema: besplatni HostBill modul, PHP klijent u jednoj datoteci, dva pravila koja koštaju novac kada se prekrše i dva polja zahteva koja je lako izostaviti.

Ako koristite WHMCS, umesto toga koristite WHMCS modul — ova stranica služi za sve ostalo. Postoje dve opcije, obe besplatne i obe u verziji GPL-2.0-or-later.

HostBill

Modul za hostovanje sa istih šest akcija kao i WHMCS modul.

  1. Preuzmite ga i raspakujte.
  2. Otpremite zinn direktorijum u includes/modules/Hosting/ tako da se datoteke nađu na lokaciji
  3. includes/modules/Hosting/zinn/class.zinn.php i includes/modules/Hosting/zinn/ZinnHostBillClient.php.

  4. Settings → Modules → Hosting, aktivirajte Zinn Digital® i dodajte konekciju:
  • API address: https://api.zinndigital.com
  • API key: vaš Zinn® API ključ (password polje, tako da ga HostBill čuva u enkriptovanom obliku)
  1. Na proizvodu podesite stavke Product line (npr. mainstream), Stack (podrazumevano wordpress), kao i opcionalno Application i PHP version.
  2. Pritisnite Test connection.

Nemojte preimenovati zinn direktorijum. HostBillov učitavač izvodi klasu koju traži iz imena direktorijuma, tako da preimenovanje proizvodi modul koji panel prikazuje ali ga nikada ne poziva.

Bilo šta drugo — PHP klijent

Jedna datoteka, bez zavisnosti, bez pretpostavki o panelu. Ubacite ZinnProvisioning.php u sopstvenu kodnu bazu 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 pozivi se nalaze u API reference i možete ih uputiti iz bilo čega.

API ključ

Sedam dozvola, i ni jedna više: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.

Ne i reseller.manage. Ključ koji nalepite u panel za naplatu treba da bude u stanju da blokira klijenta zbog neplaćanja i da ga prijavi; ne treba da bude u stanju da prepisuje vaše sopstvene kredencijale za platni prolaz.

Dva pravila koja koštaju novac kada se prekrše

  1. Definišite nalog na osnovu KLIJENTA, a sajt na osnovu SERVISA. Drugi klijentov
  2. porudžbina mora da završi u nalogu koji već ima. Definišite oba na osnovu servisa i jedan klijent će završiti sa tri nepovezana naloga i tri odvojena kontrolna panela.

  3. Pošaljite ključ idempotentnosti za svako kreiranje, izveden iz vašeg sopstvenog ID-ja za tu stavku. Svaki
  4. sistem za naplatu ponavlja pokušaje — povratni poziv platnog prolaza stiže dvaput, administrator ponovo pokreće neuspešno obezbeđivanje, klijent dvaput klikne. Bez toga, drugi pokušaj kreira drugi sajt i biće vam naplaćen. Oba modula i PHP klijent ovo rade umesto vas; ako direktno pozivate API, pošaljite Idempotency-Key.

Tri polja koja je lako izostaviti

Svako od njih ruši ceo glagol, i nijedno se ne prikazuje kao bilo šta drugo osim kao greška validacije — osim prvog, koje se prikazuje kao uopšte ništa:

  • ⛔⛔ Klijent mora biti stavljen na paket PRE nego što se obezbedi njegov prvi sajt, sa
  • POST /v1/reseller/clients/{orgId}/plan, pri čemu se njegov subscription_id proleđuje u POST /v1/sites. Ovo je stavka za koju ne postoji greška koju možete pročitati. Novi klijentski nalog ne drži nikakvu pretplatu i POST /v1/sites nema polje za paket, tako da sajt obezbeđen bez njega nema nikakav paket: vaš veleprodajni izveštaj se gradi na osnovu aktivnih pretplata vaših klijenata, tako da se nijedna stavka ne generiše i Zinn® vam ne naplaćuje ništa sve dok hosting radi; vaš klijent ne nasleđuje nikakve kvote, tako da se nikakva kvota ne primenjuje na njegov sajt; i ne postoji ništa što nadogradnja može da promeni. Porudžbina vraća 201, sajt se obezbeđuje i radi savršeno. Nijedna strana ne prijavljuje ništa od toga.

Redosled je važan: POST /v1/sites beleži bilo koju pretplatu koja postoji u trenutku kada se izvršava, tako da se paket podešen naknadno ne primenjuje retroaktivno.

  • POST /v1/sites zahteva stack_type. Ako ga izostavite, nijedna porudžbina ne može uspeti.
  • **DELETE /v1/sites/{siteId} zahteva telo `{"confirm_domain": "<the site's own
  • domain>"}** — otkucanu potvrdu, pošto je ovo destruktivni glagol. Ako ga izostavite, nijedno otkazivanje ne može uspeti, tako da servis nastavlja da radi i vi nastavljate da dobijate račune za njega. Pročitajte domen nazad iz GET /v1/reseller/services/{siteId}` umesto da koristite sopstveni zapis: on se upoređuje sa sopstvenim primarnim domenom sajta, a nikada sa aliasom.

Pročitajte celu grešku, a ne samo rečenicu

Poruka o odbijanju validacije je namerno generička — "The request was well-formed but failed validation." — zato što se polazna polovina koja zahteva akciju nalazi u details, koja navodi polje i razlog. Oba modula i PHP klijent je dodaju poruci koju prikazuju vašem administratoru. Ako sami pozivate API, pročitajte error.details; neki unosi nose golu vrednost umesto rečenice, što je način na koji do vas stiže max_sites: 0 kada vaš resellerski paket nema slobodnog prostora.

Pre vaše prve porudžbine

Sajtovi koje vaši klijenski kupuju računaju se u dozvoljeni broj sajtova na vašem resellerskom planu, tako da vam je potreban paket koji ima slobodnog prostora za to. Test konekcije ne može ovo da otkrije — on čita vaš program i ne obezbeđuje ništa — tako da prijavljuje zdrav nalog koji još uvek ne može da vrši prodaju. Porudžbina poslata bez dozvoljene kvote biva odbijena uz poruku koja govori upravo to.

Verifikujte svoje preuzimanje

Obe arhive se isporučuju preko TLS-a sa našeg sopstvenog imena hosta, nikada se ne preusmeravaju negde drugde, sa svojim SHA-256 kontrolnim sumama odštampanim pored linkova za preuzimanje na stranici za preuzimanje.

Još uvek ste zaglavljeni?

Podrška je uključena u svaki paket, a odgovori stižu na vašem jeziku.

Kontaktirajte podršku Svi članci