Перепродажа модулей ISPsystem

Материал из ISPWiki
Версия от 12:04, 28 июля 2016; Greed (обсуждение | вклад) (Обработка запросов сторонними системами)
Перейти к: навигация, поиск

При установке дополнительных модулей, COREmanager автоматизирует их покупку, если они являются платными. То, в какой биллинг панель пойдет покупать модуль, зависит от адреса, с которого сервер пришел за лицензией последний раз. Если адрес числится за одним из партнеров, и у этого партнера настроена перепродажа модулей ISPsystem, и заведены соответствующие тарифные планы, пользователю будет предложено ввести регистрационные данные от партнерского биллинга. В противном случае, цена будет взята из тарифов ISPsystem и пользователю будет предложено зарегистрировать лицензию в биллинге ISPsystem. Это можно сделать как на существующий аккаунт, так и создать новый. Если лицензия уже зарегистрирована, пользователю предложат ввести пароль от биллинга ISPsystem. После этого будет сформирована корзина заказов, куда, в случае, если лицензия триальная, помимо модуля будет помещена и месячная лицензия на соответствующую панель. Если на счету у пользователя достаточно средств для оплаты заказа, оплата будет произведена автоматически, в противном случае пользователь будет перенаправлен в биллинг для завершения заказа вручную. После оплаты модуля панель заново загрузит лицензию, в которой должна быть пометка о купленных модулях, и, если она есть, модуль будет установлен.

Настройка биллинга для перепродажи модулей

Для начала, необходимо:

  • стать ресейлером ISPsystem
  • сообщить нам блоки своих IP адресов
  • указать адрес биллинга, куда необходимо отправлять запросы на покупку модулей

Настройка BILLmanager

Обработка запросов сторонними системами

Для обработки заказа модуля система, по сути, должна эмулировать BILLmanager API. Необходимо реализовать обработку следующих типов запросов:

  • Получение списка тарифов: <URL биллинга>?func=pricelist.export&itemtype=addition. В ответ мы ожидаем XML документ следующего формата:
<doc>
  <pricelist>
    <id>277</id>
    <additionintname>Virusdie</additionintname>
    <price currency="RUB">
      <period cost="913.9286" type="month" length="1">monthly</period>
    </price>
  </pricelist>
</doc>

при построении списка, а в последствии и при покупке, используется <period> с type="month" и length="1". additionintname должен соответствовать внутреннему имени модуля.

  • Получение содержимого корзины: <URL биллинга>?authinfo=<имя>:<пароль>&func=backet. В полученном xml проверятся наличие элементов /doc/list[@name='itemlist']/elem. Если таковые будут найдены, то модули будут добавлены в корзину, но панель не будет пытаться автоматически оплатить ее. Пользователь будет перенаправлен в биллинг, для ручного завершения заказа.
  • Размещение заказа в корзине: <URL биллинга>?authinfo=<имя>:<пароль>&func=addition.order.param&item=?&period=?&pricelist=?&sok=ok. где item - id лицензии, period и pricelist - будут взяты из списка тарифов (/doc/pricelist/id и /doc/pricelist/price/period/@length). В ответе ожидается XML:
<doc><billorder.id>1234</billorder.id></doc>
  • Оплата заказа: <URL биллинга>?authinfo=<имя>:<пароль>&func=basket&id=?&sok=ok&clicked_button=bay. Где id - идентификатор, полученный при размещении заказа.
  • Переход в биллинг: <URL биллинга>?authinfo=<имя>:<пароль>&func=session.newkey&key=? key - произвольная случайная последовательность символов. После получения ответа пользователя перенаправляют на адрес: <URL биллинга>?func=auth&username=<имя>&key=?&backlevel=?&backname=?&backurl=?, где key - последовательность из предыдущего вызова, backlevel - уровень доступа пользователя в текущей панели, backname - имя текущей панели, backurl - <URL панели>?startform=plugin