Tí ẹ bá ń lo WHMCS, ẹ lo mọ́júùlù WHMCS dípò rẹ̀ — ojú-ewé yìí wà fún ohun gbogbo mìíràn. Àwọn àṣàyàn méjì ló wà, méjèèjì jẹ́ ọ̀fẹ́ àti GPL-2.0-or-later.
HostBill
Mọ́júùlù ìgbàlejò ojú-òpó wẹ́ẹ̀bù kan tí ó ní àwọn ìṣe mẹ́fà kan náà bíi ti WHMCS.
- Gba èyí wọlé kí o sì tú u.
- Ṣe ìrùsókè folda
zinn sínú includes/modules/Hosting/ kí àwọn fáìlì náà lè wà ní
includes/modules/Hosting/zinn/class.zinn.php àti includes/modules/Hosting/zinn/ZinnHostBillClient.php.
- Settings → Modules → Hosting, mú Zinn Digital® ṣiṣẹ́, kí o sì fi ìsopọ̀ kún un:
- Àdírẹ́sì API:
https://api.zinndigital.com
- Kókóró API: kókóró API Zinn® tiyín (pápá
password kan, kí HostBill lè fi pamọ́ pẹ̀lú ààbò ìyédèpadà)
- Lórí ọjà náà ṣètò Product line (f.k.
mainstream), Stack (wordpress nípa
ìpéwọ̀n), àti pẹ̀lú àṣàyàn Application àti PHP version.
- Tẹ Test connection.
⛔ Ẹ má ṣe yí orúkọ folda zinn padà. Olùrùsókè ti HostBill máa ń mú kíláàsì tí ó ń wá jáde láti inú orúkọ folda náà, nítorí náà yíyí orúkọ padà yóò mú mọ́júùlù tí pánẹ́ẹ̀lì kọ sílẹ̀ tí kò sì ní pè é jáde.
Ohun mìíràn yòówù — oníbàárà PHP náà
Fáìlì kan, kò gbẹ́kẹ̀lé ohun kankan, kò ní èrò àtọkànwá nípa pánẹ́ẹ̀lì. Ju ZinnProvisioning.php sínú kóòdù tirẹ̀ kí o sì pe àwọn ọ̀nà mẹ́fà.
require_once 'ZinnProvisioning.php';
$zinn = new ZinnProvisioning(getenv('ZINN_API_KEY'));
// Nígbà tí a bá sanwó àṣẹ kan — lẹ́ẹ̀kan fún ONÍBÀÁRÀ kọ̀ọ̀kan, lẹ́yìn náà lẹ́ẹ̀kan fún IṢẸ́ kọ̀ọ̀kan:
$orgId = $zinn->account('customer-4211', 'Acme Ltd');
$siteId = $zinn->provision('service-9915', $orgId, 'acme.com', 'mainstream', 'wordpress');
// Tọ́jú $orgId sí ìkọsílẹ̀ oníbàárà rẹ àti $siteId sí ìkọsílẹ̀ iṣẹ́ rẹ.
$zinn->suspend($siteId, 'INV-2026-114 unpaid'); // ìwé owó kan kò tíì san
$zinn->unsuspend($siteId); // wọ́n sanwó
$zinn->terminate($siteId); // wọ́n fagi lé e — ó ṣètò ìparẹ́ kan
// Nígbà tí wọ́n bá tẹ "wọlé sí ìgbàlejò ojú-òpó mi" — pèsè é lórí ÌTẸ̀ NÁÀ, má ṣe jẹ́ nígbà tí ojú-ewé bá ń jáde:
header('Location: ' . $zinn->signInLink($siteId));
Ṣé o kò kọ PHP? Àwọn ìpè kan náà wà nínú ìtọ́kasí API bẹ́ẹ̀ sì ni o lè ṣe wọ́n láti inú ohunkóhun.
Kókóró API náà
Àwọn àṣẹ méje, kò sì sí mọ́: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Kì í ṣe reseller.manage. Kókóró kan tí o lẹ̀ mọ́ inú pánẹ́ẹ̀lì ìsanwó gbọ́dọ̀ lè dá oníbàárà dúró fún àìsanwó kí ó sì wọlé fún wọn; kò gbọ́dọ̀ lè kọ àwọn ẹ̀rí ìwọlé ti ọ̀nà-ìsanwó tirẹ̀ padà.
Àwọn òfin méjì tí ń náni lówó nígbà tí a bá rú wọn
- Ṣe kókóró àkántì náà lórí ONÍBÀÁRÀ rẹ, àti ojú-òpó náà lórí IṢẸ́ rẹ. Àṣẹ kejì ti oníbàárà
kan gbọ́dọ̀ wọ inú àkántì tí wọ́n ti ní tẹ́lẹ̀. Tí o bá ṣe kókóró méjèèjì lórí iṣẹ́ náà, oníbàárà kan yóò wá ní àkántì mẹ́ta tí kò tan mọ́ ara wọn àti àwọn pánẹ́ẹ̀lì ìdarí mẹ́ta ọ̀tọ̀ọ̀tọ̀.
- Fi kókóró idempotency ránṣẹ́ lórí ìṣẹ̀dá kọ̀ọ̀kan, tí a mú jáde láti inú nọ́mbà ìdánimọ̀ tirẹ̀ fún ohun náà. Ètò
ìsanwó kọ̀ọ̀kan máa ń gbìyànjú lẹ́ẹ̀kan síi — ìpèpadà ọ̀nà-ìsanwó máa ń dé lẹ́ẹ̀mejì, olùṣàkóso tún máa ń ṣe ìpèsè tí ó kùnà, oníbàárà máa ń tẹ̀ lẹ́ẹ̀mejì. Láìsí i, ìgbìyànjú kejì yóò ṣẹ̀dá ojú-òpó kejì a ó sì gba owó rẹ̀ lọ́wọ́ rẹ. Mọ́júùlù méjèèjì àti oníbàárà PHP máa ń ṣe èyí fún ọ; tí o bá ń pe API náà fúnra rẹ, fi Idempotency-Key ránṣẹ́.
Àwọn pápá mẹ́ta tí ó rọrùn láti gbàgbé
Ọ̀kọ̀ọ̀kan máa ń ba gbogbo ìṣe jẹ́, kò sì sí èyí tí ó máa ń hàn bí kì í ṣe àṣìṣe ìmúdájú — yàtọ̀ sí ti àkọ́kọ́, tí kì í fi ohunkóhun hàn rárá:
- ⛔⛔ A gbọ́dọ̀ fi oníbàárà sínú ètò kan KÍ a tó pèsè ojú-òpó àkọ́kọ́ wọn, pẹ̀lú
POST /v1/reseller/clients/{orgId}/plan, kí a sì fi subscription_id rẹ̀ ránṣẹ́ sí POST /v1/sites. Èyí ni èyí tí kò ní àṣìṣe kankan láti kà. Àkántì oníbàárà tuntun kò ní ìforúkọsílẹ̀ kankan bẹ́ẹ̀ sì ni POST /v1/sites kò ní pápá ètò kankan, nítorí náà ojú-òpó tí a pèsè láìsí èyí kò ní ètò kankan rárá: a kọ gbólóhùn ìtajà-àpapọ̀ rẹ láti inú àwọn ìforúkọsílẹ̀ tí ó wà láàyè ti àwọn oníbàárà rẹ, nítorí náà kò sí ìlà tí a gbé dìde bẹ́ẹ̀ sì ni Zinn® kò gba owó kankan lọ́wọ́ rẹ fún gbogbo àkókò tí ìgbàlejò ojú-òpó náà bá ń ṣiṣẹ́; oníbàárà rẹ kò jogún àwọn ààyè kankan, nítorí náà kò sí ààlà tí a lò fún ojú-òpó wọn; bẹ́ẹ̀ sì ni kò sí ohunkóhun fún ìgbéga láti yí padà. Àṣẹ náà máa ń dá 201 padà, ojú-òpó náà máa ń pèsè, ó sì ń ṣiṣẹ́ dáadáa pátápátá. Kò sí ohunkóhun ní ìpẹ̀kun méjèèjì tí ń jábọ̀ èyíkéyìí nínú rẹ̀.
Ètò náà ṣe pàtàkì: POST /v1/sites máa ń ṣe àkọsílẹ̀ ìforúkọsílẹ̀ èyíkéyìí tí ó wà ní àkókò tí ó ń ṣiṣẹ́, nítorí náà ètò tí a ṣètò lẹ́yìn náà kì í so pọ̀ padà sẹ́yìn.
POST /v1/sites gba stack_type dandan. Fò ó dá kí àṣẹ kankan má bàa kẹ́sẹjárí.
- **
DELETE /v1/sites/{siteId} gba àkóónú `{"confirm_domain": "<the site's own
domain>"} dandan** — ìmúdájú tí a tẹ̀, nítorí pé èyí ni ìṣe apanirun náà. Fò ó dá kí fífagilé kankan má bàa kẹ́sẹjárí, kí iṣẹ́ náà lè máa bá a lọ láti ṣiṣẹ́ kí a sì máa bá a lọ láti gba owó rẹ̀ lọ́wọ́ rẹ. Ka orúkọ àkópọ̀ náà padà láti GET /v1/reseller/services/{siteId}` dípò lílo àkọsílẹ̀ tirẹ̀: a máa ń fi wé orúkọ àkópọ̀ àkọ́kọ́ ti ojú-òpó náà fúnra rẹ̀, kì í sì ṣe orúkọ mìíràn rárá.
Ka gbogbo àṣìṣe náà, kì í ṣe gbólóhùn náà nìkan
Iṣẹ́ ìkọ̀ ìmúdájú kan jẹ́ ti gbogbogbòò pẹ̀lú ète — "The request was well-formed but failed validation." — nítorí pé ààbọ̀ tí a lè gbé ìgbésẹ̀ lé lórí wà nínú details, èyí tí ó dárúkọ pápá náà àti ìdí rẹ̀. Mọ́júùlù méjèèjì àti oníbàárà PHP máa ń so ó mọ́ iṣẹ́ tí wọ́n ń fi han olùṣàkóso rẹ. Tí o bá ń pe API náà fúnra rẹ, ka error.details; àwọn àkọsílẹ̀ kan máa ń gbé iye lásán dípò gbólóhùn kan, èyí tí ó jẹ́ bí max_sites: 0 ṣe ń dé ọ̀dọ̀ rẹ nígbà tí ètò àtúnrajà rẹ kò bá ní ààyè kankan mọ́.
Kí o tó ṣe àṣẹ àkọ́kọ́ rẹ
Àwọn ojú-òpó tí àwọn oníbàárà rẹ ń rà máa ń kà sí ààyè ojú-òpó ti ètò àtúnrajà tirẹ̀, nítorí náà o nílò ètò kan tí ó ní ààyè nínú. Àyẹ̀wò ìsopọ̀ kò lè mọ èyí — ó máa ń ka ètò rẹ kò sì pèsè ohunkóhun — nítorí náà ó máa ń jábọ̀ àkántì tí ó dára tí kò tíì lè tà. Àṣẹ tí a tẹ́ láìsí ààyè ni a máa kọ̀ pẹ̀lú iṣẹ́ tí ó sọ bẹ́ẹ̀ gan-an.
Rí i dájú pé ohun tí o gbà wọlé tọ̀nà
A máa ń pèsè àwọn àkójọ méjèèjì lórí TLS láti orúkọ olupèsè tiwa fúnra wa, a kì í darí wọn sí ibòmíràn rárá, pẹ̀lú àwọn àkójọ SHA-256 wọn tí a tẹ̀ sí ẹ̀gbẹ́ àwọn àjápọ̀ ìgbasílẹ̀ lórí ojú-ewé àwọn ìgbasílẹ̀.