Ha WHMCS-t használ, használja inkább a WHMCS-modult – ez az oldal minden másra vonatkozik. Két lehetőség áll rendelkezésre, mindkettő ingyenes és mindkettő GPL-2.0-or-later licencű.
HostBill
Egy tárhelymodul, amely ugyanazt a hat műveletet tartalmazza, mint a WHMCS-modul.
- Töltse le, majd csomagolja ki.
- Töltse fel a
zinn könyvtárat a includes/modules/Hosting/ mappába, hogy a fájlok a includes/modules/Hosting/zinn/class.zinn.php és a includes/modules/Hosting/zinn/ZinnHostBillClient.php helyre kerüljenek.
- Settings → Modules → Hosting, aktiválja a Zinn Digital® modult, majd adjon hozzá egy kapcsolatot:
- API address:
https://api.zinndigital.com
- API key: az Ön Zinn® API-kulcsa (ez egy
password mező, így a HostBill titkosítva tárolja)
- A terméknél állítsa be a Product line (pl.
mainstream), a Stack (alapértelmezetten wordpress), valamint opcionálisan az Application és a PHP version értékét.
- Nyomja meg a Test connection gombot.
⛔ Ne nevezze át a zinn könyvtárat. A HostBill betöltője a könyvtár nevéből vezeti le a keresett osztályt, így az átnevezés olyan modult eredményez, amelyet a vezérlőpult kilistáz, de soha nem hív meg.
Minden más – a PHP-kliens
Egyetlen fájl, nincsenek függőségek, nincsenek vezérlőpulttal kapcsolatos feltételezések. Helyezze el a ZinnProvisioning.php fájlt a saját kódjában, és hívjon meg hat metódust.
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));
Nem PHP-ban fejleszt? Ugyanezek a hívások megtalálhatók az API-referenciában, és bármilyen nyelvből meghívhatók.
Az API-kulcs
Hét jogosultság, és semmi több: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Nem a reseller.manage. Egy számlázási felületre bemásolt kulcsnak képesnek kell lennie felfüggeszteni egy ügyfelet nemfizetés miatt, és bejelentkeztetni őt; de nem szabad engedélyezni számára a saját fizetési átjáró hitelesítő adatainak átírását.
A két szabály, amely pénzbe kerül, ha megszegik őket
- A fiókot az ÜGYFÉLHEZ, a webhelyet pedig a SZOLGÁLTATÁSHOZ rendelje kulcsként. Az ügyfél második megrendelésének a már meglévő fiókjába kell kerülnie. Ha mindkettőt a szolgáltatáshoz rendeli kulcsként, egyetlen ügyfél három egymástól független fiókkal és három különálló vezérlőpulttal fog rendelkezni.
- Minden létrehozáskor küldjön egy idempotencia-kulcsot, amelyet a saját azonosítójából képez az adott elemhez. Minden számlázási rendszer újrapróbálkozik – egy fizetési átjáró visszahívása kétszer érkezik meg, egy adminisztrátor újra lefuttat egy sikertelen kiosztást, egy ügyfél duplán kattint. Enélkül a második kísérlet egy második webhelyet hoz létre, és ezt kiszámlázzák Önnek. Mindkét modul és a PHP-kliens automatikusan elvégzi ezt Ön helyett; ha közvetlenül hívja az API-t, küldje el a(z)
Idempotency-Key fejlécet.
Három mező, amelyet könnyű kihagyni
Mindegyik egy teljes műveletet tesz működésképtelenné, és egyik sem jelenik meg másként, mint érvényesítési hibaként – kivéve az elsőt, amely egyáltalán semmilyen módon nem jelenik meg:
- ⛔⛔ Az ügyfelet egy díjcsomaghoz KELL rendelni, MIELŐTT az első webhelyét üzembe helyeznék, a
POST /v1/reseller/clients/{orgId}/plan használatával, a hozzá tartozó subscription_id értéket pedig átadva a POST /v1/sites kérésnek. Ennél az esetnél nincs hibaüzenet, amit le lehetne olvasni. Egy új ügyfélfiók nem tartalmaz előfizetést, és a POST /v1/sites nem rendelkezik terv mezővel, így az anélkül kiépített webhelyhez egyáltalán nem tartozik csomag: az Ön nagykereskedelmi elszámolása az ügyfelei aktív előfizetései alapján készül, így nem jön létre tétel, és a Zinn® semmit sem számláz Önnek, amíg a tárhely működik; az ügyfele nem örököl kereteket, így nem vonatkozik kvóta a webhelyére; és nincs semmi, amit egy frissítés módosíthatna. A megrendelés 201-es választ ad, a webhely létrejön, és kifogástalanul működik. Egyik végpont sem jelez semmit ebből.
A sorrend számít: a POST /v1/sites azt az előfizetést rögzíti, amely a futásának pillanatában létezik, így az utólag beállított csomag nem kapcsolódik visszamenőlegesen.
- A
POST /v1/sites megköveteli a stack_type meglétét. Hagyja el, és egyetlen megrendelés sem lesz sikeres.
- A
DELETE /v1/sites/{siteId} egy {"confirm_domain": "<the site's own domain>"} törzset igényel — egy begépelt megerősítést, mivel ez a destruktív művelet. Hagyja el, és egyetlen lemondás sem lesz sikeres, így a szolgáltatás tovább működik, és Önnek továbbra is számlázzák azt. A saját nyilvántartása helyett a GET /v1/reseller/services/{siteId} végpontról olvassa vissza a domaint: a rendszer a webhely saját elsődleges domainjéhez hasonlítja, soha nem egy alias névhez.
Olvassa el a teljes hibát, ne csak a mondatot
Az érvényesítés elutasítási üzenete szándékosan általános — "The request was well-formed but failed validation." —, mivel a cselekvésre alkalmas rész a details mezőben van, amely megnevezi a mezőt és az okot. Mindkét modul és a PHP-kliens is hozzáfűzi azt az adminisztrátornak megjelenített üzenethez. Ha Ön közvetlenül hívja az API-t, olvassa el az error.details mezőt; egyes bejegyzések egy teljes mondat helyett csak egy puszta értéket tartalmaznak, így jut el Önhöz a max_sites: 0, amikor a viszonteladói csomagjában nincs több hely.
Az első megrendelése előtt
Az ügyfelei által vásárolt webhelyek beleszámítanak az Ön viszonteladói csomagjának webhelykeretébe, ezért olyan csomagra van szüksége, amelyben van még hely. Egy kapcsolati teszt ezt nem képes észlelni — beolvassa az Ön programját, de nem helyez üzembe semmit —, így egy olyan működő fiókot jelez, amelyből még nem lehet értékesíteni. A keret nélkül leadott megrendelést a rendszer elutasítja egy pontosan ezt leíró üzenettel.
Ellenőrizze a letöltését
Mindkét archívumot TLS-en keresztül, a saját hosztnevünkről szolgáljuk ki, soha nem irányítjuk át máshová, és a SHA-256 ellenőrző összegeik a letöltési linkek mellett találhatók a letöltési oldalon.