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

в 9:17, , рубрики: api, bash, billmanager, ISPsystem, powershell, vps, vps хостинг, айхор, биллинговые системы, Блог компании Айхор Хостинг, Программирование

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

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

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

Открытие API для работы с услугами от российского лоукост-хостера (часть 1) - 2
(параметры по умолчанию для 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"
}

Автор: Айхор Хостинг

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js