В статье рассказывается о методах вызова функций панелей управления с помощью API. Перед тем как вызвать какую-либо функцию, необходимо пройти авторизацию.
Управление авторизацией
Авторизация обязательна перед вызовом функций платформы.
Вы можете авторизоваться одним из методов:
- сессионная авторизация;
- авторизация с использованием функции authinfo;
- сквозная авторизация по ключу.
Методы авторизации
Сессионная авторизация
Используйте метод:
- для скриптов, которые выполняют несколько запросов к платформе;
- для обращения к платформе через браузер.
- Отправьте GET-запрос: Общий вид запроса:
https://IP-адрес:1500/billmgr?out=xml&func=auth&username=имя_пользователя&password=парольПодробнее - Получите XML-ответ: Общий вид ответа:
<doc> <auth id="номер сессии" level="уровень доступа">номер сессии</auth> ... </doc> - Используйте полученный идентификатор в последующих запросах: Общий вид запроса:
https://IP-адрес:1500/billmgr?auth=номер_сессии&out=xml&func=функция&параметр1=значение&параметр2=значение...
Сессия действует один час с момента последнего запроса. Если в течение часа не было запросов, авторизация становится недействительной — пройдите авторизацию повторно.
Авторизация с использованием функции authinfo
Используйте метод:
- для разовых запросов к платформе;
- при удалённом доступе к платформе без необходимости поддержания сессии.
Отправьте GET-запрос:
https://IP-адрес:1500/billmgr?authinfo=admin1:mypasswd&out=xml&func=функция&параметр1=значение&параметр2=значение...Особенности метода:
- метод авторизации является разовым — передавайте параметр
authinfoв каждом запросе к платформе. Сессия не создаётся и не поддерживается; - авторизацию через
authinfoможно ограничить определёнными IP-адресами и сетями. Для этого настройте "белый список" доверенных сетей:- через параметры
RestrictAuthinfoRangeиOption RestrictAuthinfoконфигурационного файла; - через настройки авторизации.
- через параметры
Сквозная авторизация по ключу
Используйте метод, когда необходимо обеспечить вход в панель управления при помощи только логина и пароля администратора.
Если клиент идентифицирован внешним скриптом, например, билинговой платформой, и его нужно перенаправить в BILLmanager, минуя шаг авторизации:
-
Сгенерируйте секретный ключ. Длина ключа должна быть не менее 16 символов:
Команда для генерации секретного ключаpwgen -s 16 1Пример полученного ключа:
1234567890qwertyuiop -
Выполните запрос:
Общий вид запроса:https://IP-адрес:1500/billmgr?out=xml&authinfo=root:secret&func=session.newkey&username=alex&key=1234567890qwertyuiopПодробнее - Получите ответ. Если ответ
ok, операция успешна. В случае ошибки проверьте права администратора и корректность параметров. - Если ответ
ok, перенаправьте пользователя на авторизацию по ключу:
Общий вид запроса:https://IP-адрес:1500/billmgr?func=auth&username=alex&key=1234567890qwertyuiop&checkcookie=noПодробнее
После перехода по URL пользователь будет автоматически авторизован в платформе, а использованный ключ удалён.
Ключ является одноразовым. Установить ключ можно с любого IP-адреса. При использовании метода для пользователя действуют ограничения на вход по IP-адресу. Авторизоваться с неразрешенного IP, используя ключ, нельзя.
Формат запросов и результатов
Формат запросов к API BILLmanager
Для отправки API-запросов к BILLmanager используйте HTTP-методы GET и POST.
Запрос состоит из следующих частей:
- функция — имя функции, которое необходимо передать в параметре
funcзапроса. Например,pricelist,auth,session.delete; - параметры — список параметров в формате
параметр=значение. Например,elid=12345.
https://IP-адрес:1500/billmgr?func=имя_функции&параметр1=значение1&параметр2=значение2...В зависимости от типа функции существует несколько видов результата:
- список элементов (таблица);
- список параметров объекта (форма);
- успешное выполнение операции (действие);
- сообщение об ошибке.
Формат вывода результатов
Вы можете получить вывод функции в формате XML, текстовом формате и в формате JSON. Чтобы задать формат получения результатов, укажите в запросе параметр out=имя_формата.
Поддерживаемые значения параметра out:
Если параметр out не указан, платформа возвращает ответ в формате HTML, предназначенном для отображения в браузере.
Особенности работы
Вызов функций с правами другого пользователя
Чтобы обратиться к функции BILLmanager от имени другого пользователя, добавьте к запросу параметр
su=логин_пользователя.
Права доступа:
- администратор платформы — может вызывать функции с правами любого пользователя платформы;
- клиент с полными правами — может вызывать функции только с правами своих клиентов;
- остальные роли — не имеют права использовать параметр su.
https://IP-адрес:1500/billmgr?auth=токен&func=user.info&su=целевой_пользователь&out=xmlПолучение результатов на на определённом языке
Чтобы получить результат выполнения функции или сообщение об ошибке на определённом языке, добавьте к запросу параметр: lang=код_языка. Например lang=ru или lang=en. Если указан несуществующий или неподдерживаемый код языка, будет использован язык по умолчанию.
Локальные обращения к платформе
Чтобы выполнять API-запросы к платформе локально — из скриптов или shell — рекомендуется использовать утилиту mgrctl. Преимущества mgrctl:
- прямое обращение к ядру платформы — минует веб-сервер, не зависит от его состояния и настроек;
- автоматическая авторизация — запросы выполняются от имени пользователя, запустившего команду. Хранить пароли не требуется. Чтобы выполнить действия от имени другого пользователя используйте параметр
su=логин сотрудника; - встроенная справка — описание всех функций и их параметров, актуальное для используемого сервера.
Подробнее см. в статье Утилита mgrctl.
Примеры получения списка тарифов
В качестве примера рассматривается получение списка тарифов. Остальные функции можно вызывать аналогичным образом. Замените IP-адрес сервера, логин и пароль, указанные в примерах, на реальные данные.
Утилита curl
curl -k -s "https://IP-адрес:1500/billmgr?authinfo=логин:пароль&out=xml&func=pricelist"Утилита mgrctl
/usr/local/mgr5/sbin/mgrctl -m billmgr pricelistЯзык Perl
Для обращения по URL из Perl необходимо установить библиотеку LWP. Для работы с XML-документами требуется библиотека XML::LibXML.
Язык PHP
Язык PHP предоставляет возможность работы с URL как со стандартными файлами. Для обработки XML-документов используется библиотека DOM XML.
Язык Python
Для обращения по URL из Python используется библиотека urllib2. Для работы с XML-документами — библиотека xml.dom.minidom.
Описание формата запросов и результатов
Описание запроса выглядит следующим образом:
- функция: имя функции, которое необходимо передать в параметре func запроса;
- параметры: список параметров с кратким описанием. Если функция не принимает никаких параметров, они не указываются в описании. Параметры передаются в формате параметр=значение;
- результат: бывает несколько видов результата в зависимости от типа запрашиваемой функции. ТНиже описаны доступные варианты.
Список элементов (таблица)
В этом случае XML документ имеет вид:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<elem>параметры элемента в списке</elem>
<elem>параметры элемента в списке</elem>
...
<elem>параметры элемента в списке</elem>
</doc>В качестве результата функции описываются только параметры элемента в списке, которые представляют собой один или несколько XML-узлов с возможными атрибутами и значениями, так как всё остальное идентично для всех видов списков элементов. Пример:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<elem>
<name>foo.org</name>
<admin>foo_admin</admin>
<php/>
<ssi/>
<user used="1" limit="10"/>
<disk used="0" limit="10"/>
<traf used="3542" limit="8192"/>
</elem>
<elem>
<name>example.com</name>
<admin>example</admin>
<cgi/>
<php/>
<ssi/>
<frp/>
<user used="5" limit="50"/>
<disk used="39" limit="50"/>
<traf used="1084" limit="4096"/>
</elem>
</doc>Cписок параметров объекта (форма)
В этом случае XML документ имеет вид:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<elid>уникальный идентификатор объекта</elid>
параметры объекта
</doc>В качестве результата функции описываются только параметры объекта. Параметры объекта представляют собой один или несколько XML-узлов с возможными атрибутами и значениями, описывающие свойства данного объекта. Всё остальное идентично для всех видов списков элементов. Например:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<elid>example.com</elid>
<name>example.com</name>
<gid>1001</gid>
<alias>www.example.com test.example.com</alias>
<cgi/>
<phptype>phpcgi</phptype>
<ssi/>
<frp/>
<sslport>443</sslport>
<alluser>50</alluser>
<shelluser>5</shelluser>
<domain>1</domain>
<base>3</base>
<traf>4096</traf>
<disklimit>50</disklimit>
</doc>Успешное выполнение операции (действие)
Данный результат выдаётся при создании, изменении, удалении, включении или выключении объекта. В этом случае XML документ имеет вид:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<ok/>
</doc>Сообщение об ошибке
Данный результат выдаётся при возникновении ошибки в процессе обработки вашего запроса. В этом случае XML документ имеет вид:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<error type="exists" object="user" lang="ru">
<param name="object" type="msg" msg="Пользователь">user</param>
<param name="value">ben</param>
<stack>
<action level="30" user="jen">admin.edit</action>
</stack>
<group>__object__ со значением '__value__' уже существует</group>
<msg>Пользователь со значением 'ben' уже существует</msg>
</error>
</doc>Список функций и параметров
Каждая панель управления имеет собственный раздел в документации, посвященный описанию ее функций и их параметров (генерируется автоматически), содержащий полный набор функций и параметров, возможно недоступных в конкретной вашей инсталляции.
Наиболее удобный способ получения актуальной информации — это использование утилиты mgrctl с ключом -i.
Для получения полного списка функций ISPmanager можно воспользоваться командой:
/usr/local/mgr5/sbin/mgrctl -m ispmgr -i А для получения описания данных (можно использовать параметр lang для получения информации на нужном языке) вывода списка пользователей командой:
/usr/local/mgr5/sbin/mgrctl -m ispmgr -i user lang=ruКак составить API-запрос по логу
Самый простой способ составить API-запрос — это выполнить нужное действие в интерфейсе панели и посмотреть функцию и параметры в логе. Как это сделать:
-
Откройте лог-файл панели с помощью команды tail:
tail -f /usr/local/mgr5/var/XXXmgr.log | grep RequestПояснения -
Выполните требуемое действие в интерфейсе панели. При этом в открытом лог-файле будет видна выполняемая функция и её параметры: подсвечивается зелёным цветом, начинается с INFO Request. Например, создание доменного имени (DNS) в логе ISPmanager выглядит следующим образом:
Feb 6 08:08:07 [2346:23826] core_module INFO Request [188.120.252.33][root] 'clicked_button=ok&email_inaccess=&func=domain.edit&ip=8.8.8.8&ip_existing=&maildomain=off&name=domain.name&ns=ns1.example.com.%20ns2.example.com.&operafake=1486357687433&owner=www%2Droot&owner_admins=off&progressid=false&reversezone=&sfrom=ajax&sok=ok&web_inaccess=&webdomain=off&zoom-ip=&zoom-ns='На основе полученной в логе функции составим API-запрос. API-запрос всегда имеет формат https://<IP или доменное имя>:<основной порт панели>/<короткое имя панели>?func=<функция>&<параметр 1>=<значение>&<параметр 2>=<значение>...
-
Исключив необязательные параметры из запроса (sfrom, clicked_button, operafake, progressid, параметры равные знаку * и параметры с пустыми значениями), составим API-запрос:
[https://123.123.123.123:443/ispmgr?auth=a4b9816e498e&func=domain.edit&ip=8.8.8.8&maildomain=off&webdomain=off&name=domain.name&ns=ns1.example.com.%20ns2.example.com.&owner=www%2Droot&sok=ok&out=xml|https://123.123.123.123:443/ispmgr?auth=a4b9816e498e&func=domain.edit&ip=8.8.8.8&maildomain=off&webdomain=off&name=domain.name&ns=ns1.example.com.%20ns2.example.com.&owner=www%2Droot&sok=ok&out=xml]