Якорь | ||||
---|---|---|---|---|
|
Из структуры биллинга можно определить два способа взаимодействия с ним извне:
...
К серверу биллинга возможно обращаться из сторонних приложений посредством HTTP запросов. Пример запросов можно изучить вызывая различные действия в клиентском приложении, запущенном в через client_debug.bat (.sh). Запросы и ответы распечатываются в log файл. Биллинг поддерживает несколько вариантов протоколов обращений для различных действий, их можно определить по внешнему виду запросов.
HTTP
...
Action
Более ранний протокол. Подразумевает передачу параметров в HTTP запросе с получением XML ответа. Примерный вид запроса и ответа в логе клиента:
...
Дополнительно необходимо добавить в запрос параметры user и pswd с логином и паролем пользователя биллинга, от лица которого отправляется запрос. Рекомендуется добавить к запросу параметр authToSession=0, это предотвратит создание HTTP сессий, уменьшит потребление памяти на сервере.
...
URL запроса определяет Web-сервис, JSON запрос передаётся в теле запроса, кодировка UTF-8. Обязательные параметры:
- method - вызываемая функция сервиса;
- user - объект с логином и паролем пользователя, от лица которого выполняется действие;
- params - объект со всем остальными параметрами сервиса.
...
Блок кода | ||||
---|---|---|---|---|
| ||||
{"status":"ok","message":"", "data": { "page":{"pageSize":2,"pageIndex":2,"pageCount":49,"recordCount":97,"pageFirstRecordNumber":2}, "return": [{"id":353023,"title":"0022010","groups":0,"password":"bg2rFZ2PEX","dateFrom":"2010-01-02","dateTo":null,"balanceMode":0,"paramGroupId":14,"personType":0,"comment":"","hidden":false,"superCid":0,"dependSubList":"","status":0,"statusTimeChange":"2010-01-13","titlePatternId":0,"balanceSubMode":0,"sub":false,"independSub":false,"balanceLimit":0.00,"super":false,"dependSub":false}, {"id":353209,"title":"06-10-10/И-Г/0","groups":0,"password":"9351220759","dateFrom":"2010-10-06","dateTo":null,"balanceMode":1,"paramGroupId":14,"personType":0,"comment":"","hidden":false,"superCid":0,"dependSubList":"","status":0,"statusTimeChange":"2010-10-06","titlePatternId":0,"balanceSubMode":0,"sub":false,"independSub":false,"balanceLimit":0.00,"super":false,"dependSub":false}]}} |
В status возвращается ok в случае корректного ответа, либо error - ошибка. При этом в message выводится текст ошибки.
Там выглядит сообщение об ошибке:
...
В случае корректного ответа в data возвращаются результаты выполнения. Возвращаемый методом параметр под ключом return.
Также возможен возврат результатов из параметров сервиса посредством объекта типа javax.xml.ws.Holder.
Для работы с сервисом необходимо найти его класс в JavaDoc, например: ContractService. Далее определить имена и типы передаваемых параметров, переходя к JavaDoc описаниям других классов, если понадобится.
Примечание | ||
---|---|---|
| ||
Javadoc является первичным при определении имени параметров. Например Если в InetServ есть метод getPassword(), значит нужно использовать password как имя атрибута в JSON. Если смотреть лог работы клиента, там передается другой атрибут passw, в данном случае javadoc является первичным. |
Некоторую сложность представляет передача параметров, в роли которых могут выступать классы-потомки указанного в JavaDoc класса. Для примера рассмотрим параметр entityFilter указанного ранее сервиса, метод contractList. В качестве параметров передаются наследники объекта FilterEntityAttr. В JavaDoc данного класса находим:
...
Данные строки означают, что объекты маркируются дополнительным полем type, в зависимости от которого определяется класс переданного объекта. Вот так, например, выглядит запрос фильтрации договоров по текстовому параметру:
...