Baza znanja

Prodajte Zinn® hosting putem HostBilla, Bleste ili vlastitog sustava

Prodajte Zinn® hosting putem sustava HostBill, Blesta ili vlastitog sustava: besplatni HostBill modul, PHP klijent u jednoj datoteci, dva pravila čije kršenje košta i dva polja zahtjeva koja se lako izostave.

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.

Najnovije s bloga

Što smo pisali o hostingu, SEO-u i vođenju web-mjesta u velikom opsegu.

SEO i izgradnja poveznica iz sloja poslužitelja: Pogled operatera za 2026.

Kako hosting oblikuje indeksiranje i vrijednost poveznica u 2026.: zadržavanje stranica u indeksu, provjera starijih domena prije izrade stranica na njima, izgradnja poveznica bez SEO traga i iskren osvrt na to što infrastruktura može, a što ne može učiniti za SEO.

Pročitajte objavu →

Kako WordPress učiniti brzim i sigurnim: kontrolni popis za performanse i priključke

Praktičan kontrolni popis za brz i siguran WordPress: predmemoriranje na razini poslužitelja, objektno predmemoriranje po web-mjestu, nekolicina priključaka koje vrijedi upotrebljavati, održavanje stoga ažurnim i stranice WooCommerce koje nikada ne smijete predmemorirati.

Pročitajte objavu →

Kako odabrati upravljani web hosting u 2026.: Vodič za kupce

Što zapravo razlikuje dobar upravljani hosting od jeftine kutije s upravljačkom pločom — migracije, sigurnosne kopije, izolacija, stvarno predmemoriranje i pošteno skaliranje — te kako to procijeniti prije nego što se obvežete.

Pročitajte objavu →

Pročitajte blog →

Još uvijek imate poteškoća?

Korisnička podrška uključena je u svaki paket, služba je dostupna 24 sata dnevno i možete nam pisati na bilo kojem od naša 58 jezika — odgovorit ćemo Vam na Vašem.

Obratite se podršci → Svi članci →