Відкриття API для роботи з послугами від російського лоукост-хостера (частина 1)

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



Передумови до цієї публікації з'явилися досить давно. Один з клієнтів з великою кількістю віртуальних серверів поцікавився про те, чи є можливість працювати з API нашого білінгу. В той час, чесно кажучи, ми були не готові до такого діалогу і не змогли запропонувати готове рішення.
З початку літа ми отримали ще кілька подібних питань і зрозуміли, що не можна залишати їх без відповідей. І сьогодні я розповім як працювати з API білінгу нашої компанії для замовлення віртуальних серверів будь-якої кількості.


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

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

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.ua&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"
}

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.