Модулът на Zinn Digital® превръща собствените бутони на WHMCS в реални действия на нашата платформа. Дадена поръчка предоставя хостинга на Вашия клиент. Автоматизацията на WHMCS за просрочени фактури го спира временно. Маркирането на фактурата като платена го активира отново. Анулирането насрочва изтриването. А Вашият клиент получава бутон Log in to hosting panel в клиентската си зона, който го вписва директно.
Той е безплатен, лицензиран под GPL-2.0-or-later и няма привилегирован достъп до нашата платформа: всяка заявка, която прави, е към документирана крайна точка, която бихте могли да извикате и сами със собствен API ключ.
Преди да започнете
Нужни са Ви две неща, като второто често бива пропускано.
- Zinn® риселър акаунт с активна програма. Регистрирайте се на
zinndigital.com и включете риселърската дейност.
- Риселърски план с лимит за брой сайтове. Сайтовете, които Вашите клиенти поръчват, се приспадат от Вашия
план, така че Ви е необходим такъв със свободно място.
⚠️ Test Connection не може да Ви покаже дали дадена поръчка ще бъде успешна. Функцията прочита Вашата програма и не конфигурира ресурси, поради което отчита изправен active акаунт, който все още не може да продава нищо. Ако първата Ви поръчка се провали с „This organization has no hosting plan, so it cannot host a site yet“, причината е точно тази — закупете или разширете Вашия риселърски план и направете поръчката отново. В модула няма никакъв проблем.
1. Създайте API ключа
Във Вашето Zinn® табло отворете API keys и създайте ключ с точно тези единадесет права:
| Право | Защо е необходимо |
|---|
org.create | Откриване на Zinn® акаунта на Вашия клиент при първата му поръчка. |
org.read | Четене на клиентските Ви акаунти. |
sites.create | Предоставяне (provisioning) на сайта. |
sites.view | Четене на услуга и нейното потребление. |
sites.delete | Прекратяване. |
reseller.view | Списък на продаденото от Вас и отчитане на диск и трафик. |
reseller.provision | Спиране, пускане, вписване на клиент, задаване на плана му и смяна на пакета му. |
billing.view | Проверка на цената за надграждане преди извършването му. |
sites.manage | Изчистване на кеша и създаване на резервно копие чрез бутоните. |
sites.panel_access | Промяна на паролата на администратора на WordPress. |
hosting.php.manage | Смяна на версията на PHP при надграждане или преминаване към по-нисък план. |
⛔ Не предоставяйте reseller.manage. Ключ, поставен в панел за таксуване, трябва да може да спира клиент поради неплащане и да го вписва в системата. Той не бива да може да чете и презаписва Вашите собствени данни за достъп до платежните шлюзове. reseller.provision съществува, за да не се налага да предоставяте по-широкото право. ⛔ org.create не е опционално. Без него модулът може да чете Вашите акаунти, но не може да открие нов, така че Test Connection преминава успешно, а първата поръчка връща отговор 403. ⛔⛔ Предоставете всички права от таблицата и имайте предвид, че Test Connection не може да Ви информира, ако не сте го направили. Функцията чете Вашата риселърска програма и не конфигурира нищо, така че свети в зелено за ключ, на когото липсва което и да е от тях. Това, което ще получите вместо това, е 403 при конкретната операция, покривана от липсващото право — месеци по-късно, от клиент.
2. Инсталирайте модула
- Изтеглете модула и го разархивирайте.
- Качете директорията
zinn във Вашата инсталация на WHMCS, така че файлът на модула да се намира в
modules/servers/zinn/zinn.php.
⛔ Директорията задължително трябва да се казва zinn. WHMCS извежда имената на функциите на даден provisioning модул от името на неговата директория, така че преименуването ѝ на zinn-whmcs или zinndigital води до модул, който WHMCS показва в списъка, позволява Ви да изберете и след това никога не извиква — без каквато и да е грешка. ZIP архивът вече се разархивира с правилното име; просто не го преименувайте.
3. Добавете сървъра
В WHMCS: Configuration → System Settings → Servers → Add New Server.
- Name: произволно, напр.
Zinn Digital®
- Hostname:
api.zinndigital.com
- Type:
Zinn Digital®
- Password: Вашият API ключ от стъпка 1
⛔ Ключът се поставя в полето Password, което WHMCS съхранява криптирано. Не го поставяйте в конфигурационна опция на продукт — те са в чист текст в базата данни и са видими за всеки администратор, а тези идентификационни данни могат да създават и унищожават хостинга на Вашите клиенти.
Натиснете Test Connection. Извършва се реална заявка и се докладва отговорът на нашата платформа, вместо просто да се проверява дали полетата са попълнени.
4. Създайте продукта
Configuration → System Settings → Products/Services, след което задайте в Module Settings току-що добавения от Вас сървър. Полетата са:
| Поле | Задължително | Описание |
|---|
| Product line | да | Линията на Zinn®, която продавате — mainstream (управляем WordPress), footprint_free, wordpress, linux, cloud, agency, app_hosting, ai_hosting, lms_hosting, managed_database, vector_hosting, zinn_compute, fleet_linux, fleet_enterprise, mail или reseller. |
| Stack | да | Какво се инсталира: wordpress (по подразбиране), woocommerce, php, static, node, one_click, headless_cms, nextcloud или owncloud. |
| Application | не | Само за стековете one_click и headless_cms — кое приложение да се инсталира. Посочването на приложение при всеки друг стек се отхвърля, тъй като съответният стек вече определя какво се инсталира. |
| PHP version | не | напр. 8.3. Оставете празно за стойността по подразбиране на съответната линия. Версия, която линията не предлага, се отхвърля със списък на поддържаните. |
| Plan code | да | Планът на Zinn®, който този продукт продава. GET /v1/reseller/prices извежда Вашите планове. Поръчка без това поле се отхвърля — вижте предупреждението по-долу. |
| Billing interval | не | monthly (по подразбиране) или annual — интервалът, за който се издава Вашата позиция на едро за този клиент. Сумата, с която таксувате Вашия собствен клиент, се задава в продукта на WHMCS и остава непроменена. |
⛔⛔ Plan code е задължителен и поръчка без него се отхвърля целенасочено. До 2026-09-01 полето беше само декоративно и никоя система не го четеше, поради което модулът поръчваше хостинг, който нямаше никакъв план — и всяко последствие от това беше незабележимо. Вашето месечно извлечение на едро се генерира от активните абонаменти на клиентите Ви, така че нямаше ред за услугата и не бивахте фактурирани за нищо, докато тя работеше; Вашият клиент не получаваше лимити, така че към неговия сайт не се прилагаше квота за дисково пространство или брой файлове; а Change Package нямаше какво да промени, така че продадено от Вас надграждане не можеше да бъде изпълнено. През цялото време сайтът се конфигурираше и работеше безупречно.
Сега модулът отхвърля поръчката, тъй като няма безопасен план, който да отгатне: подобно налучкване би предоставило хостинг по план, който не сте избрали и за който може да не сте задали цена, и — за разлика от отхвърлянето, което виждате веднага — проблемът би излязъл наяве едва при пристигането на извлечението, ако изобщо се забележи.
Задайте Auto Setup според Вашите предпочитания — модулът е идемпотентен спрямо идентификатора на услугата в WHMCS (service id), така че повторният опит за предоставяне връща същия сайт, вместо да Ви таксува за втори.
Какво прави всяко действие в WHMCS
| Действие в WHMCS | Какво се случва от наша страна |
|---|
| Create | Създава Zinn® акаунта на клиента (или използва съществуващия такъв) и предоставя сайта му. |
| Suspend | Поставя сайта в състояние на задържане поради неплащане. Съдържанието се запазва; нищо не се изтрива. |
| Unsuspend | Премахва Вашето спиране. |
| Terminate | Насрочва изтриването на сайта с гратисен период. Датата се показва в клиентската зона. |
| Usage update | Обновява данните за дисково пространство и трафик за всяка услуга веднъж дневно. |
| Log in to hosting panel | Отваря еднократна връзка за директно вписване в контролния панел на Вашия клиент. |
| Change Package | Надгражда или понижава услугата. Премества пакета, както и PHP версията, ако новият продукт посочва такава. |
| Change Password | Задава паролата на администратора на WordPress. Полето не се появява при стекове, които нямат такъв акаунт. |
| Renew | Потвърждава, че услугата все още съществува. Хостингът на Zinn® е непрекъснат, така че няма отдалечен срок за удължаване. |
| Sync Usage / Purge Cache / Take Backup | Бутони на страницата на услугата в административния панел. Вашият клиент получава Purge Cache и Take Backup в своята клиентска зона. |
| Service tab | Статус, план, диск, трафик, евентуално насрочено изтриване и кой е наложил спирането. |
| Import | ListAccounts чете всяка страница, така че импортирането не може тихо да спре още на първата. |
Надграждания: кой кого таксува
Вашият клиент никога не получава фактура от Zinn®, нито при поръчка, нито при надграждане. Вие го таксувате чрез WHMCS; ние таксуваме Вас чрез Вашето извлечение на едро. Следователно Change Package променя правата на Вашия клиент и реда в следващото Ви извлечение, без да засяга банкови карти — WHMCS вече е взел парите от клиента Ви и е изчислил съответното пропорционално преизчисляване.
Втора услуга на клиент. При същия план това е още един сайт в рамките на лимита за брой сайтове на самия план и не се предоставя нищо допълнително. При различен план поръчката се отхвърля: замяната на активния план би оставила една от двете услуги нефактурирана. Продайте и двете на един и същ план или регистрирайте потребителя като отделен клиентски запис в WHMCS.
Change Password съществува само за WordPress. Хостингът на Zinn® няма единна „парола за услугата“ — Вашият клиент влиза в панела си чрез бутона за вписване — а сайт с php или static няма акаунт на ниво приложение, който да се променя. WHMCS напълно скрива полето, вместо да показва такова, което не може да сработи.
Три отговора, които не бива да свеждате до два
- Unsuspend може да върне отказ. Това означава, че сайтът е спрян от нашия отдел за злоупотреби
(abuse team), а не от Вас, и никой панел за таксуване не може да го пусне. Съобщението посочва това; покажете го на Вашия администратор, вместо да опитвате отново.
- Terminate насрочва изтриване, а не го извършва веднага. Датата се връща като стойност на
pending_deletion_at и се показва в клиентската зона. Да кажете на клиент, че данните му вече са изтрити, когато това не е така, е по-лошо, отколкото да не му кажете нищо.
- Дискът и трафикът могат да бъдат неизвестни, а неизвестното не е нула. Когато не сме успели да направим
засичане, модулът оставя стойността непроменена, вместо да запише 0 — в противен случай WHMCS би показал на Вашия клиент успокояваща празна лента за потребление за сайт, от който нямаме данни.
Отстраняване на неизправности
Test Connection преминава успешно, а първата поръчка се проваля с грешка за права. В API ключа липсва org.create. Модулът трябва да открие акаунта на клиента, преди да може да създаде неговия сайт.
Поръчка се проваля със съобщение, че организацията няма хостинг план. Във Вашия риселърски план не е останал лимит за сайтове или все още нямате такъв. Вижте раздела Преди да започнете по-горе.
Поръчка се проваля със съобщение за стек. Полето Stack в продукта е празно или посочва нещо, което не изграждаме. Задайте го на wordpress, освен ако не продавате нещо друго.
Анулиранията се провалят. Уверете се, че използвате версия 1.0.0 или по-нова на модула. По-ранните версии не изпращаха потвърждение за изтриване и всяко прекратяване биваше отхвърляно, което оставяше услугата активна и фактурираща се.
Отказ, посочващ конкретно поле. Нашите грешки при валидация посочват полето и причината в скоби след съобщението, напр. (php_version: 7.2 is not offered on this product line). Това е полезната за действие част — изречението пред нея е нарочно формулирано общо.
Проверете Вашия изтеглен файл
Всеки архив се предоставя през TLS от нашето собствено хост име и никога не се пренасочва към хост на трета страна. Неговата SHA-256 контролна сума е изписана до линка за изтегляне на страницата за изтегляния. Сравнете я след изтегляне:
- macOS или Linux:
shasum -a 256 zinn-whmcs-1.0.0.zip
- Windows:
certutil -hashfile zinn-whmcs-1.0.0.zip SHA256
Не използвате WHMCS?
Наличен е HostBill модул, както и еднофайлов PHP клиент за всичко останало — и двата са безплатни и се намират на същата страница за изтегляния. Всяка крайна точка, която модулите използват, е документирана в справочника за API.