Открытие API для работы с услугами от российского лоукост-хостера (часть 1)

После продолжительной паузы мы собрались с мыслями и решили подготовить небольшой цикл статей, которые будут полезны как разработчикам, так и обычным нашим клиентам, кому потребуется заказывать больше одной услуги за один раз.

f46c10a096f84562ad985ed82f55ed92.png

Предпосылки к этой публикации появились достаточно давно. Один из клиентов с большим количеством виртуальных серверов поинтересовался о том, есть ли возможность работать с API нашего биллинга. В то время, честно говоря, мы были не готовы к такому диалогу и не смогли предложить готовое решение.
С начала лета мы получили еще несколько подобных вопросов и поняли, что нельзя оставлять их без ответов. И сегодня я расскажу как работать с API биллинга нашей компании для заказа виртуальных серверов любого количества.

В качестве биллинговой системы мы используем продукт российской компании ИСПсистем — BILLmanager4. Для всех продуктов ИСПсистем есть открытое API и оно описано в большей или меньшей степени на их официальном сайте документации ispdoc.com
Работать с API можно как из командной строки, обращаясь непосредственно к интерпретатору mgrctl, так и через адресную строку браузера (или любое другое приложение, которое будет отправлять запрос на веб-сервер: curl, wget и т.п)
Исходя из документации можно составить запрос к любому из продуктов, НО при работе с биллингом требуется некоторое количество информации, которая доступна только со стороны хостинг-провайдера.

Сам запрос для заказа виртуального сервера, к примеру, KVM Ferrum на один месяц с автоматическим помесячным продлением, шаблоном ОС Centos-6.7-x86_64-minimal без использования лицензии ISPmanager, будет выглядеть так:

https://billing.ihor.ru/billmgr?authinfo=:&addon_1101=20&addon_1103=1&addon_1104=1&addon_1110=1&addon_1791=4&enum_1112=21&enum_1106=25&agree=on&domain=test-for.habr&ostempl= Centos-6.7-x86_64-minimal&period=1210&price=1100&autoprolong=1210&payfrom=neworder&func=vds.order.7&sok=ok

Теперь попробуем расшифровать все это нагромождение переменных и цифр.
Сам запрос можно разделить условно на две части: это URL биллинга и передаваемые параметры запроса биллингу.
Сами параметры можно распределить следующим образом:

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


  • Авторизация — authinfo

В качестве данных авторизации указывается логин и пароль пользователя, зарегистрированного в биллинге.
  • Тарифный план — price

Каждому тарифному плану соответствует свой идентфикатор в биллинге, берется из таблицы «Тарифные планы».
  • Параметры тарифного плана — addon_

К параметрами тарифного плана относятся параметры виртуального сервера, его ресурсы. Каждый параметр тарифного плана имеет свой идентификатор и свое значение по умолчанию, которое соответствует размеру диска, количеству ядер процессора и оперативной памяти, а так же IPv6- и IPv4-адресам.
  • Дополнительные услуги — enum_

В дополнительные услуги входят DNS-серверы и использование лицензии ISPmananger.

5b3febc07cb64d708d06ee41075ca6c1.png
(параметры по умолчанию для KVM Ferrum)

  • Период заказа — period
  • Автопродление — autoprolong

Идентификатор периода заказа и автопродления для каждой из услуг абсолютно одинаковы.
  • Доменное имя сервера — domain

Доменное имя должно быть уникальным. Иначе появится ошибка
Ошибка: The domain is already in use. Specify a different domain name.
При массовом добавлении виртуальных серверов, рекомендую использовать формат +<порядковый номер>.
  • Шаблон ОС — ostempl

Неполный список шаблонов приведен в этом тексте чуть ниже. Обращаю внимание, что при заказе шаблона ОС без ISPmanager, в установке значения дополнительных услуг следует отключить использование панели управления ISPmanager (для всех тарифных планов этот идентификатор одинаков — 25)
  • Параметры оплаты — payfrom

В примере я привел значение параметра оплаты — neworder, что соответствует отдельному заказу с оплатой для каждого сервера. payfrom=neworder.
  • Оплата заказа — func

Так как весь заказ виртуального сервера состоит из 7 шагов, то в API, что не особо очевидно на первый взгляд, следует указывать не только саму функцию vds.order, но и номер последнего шага — 7. Таким образом полное значение этого пункта выглядит так: func=vds.order.7
  • Подтверждение пользовательского соглашения — agree

При заказе любой из услуг мы предлагаем ознакомиться с пользовательским соглашением и принять его (тогда заказ уходит на активацию) или не принять его (тогда заказ отменяется). В API этот пункт так же обязателен: agree=on.

Часть параметров фиксирована и я привел их значения при описании, а значения других можно взять из таблицы, которая целиком приведена на странице сайта со справочной информацией по работе с хостингом.

Чтобы не загромождать текст большими таблицами со всеми тарифными планами, я приведу только ту часть, которая поможет разобраться, как была составлена строка для заказа виртуального сервера с тарифным планом KVM Ferrum. А так же два других младших тарифных плана SSD и OVZ

Тарифные планы


price period / autoprolong
Тариф ID 1 мес. 3 мес. 6 мес. 1 год
KVM Ferrum 1100 1210 1213 1214 1211
SSD Ferrum 1033 1180 1183 1184 1181
OVZ Ferrum 2061 1758 1761 1762 1759

Параметры тарифного плана


addon_ enum_
Тариф / Значение Диск ОЗУ CPU IPv4 IPv6 NS ISPmgr
KVM Ferrum 1101
/ 20
1103
/ 1
1104
/ 1
1110
/ 1
1791
/ 4
1112
/ 21
1106
/ (1/25)
SSD Ferrum 1034
/ 20
1037
/ 1
1043
/ 1
1036
/ 1
1404
/ 4
1045
/ 21
1039
/ (1/25)
OVZ Ferrum 2062
/ 20
2065
/ 1
2071
/ 1
2064
/ 1
2074
/ 4
2073
/ 21
2067
/ (1/25)

Список шаблонов


  • FreeBSD-11-amd64-minimal
  • Centos-6.7-x86_64-minimal
  • Debian-7-x86_64-minimal
  • Debian-8-x86_64-ispconfig
  • Ubuntu-16.04-x86_64-minimal
  • CentOS-7-x86_64-ispmgr5

Если запрос составлен корректно и заявка на активацию новой услуги принята, Вы получите в ответ что-то типа этого:

Ниже в качестве бонуса прикладываю несколько скриптов для заказа произвольного количества виртуальных серверов для консоли Linux и Windows.
Если в комментариях будет проявлен интерес к развитию темы работы с API нашего биллинга, мы постараемся описать ее более подробно, с использованием различных языков программирования и программных продуктов для интеграции.

Пример на BASH

#/bin/bash
#
# Данные для авторизации
USER=user
PASS=password

# Заказать 10 виртуальных серверов
for i in {1..10}
do
/usr/bin/curl https://billing.ihor.ru/billmgr?authinfo=$USER:$PASS&addon_1101=20&addon_1103=1&addon_1104=1&addon_1110=1&addon_1791=4&enum_1112=21&enum_1106=25&agree=on&domain=$USER-$i.ru&ostempl= Centos-6.7-x86_64-minimal&period=1210&price=1100&autoprolong=1210&payfrom=neworder&func=vds.order.7&sok=ok"
done

К сожалению, не удалось придумать никакого приличного варианта, кроме как продублировать предыдущий цикл с использованием curl, собранного для работы в Windows. Но если из числа читателей есть искушенные в скриптописательстве/программировании под Windows, то прошу поделиться более рациональными сценариями в комментариях.

Пример на PowerShell, файл curl.exe должен находиться в той же директории, откуда выполняется скрипт

USER=user
PASS=password

for ($i=1; $i -lt 10; $i++) {
.\curl.exe https://billing.ihor.ru/billmgr?authinfo=$USER:$PASS&addon_1101=20&addon_1103=1&addon_1104=1&addon_1110=1&addon_1791=4&enum_1112=21&enum_1106=25&agree=on&domain=$USER-$i.ru&ostempl= Centos-6.7-x86_64-minimal&period=1210&price=1100&autoprolong=1210&payfrom=neworder&func=vds.order.7&sok=ok"
}

Комментарии (12)

  • 15 июля 2016 в 12:23 (комментарий был изменён)

    +1

    fr_master ('startpage=vds', 'top.');

    И это вы называете API???
    • 15 июля 2016 в 12:25

      0

      Стоп-стоп =) Все вопросы о том, что и как называется, пожалуйста, отправляйте компании-разработчику.
      • 15 июля 2016 в 12:38

        0

        адъ какой-то…
        , а что, нет альтернативы ISP?
        искренне интересуюсь, потому что не знаю
        • 15 июля 2016 в 12:42

          0

          На текущий момент альтернативы нет. По крайней мере такой, на мой взгляд, которая перекроет затраты на переход и интеграцию со всей инфраструктурой. Видимо, Вы не читали наши прошлые публикации и комментарии к ним. Упоминалось, что мы планируем и работаем в направлении по созданию собственного ПО.
          • 15 июля 2016 в 12:59

            0

            Печально.
            Я бы очень хотел открыть реселлинг (есть немалая и благодарная аудитория, которая будет пользоваться), но связываться с ISP — стрёмно.
            • 15 июля 2016 в 13:29

              0

              Я бы не стал реселить ihor)) Потом перед клиентами оправдываться придется.
              Качество хостинга к сожалению так себе. Сбежал после 3 месяцев.
              • 15 июля 2016 в 13:36

                0

                Да не про него, собственно речь. Куда ни ткнись — везде ISP предлагают.
                • 15 июля 2016 в 13:44

                  0

                  У ISP сейчас есть проблема с безопасностью в 4 версии панели. Насколько я понимаю, для одной достаточно критичной уязвимости нет официального патча, хотя в 5 версии панели этой уязвимости уже нет. И хостеры с ISP 4 либо пытаются сами что-то сделать с этим, либо просто игнорируют проблему. Так что спорно, нужна ли такая панель.
                • 15 июля 2016 в 13:44

                  0

                  Не везде) Мне импонирует netangels.ru — панель своя, хостинг весьма фунционален)
                • 15 июля 2016 в 15:58

                  0

                  ИСПсистем смогли предложить набор программного обеспечения, благодаря которому можно развернуть хостинг без большого углубления в кодинг, за сравнительно небольшие деньги, и русскоязычную поддержку.
  • 15 июля 2016 в 15:28

    0

    Если не секрет, то почему сбежали от ihor?
    • 15 июля 2016 в 15:57

      0

      могу предположить, что gibson_dev попал по времени на нашу череду неприятностьей с ддос-атаками на хостинг и метаниями между компаниями, которые предлагают защиту. пока мы не запустили окончательно в работу свое решение. Но об этом я расскажу в отдельной публикации.

© Habrahabr.ru