Corporate LBS API description v.0.2. 20/01/2016 Page 1 of 5 1. Описание протокола для доступа к интерфейсу «Корпоративный LBS» Доступ к сервису LBS (Location Based Service) осуществляется через платформу CPA (Content Provider Access). Общая схема взаимодействия показана на рис.1. 1 3 2 4 5 Client 6 CPA LBS Рис.1 При доступе к сервису используется асинхронный механизм, протокол XML, транспортный уровень HTTP или HTTPS. Клиентское приложение посылает запрос на позиционирование (1). Сервис в ответ возвращает статус подтверждения запроса Accepted (2). Это означает, что запрос принят и поставлен в очередь на обработку. После обработки запроса (3, 4) результат передается на клиентское приложение (5). В качестве подтверждения обработки результата, необходимо вернуть статус подтверждения принятия (6). Интерфейс представляет из себя Web-ссылку http://193.41.60.77:8080/lbsapi/CorpLbs, которая принимает POST-запрос. Параметром запроса является также URL, для возвращения результата. Для авторизации пользователя используется basic авторизация, также проверяется разрешения доступа с клиентского IP-адреса. 1.1. Формат запроса на позиционирование <message mid="MID" action="ACTION" callBackUrl="URL"> <MSISDN>MSISDN</MSISDN> <body content-type="text/plain"></body> </message> Где, MID – уникальный идентификатор клиентского запроса; URL – ссылка, на которую должен быть возвращен результат; MSISDN – номер, который необходимо позиционировать, в случае action=locate; ACTION – имя действия. Доступны следующие действия: locate - позиционирование SIM-карты; change-passwd - смена пароля, при этом автоматически будет сгенерирован новый пароль и отослан на тарификационный номер посредством SMS; check-url - проверка обратной связи. При таком значении во время приема запроса будет произведено тестовое соединение с сервером Corporate LBS API description v.0.2. 20/01/2016 Page 2 of 5 партнера по указанному URL. При успешном соединении, будет послано тестовое сообщение, в ответ на которое платформа ожидает получить подтверждение успешного приема сообщения (п.1.2). При неуспешном тестовом запросе будет возвращена соответствующая ошибка в ответном статусе. 1.2. Формат подтверждения принятия запроса/результата <report> <status error=”error” errorCode=”errorCode”>status</status> </report> Где, status – статус, может быть: Accepted – запрос принят успешно; Rejected – запрос не принят; errorCode – код ошибки, если такая возникла. error – описание ошибки, если такая возникла. 1.3. Формат передачи результата <message rid=”RID” mid=”MID”> <service>message-status</service> <status dateIso8601="yyyy-mm-ddThh24:mi:ss+ZONE" date=” Day, dd Mon yyyy hh24:mi:ss TZR” source=”errorSource” errorCode=”errorCode” error=”error”>status</status> <data><![CDATA[RESPONSE]]></data> </message> Где, status - статус обработки запроса. Successful – успешно; Unsuccessful - неуспешно. errorCode – код ошибки, если такая возникла; error – описание ошибки, если такая возникла; errorSource – источник ошибки, может быть CPA (ошибка на нашей платформе) или LBS (ошибка на сервисе позиционирования); RESPONSE – ответ от платформы LBS. 2. Формат ответа с данными Ответ с координатами платформа CPA передает в том виде, в котором их получает от системы LBS. <PD> <TIME UTC_OFF='+0300'>20100705122103</TIME> <LEV_CONF>80</LEV_CONF> <SHAPE> <CIRCULARARCAREA SRSNAME='www.epsg.org#4326'> <STOPANGLE>360</STOPANGLE> <COORD> <Y>030 25 32E</Y> <X>50 27 33N</X> </COORD> Corporate LBS API description v.0.2. 20/01/2016 Page 3 of 5 <OUTRADIUS>442</OUTRADIUS> <STARTANGLE>0</STARTANGLE> <INRADIUS>0</INRADIUS> </CIRCULARARCAREA> </SHAPE> </PD> TIME – время позиционирования. Тег SHAPE – содержит в себе описание фигуры покрытия. CIRCULARARCAREA – это одна из возможных фигур позиционирования, на практике я встречал только такую фигуру. Это сектор в круге или круг как частный случай. COORD – координаты центра круга. OUTRADIUS – внешний радиус, в метрах. INRADIUS - внутренний радиус, в метрах. STARTANGLE – начальный угол сектора. STOPANGLE – конечный угол сектора. 3. Пример работы с системой. 3.1. Запрос: POST /lbsapi/CorpLbs HTTP/1.0 Content-Length: 157 Authorization: Basic dGVzdDE6dHR0 <message mid="870" action="locate" callBackUrl="http://10.44.71.152:8082/"> <MSISDN>380675485516</MSISDN> <body content-type="text/plain"></body></message> 3.2. Успешное подтверждение запроса: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200602151717)/Tomcat-5.5 Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 96 Date: Mon, 05 Jul 2010 09:04:27 GMT Connection: close <?xml version="1.0" encoding="UTF-8"?> <report> Corporate LBS API description v.0.2. 20/01/2016 Page 4 of 5 <status errorCode="0">Accepted</status> </report> 3.3. Запрос не принят: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200602151717)/Tomcat-5.5 Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 122 Date: Mon, 05 Jul 2010 09:18:36 GMT Connection: close <?xml version="1.0" encoding="UTF-8"?> <report><status error="Number not allowed" errorCode="4">Rejected</status></report> 3.4. Успешный результат выполнения запроса: POST / HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0-rc3 Host: 127.0.0.1:8082 Content-Length: 603 Content-Type: text/xml; charset=UTF-8 <?xml version='1.0' encoding="UTF-8"?> <message nodeId="0" mid="870" rid = "0"> <service>message-status</service> <status dateIso8601="2010-07-05T12:21:03+02" date="Mon, 05 Jul 2010 09:21:03 GMT" >Successful</status> <data> <![CDATA[ <PD> <TIME UTC_OFF='+0300'>20100705122103</TIME> <LEV_CONF>80</LEV_CONF> <SHAPE> <CIRCULARARCAREA SRSNAME='www.epsg.org#4326'> <STOPANGLE>360</STOPANGLE> <COORD> <Y>030 25 32E</Y> <X>50 27 33N</X> </COORD> <OUTRADIUS>442</OUTRADIUS> <STARTANGLE>0</STARTANGLE> <INRADIUS>0</INRADIUS> </CIRCULARARCAREA> </SHAPE> </PD>]]> </data> </message> 3.5. Неуспешный результат выполнения запроса: POST / HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0-rc3 Host: 127.0.0.1:8082 Content-Length: 282 Content-Type: text/xml; charset=UTF-8 <?xml version='1.0' encoding="UTF-8"?> <message nodeId="0" mid="870" rid = "0"> <service>message-status</service> <status dateIso8601="2010-07-05T12:07:52+02" date="Mon, 05 Jul 2010 09:07:52 GMT" source="LBS" errorCode="5" error="ABSENT SUBSCRIBER">Unsuccessful</status> </message> Corporate LBS API description v.0.2. 20/01/2016 Page 5 of 5 4. Коды ошибок при приеме запроса Текст ошибки предназначен исключительно для анализа администратором, а не программным обеспечением. Код 1 2 3 4 5 6 Формат текста ошибки Bad state: [STATE] Bad callBackUrl Service not allowed Number not allowed Bad action Error while connecting callBack Url … 7 8 Bad callBack answer. Url: … [MSISDN] exists in queue 100 Описание Недопустимое состояние профиля Неверный формат атрибута callBackUrl Базовая услуга отключена. Обычно при низком балансе на счету. Запрашиваемый номер не принадлежит корпорации Недопустимое значение атрибута action Ошибка в процессе тестирования обратного вызова указанного URL Неверный ответ в результате обратного вызова указанного URL Запрос с запрашиваемым номером еще обрабатывается Внутренняя ошибка системы.