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



Предпосылки к этой публикации появились достаточно давно. Один из клиентов с большим количеством виртуальных серверов поинтересовался о том, есть ли возможность работать с 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=<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=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.


(параметры по умолчанию для 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

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

<script language='JavaScript'>fr_master('startpage=vds', 'top.');</script>


Ниже в качестве бонуса прикладываю несколько скриптов для заказа произвольного количества виртуальных серверов для консоли 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"
}
Поделиться с друзьями
-->

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


  1. AlexLeonov
    15.07.2016 12:23
    +2

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

    И это вы называете API???


    1. vadim_s_sabinich
      15.07.2016 12:25

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


      1. AlexLeonov
        15.07.2016 12:38

        адъ какой-то…
        а что, нет альтернативы ISP?
        искренне интересуюсь, потому что не знаю


        1. vadim_s_sabinich
          15.07.2016 12:42

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


          1. AlexLeonov
            15.07.2016 12:59

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


            1. gibson_dev
              15.07.2016 13:29
              -1

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


              1. AlexLeonov
                15.07.2016 13:36
                +1

                Да не про него, собственно речь. Куда ни ткнись — везде ISP предлагают.


                1. pyrk2142
                  15.07.2016 13:44

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


                1. gibson_dev
                  15.07.2016 13:44
                  -2

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


                1. vadim_s_sabinich
                  15.07.2016 15:58

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


              1. Newbilius
                15.07.2016 17:38

                Я тоже помню довольно заметную нестабильность, из-за которой ушел. Но было то года два-три назад. А вы недавно проверяли?


                1. gibson_dev
                  15.07.2016 19:23
                  +1

                  С полгода назад, остальное https://habrahabr.ru/company/marosnet/blog/305716/#comment_9703324


                  1. Newbilius
                    15.07.2016 21:51

                    Т.е. за 2-3 года ничего не изменилось? Эх.


              1. 1win1
                16.07.2016 10:07

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


                1. Van_Loon
                  16.07.2016 20:13
                  +1

                  Иногда, происходит зависание мастер-ноды, скорее всего Вы попали на одно из таких событий. В случае зависания, задача дежурной службы произвести в перезагрузку сервера в кротчайшие сроки, чтобы снизить время даунтайма клиентских VDS, размещенных на данном сервере. Сразу после восстановления работы производится рассылка по всем клиентам размещенным на данном сервере, чтобы клиенты могли проверить корректность запуска всех служб внутри своих VDS.
                  Естественно, что зависание сервера — это не запланированные тех. работы, о которых мы всегда уведомляем заранее. Тем не менее, мы стараемся уведомлять клиентов и о таких событиях.
                  По статистике, из уже более чем 500 рабочих серверов, в месяц виснут не более 1-2 машин. Причины бывают различные, баги в ПО или глюки железа, по каждому случаю админы проводят расследование во избежание повторения проблемы.
                  Раньше процент зависаний был значительно выше. Сейчас, нам удалось свести это значение почти к естественному минимуму.
                  Мы не стоим на месте и постоянно проводим оптимизацию нашей инфраструктуры для улучшения качества услуг.


        1. foxmuldercp
          18.07.2016 21:22

          Альтернативы то есть, Плеск или цпанель, но это чисто хостинг, с вдс/впс там так себе.
          Я вот свое решение пишу, на RoR. кластерный контроль хостинга приложений (да, да, docker) + регистрация доменов/прочие услуги хостинга вроде днс или почты, + биллинг.


  1. bot1no4ek
    15.07.2016 15:28
    +1

    Если не секрет, то почему сбежали от ihor?


    1. vadim_s_sabinich
      15.07.2016 15:57
      +2

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


      1. gibson_dev
        15.07.2016 19:24
        +1

        Но при этом ТП отмалчивается и ты как дурак тупо теряешь клиентов.


    1. gibson_dev
      15.07.2016 19:22
      +5

      Когда сайт не доступен по 12+ часов а ТП тупо говорит что ничего не видели и все хорошо — как то настораживает
      Да и скорость хостинга так себе, страница могла и секунд по 10 только отрабатываться, при том что там нет тяжелой работы, почти статика и причем часто.


      1. Van_Loon
        16.07.2016 20:17

        Можете привести номера тикетов по данной проблеме?


        1. gibson_dev
          16.07.2016 20:26
          +1

          Если вы представитель компании то можете наверное и сами посмотреть, логин почти такой же, они все в архиве — тема одинаковая


          1. Van_Loon
            18.07.2016 17:30

            Если я правильно идентифицировал Ваш аккаунт (у нас 5 пользователей у которых есть «gibson» в имени логина), то:
            1. У Вас была услуга хостинга — а в этой статье мы говорим про ресселинг VDS.
            2. Проблема была на одном из хостинговых серверов и уже давно решена. Все тикеты с проблемами еще прошлогодние.


            1. gibson_dev
              18.07.2016 17:37

              Мне от того что он сейчас поправлен — никакого прока. То что он не работал (мог и по 12 часов к ряду) — это проблема и мне никто не мог мог объяснить или отреагировать вовремя. В лучшем случае я постфактум получал сообщение что все уже работает ну или типа «у нас все хорошо идите в попу» — это как минимум характеризует уровень поддержки а она у вас одна.


              1. Van_Loon
                18.07.2016 18:08

                Поддержка тоже меняется. Штат расширяется, ужесточаются регламенты работы. Жалоб на долгий ответ сейчас практически нету.
                На счет 12 часов недоступности — не нашел такого в Ваших тикетах. Только упоминание о периодической недоступности.
                Проблема была не явная, по этому потребовалось некоторое время на то, чтобы ее отловить.


                1. gibson_dev
                  18.07.2016 18:14
                  +1

                  В общем вы мне еще пытаетесь доказать что я не прав, а вы красавцы? Да ради бога, работайте как хотите только не со мной и моими клиентами, свое мнение я составил и озвучил его выше.


                  1. Van_Loon
                    18.07.2016 20:19

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


                    1. Sleuthhound
                      22.07.2016 07:40

                      Проблема даунтайма есть у всех крупных и не очень хостеров в России, я про выделенные сервера и VDS, на вскидку — eServer, Миран, АйХор, Селектел и прочие, и при этом они говорят что дата-центр сертифицирован по TIER III или даже IV где даунтайм в год не должен превышать 26 минут (у TIER IV — доступность 99.995%) — то такого не может обеспечить НИКТО в России — и это ФАКТ!


                      1. Van_Loon
                        22.07.2016 16:59

                        Доступность самого ЦОД и доступность отдельно взятой услуги несколько разные вещи.
                        Доступность ЦОД, по сути, складывается из непрерывного наличия электроэнергии, холода и передачи интернет-трафика (и то, некоторые ДЦ не занимаются сами телекоммуникациями и отдают это на сторонних операторов связи, с которыми клиент дата-центра договаривается самостоятельно).
                        В случае с gibson_dev, имела место быть программная проблема на отдельно взятом хостинговом сервере, при том, что сам сервер был доступен, как и большинство сайтов на нем. Так что данная проблема не имеет ни какого отношения к уровням TIER самого ДЦ.
                        Например, за прошедший год с начала ввода в эксплуатацию нашего нового ДЦ, его аптайм по холоду и электричеству составил 100%, при том, что было 2 случая отсутствия электропитания по основному электровводу из города…


                        1. Sleuthhound
                          22.07.2016 20:55

                          А я как раз говорю о падении каналов связи и отключении электропитания, именно эти проблемы и случались.
                          Или доступность ЦОД по каналам связи ограничивается центральным коммутатором ЦОД, а все что падает за ним, вплоть до линка до конечного сервера — это не считается? Или отключение питания стойки с серверами тоже не считается как недоступность ЦОД?


                          1. Van_Loon
                            23.07.2016 00:50

                            Я не очень в курсе проблем с электропитанием у тех коллег, которых Вы перечислили, могу только сказать за себя, за год работы ни одна стойка в нашем ДЦ не была обесточена во время работы.
                            Также, ни одно сетевое устройство не выходило из строя.
                            Единственная проблема с доступностью нового ДЦ была связана с обывом оптики, это было в июле прошлого года, тогда мы еще не успели достроить резерв, он был запущен только к концу августа. На считая первого обрыва, в течение этого года было еще 2, по одному на каждом кабеле, обе аварии прошли незаметно для пользователей.
                            Были еще проблемы общего характера связанные с DDoS-атаками и мы как раз активно занимаемся решением этой проблемой и последние пару месяцев мощные ддосы уже не беспокоили наших клиентов.
                            Но насколько я знаю, надежность по TIER не учитывает недоступность ресурсов ДЦ из-за сетевых атак. Оценивается только надежность физической инфраструктуры.


    1. l0ser140
      15.07.2016 21:35
      +2

      Ежедневно в московский прайм-тайм сервер становился недоступен.


      1. Van_Loon
        16.07.2016 20:17

        Можете как-то идентифицировать проблему, чтобы я мог посмотреть подробности? Номера тикетов или код услуги.


        1. l0ser140
          16.07.2016 20:26
          +1

          Так-то я не пользуюсь уже вашими услугами, как раз из-за ежедневных проблем со связностью, так что уже не актуально.
          А тикет можете посмотреть — 712472, специалист техподдержки предложил перенести сервер на другую ноду, от проблем со связностью это ясное дело не помогло.


          1. Van_Loon
            18.07.2016 17:37

            По тикету 712472, проблема была в серии мощных DDoS-атак в начале этого года. С тех пор утекло много воды и стабильность нашей сети стала гораздо выше.


  1. zenn
    15.07.2016 22:24
    -1

    Технически статья не выдерживает никакой критики. Такое чувство, что автор статьи сам ни разу не читал документацию isp:

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

    script language='JavaScript'fr_master('startpage=vds', 'top.');/script

    Почему бы не открыть тот самый док, ссылку на который вы дали и не найти следующее:
    Формат вывода результатов выполнения функций

    Все панели управления предоставляют возможность получения результата выполнения своих функций в формате XML, текстовом формате и в формате JSON. Чтобы указать, в каком формате вы желаете получить данные, необходимо указать параметр out=имя_формата.

    Возможные значения параметра out:

    xml — данные будут возвращены в формате XML,
    devel — тоже самое, что XML, но в документе будут присутствовать, данные описывающие интерфейс пользователя (полезно для отладки своих плагинов),
    text — данные в текстовом формате
    json — данные в формате JSON. http://ru.wikipedia.org/wiki/JSON

    Если параметр out отсутствует, то считается, что данные предназначены для браузера и они преобразуются в html.

    Сама статья это скорей «полет мыслей». Эта документация по использованию api (а точней, частные случаи его использования со всеми необходимыми id-шниками) должна быть на вашем сайте. Здесь, вы к сожалению только учите людей делать так, как НЕ нужно.


    1. vadim_s_sabinich
      16.07.2016 02:54
      +1

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


  1. IPv4
    16.07.2016 10:07
    -2

    Но ведь это просто описание API продуктов ISPsystems, а конкретно — BILLmanager.
    При чем тут хостинг не совсем понятно, если честно.


    1. vadim_s_sabinich
      16.07.2016 12:25
      +1

      компания называется ИСПсистем, ранее называлась ISPsystem. Хостинг тут при том, что указано КАК заказать виртуальный сервер с конкретным тарифным планом в нашей компании через API BILLmanager.


      1. IPv4
        16.07.2016 12:35
        -1

        Хорошо, а как отличается заказ сервера через API BILLmanager'a в другой компании?


        1. vadim_s_sabinich
          16.07.2016 12:56
          +1

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


  1. el777
    18.07.2016 14:25

    OFFTOP:
    Я, наверное, слишком испорченный, но когда слышу ваше название, то сначала хочется записать как iWhore, потом понимаешь, что это iHor и тревога ложная :)
    Среди Вашей ЦА — ИТшников немало народу знающих английский, вас могут неправильно понять (
    /OFFTOP.


  1. haos
    21.07.2016 21:05
    +1

    Вы еще не сталкивались с жадностью данной конторы и твердолобостью саппорта)


    1. pyrk2142
      22.07.2016 08:29

      Надо признать, саппорт у них шикарный. Мои письма в поддержку стали просто игнорировать.


      1. Van_Loon
        22.07.2016 17:01

        Можете написать мне в личку, с какого ящика и на какой писали и когда это примерно было?


    1. Van_Loon
      22.07.2016 17:00

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


      1. haos
        22.07.2016 17:20

        А про саппорт вам как бы не интересно? =) Хотя да вы же и так все знаете =)


        1. Van_Loon
          23.07.2016 00:55

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