База знаний
Продажа хостинга Zinn® с ваших собственных систем
Управляйте хостингом Zinn из вашей собственной панели выставления счетов, сайта WordPress или скриптов: получите API-ключ, сделайте свой первый вызов и шесть вызовов, из которых состоит вся интеграция.
Вы перепродаете наш хостинг. Ваши клиенты принадлежат вам: ваши цены, ваши счета, ваш платежный шлюз. Вот как вы управляете нашей платформой из любой уже используемой вами системы — биллинг-панели, собственного сайта WordPress или скрипта.
Что на самом деле видят ваши клиенты
Прежде чем переходить к механике: ваши клиенты никогда не должны нас видеть. Доступны три интерфейса, и вы сами выбираете, какой использовать.
| Интерфейс | Кому принадлежит | |---|---| | Хостинг-панель на вашем доменном имени | Укажите доменное имя панели в разделе Перепродажа → Ваш бренд, и ваши клиенты будут входить по адресу panel.yourcompany.com, видя ваш логотип и ваши цвета. Та же панель, ваш адрес. | | Ваш собственный сайт | Плагин WordPress добавляет поиск доменов и ссылку для входа в один клик на ваш сайт, а заказы оформляются через вашу корзину WooCommerce. | | Ваша биллинг-панель | WHMCS или HostBill остается главным входом; модуль выполняет подготовку ресурсов на стороне бэкенда, а кнопка в клиентской зоне перенаправляет пользователей напрямую в их хостинг. |
⛔ Что бы вы ни выбрали, вы являетесь принципалом (продавцом) для своих клиентов: ваши цены, ваши счета, ваш номер плательщика НДС, ваш платежный шлюз. Мы выставляем счет вам, один раз в месяц, по оптовым ценам.
Установив доменное имя панели, введите его только в поле Адрес панели плагина WordPress и больше нигде — ссылки для входа, создаваемые этим API, будут формироваться на его основе автоматически.
Четыре способа интеграции
Существует четыре способа интеграции, и все они выполняют одно и то же на бэкенде:
| | Для чего | |---|---| | Модуль WHMCS | Магазин на базе WHMCS | | Модуль HostBill | Магазин на базе HostBill | | Плагин WordPress | Продажи с вашего собственного сайта WordPress или WooCommerce | | API | Все остальное — Blesta, внутренняя система, cron-скрипт |
1. Получите ключ API
В вашей панели управления перейдите в раздел Ключи API и создайте новый. Предоставьте ему только те разрешения, которые необходимы:
| Разрешение | Зачем нужно | |---|---| | org.read | Чтение учетных записей ваших клиентов | | sites.create | Создание сайта | | sites.view | Чтение данных услуги | | sites.delete | Удаление | | reseller.view | Просмотр списка ваших услуг и потребления ресурсов | | reseller.provision | Приостановка, возобновление и авторизация клиента |
⛔ Не давайте интеграции разрешение reseller.manage. Оно позволяет редактировать ваш прайс-лист и учетные данные ваших платежных шлюзов. Разрешение reseller.provision создано специально для того, чтобы ключ, который вы вставляете в биллинг-панель или на сайт, не обладал такими полномочиями.
Ключ отображается только один раз. Храните его там же, где и остальные учетные данные — и ни в коем случае не в файлах, доступных через веб-сервер.
2. Сделайте первый запрос
curl https://api.zinndigital.com/v1/reseller/services \
-H "Authorization: Bearer zdk_live_…"
Он возвращает каждую созданную вами услугу (по одной строке на сайт), а также привязанного клиента, статус услуги и установленную вами стоимость. Для нового аккаунта это будет пустой список — и это корректный ответ, а не ошибка.
3. Вся интеграция в шесть запросов
КОГДА ВЫЗОВ
заказ оплачен POST /v1/orgs один раз на КЛИЕНТА
POST /v1/sites один раз на УСЛУГУ
услуга не оплачена POST /v1/reseller/services/{siteId}/suspend
оплата поступила POST /v1/reseller/services/{siteId}/unsuspend
клиент отменяет услугу DELETE /v1/sites/{siteId}
«войти в хостинг» POST /v1/reseller/services/{siteId}/sso
Создание ресурсов состоит из двух вызовов, и ключи имеют решающее значение:
# 1. учетная запись клиента — индексируется по ВАШЕМУ ID клиента
curl -X POST https://api.zinndigital.com/v1/orgs \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: account-4211" \
-d '{"type":"customer","name":"Acme Ltd"}'
# 2. их сайт — индексируется по ВАШЕМУ ID услуги
curl -X POST https://api.zinndigital.com/v1/sites \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: service-9915" \
-d '{"org_id":"<from step 1>","product_line":"mainstream","primary_domain":"acme.com"}'
Два правила, нарушение которых стоит денег
- Индексируйте учетную запись по вашему КЛИЕНТУ, а сайт — по вашей УСЛУГЕ. Второй заказ клиента должен быть добавлен к его существующей учетной записи. Если индексировать оба объекта по услуге, у одного клиента окажется три несвязанных аккаунта и три отдельные панели.
- Передавайте заголовок
Idempotency-Keyдля каждого методаPOST, формируя его из вашего внутреннего ID объекта. Любая биллинг-система выполняет повторные попытки: обратный вызов шлюза приходит дважды, администратор повторно запускает неудачное создание услуги, клиент дважды кликает по кнопке. Без этого ключа вторая попытка приведет к созданию второго сайта, и вам придется за него платить.
Три ответа, которые нельзя упрощать до двух
unsuspendможет вернуть код409. Это означает, что сайт заблокирован нашей службой безопасности, а не вами. Покажите это сообщение; не повторяйте запрос.- **Удаление планирует операцию, а не выполняет ее мгновенно.** Дата возвращается в поле
pending_deletion_at. Заявлять клиенту, что его данные уже удалены, когда это не так — хуже, чем не говорить ничего. disk_used_bytesможет принимать значениеnull, и null — это не ноль. Это означает, что измерение не удалось выполнить, а не то, что диск не используется. Пропустите это поле — не записывайте0в собственные базы данных, иначе вы покажете клиенту зеленую шкалу использования для сайта, данные по которому отсутствуют.
4. Выполните вход от имени клиента
Метод POST /v1/reseller/services/{siteId}/sso возвращает одноразовый URL, который перенаправляет вашего клиента прямо в его учетную запись с уже выполненным входом.
⛔ Генерируйте ссылку по клику, а не во время рендеринга страницы. Эта ссылка является одноразовой и действует всего несколько минут, поэтому ссылка, зашитая на странице, будет использована при первом же просмотре и останется во всех кэш-памятях между вами и браузером.
5. Или установите готовый модуль
- WHMCS — скопируйте модуль в директорию
modules/servers/zinn/, добавьте сервер, у которого в поле Пароль указан ваш API-ключ, и задайте линейку продуктов для товара. Нажмите Тест соединения: модуль выполнит реальный вызов и покажет ответ платформы. - HostBill — скопируйте в каталог
includes/modules/Hosting/zinn/и подключите аналогичным образом. - WordPress — инструмент Zinn® Reseller Toolkit: поиск доменов, ссылка для входа в хостинг ваших клиентов и создание ресурсов в WooCommerce при оплате заказа. Исходный код доступен на странице <https://github.com/Zinn-Digital/zinn-reseller-toolkit> или в вашей панели управления в разделе Плагины.
6. Запуск в работу
Проверьте следующие пункты перед обработкой реальных заказов:
- Тест соединения для модуля успешно пройден, либо ваш первый запрос
curlвозвращает список. - Ваш прайс-лист настроен (Перепродажа → Ваши цены).
- Ваш платежный шлюз подключен (Перепродажа → Платежные шлюзы) — клиенты платят вам через ваш собственный аккаунт.
- Указаны реквизиты вашей компании (Перепродажа → Ваша компания), благодаря чему в счета клиентов будут входить ваши юридические данные и номер НДС, а не наши.
- Вы успешно оформили один реальный заказ от начала и до конца и убедились, что сайт появился в системе.
Где найти остальную информацию
Полную справочную документацию по API (по каждому эндпоинту, сгенерированную на основе нашей спецификации с указанием необходимых прав) можно найти по адресу <https://zinndigital.com/developers/api>.
Всё ещё нужна помощь?
Поддержка включена в каждый тарифный план, а ответы предоставляются на вашем родном языке.
Обратиться в поддержку → Все статьи →