API для сервиса report.alta.ru: различия между версиями
Belousov (обсуждение | вклад) м (→Сервис мониторинг таможенного оформления (REPORT ALTA)) |
Vetoshkin (обсуждение | вклад) (→Объект doc) |
||
(не показано 20 промежуточных версий 3 участников) | |||
Строка 94: | Строка 94: | ||
|regdate[to] || '''string''' || дата регистрации до<br/>только дата || regdate[to]=2019-03-01 | |regdate[to] || '''string''' || дата регистрации до<br/>только дата || regdate[to]=2019-03-01 | ||
|- | |- | ||
− | |vypdate[from] || '''string''' || ДатаВремя выпуска от || vypdate[from]=2019-05-08<br/>vypdate[from]=2021-10- | + | |vypdate[from] || '''string''' || ДатаВремя выпуска от || vypdate[from]=2019-05-08<br/>vypdate[from]=2021-10-10T10:30:00 |
|- | |- | ||
− | |vypdate[to] || '''string''' || ДатаВремя выпуска до || vypdate[to]=2019-05-08<br/>vypdate[to]=2021-10- | + | |vypdate[to] || '''string''' || ДатаВремя выпуска до || vypdate[to]=2019-05-08<br/>vypdate[to]=2021-10-20T10:30:00+03:00 |
|- | |- | ||
− | |lastmsgdate[from] || '''string''' || последнее сообщение ДатаВремя от || lastmsgdate[from]= 2019-05-08<br/>lastmsgdate[from]=2021-10- | + | |lastmsgdate[from] || '''string''' || последнее сообщение ДатаВремя от || lastmsgdate[from]= 2019-05-08<br/>lastmsgdate[from]=2021-10-10T10:30:00 |
|- | |- | ||
− | |lastmsgdate[to] || '''string''' || последнее сообщение ДатаВремя до || lastmsgdate[to]=2019-03-01<br/>lastmsgdate[to]=2021-10- | + | |lastmsgdate[to] || '''string''' || последнее сообщение ДатаВремя до || lastmsgdate[to]=2019-03-01<br/>lastmsgdate[to]=2021-10-20T10:30:00+03:00 |
|- | |- | ||
|decl || '''array''' || ИНН декларанта, можно несколько || decl[]=555555<br/>decl[]=666666 | |decl || '''array''' || ИНН декларанта, можно несколько || decl[]=555555<br/>decl[]=666666 | ||
Строка 128: | Строка 128: | ||
!messagetype || '''string''' || Тип текущего сообщения с ДТ || CMN.11023 | !messagetype || '''string''' || Тип текущего сообщения с ДТ || CMN.11023 | ||
|- | |- | ||
− | |login || '''string''' || Логин || 123456 | + | |login || '''string''' || Catchall Логин || 123456-ca |
+ | |- | ||
+ | |svdlogin || '''string''' || Логин СВД || 123456-01 | ||
|- | |- | ||
|envelopeid || '''string''' || EnvelopeID текущего сообщения с ДТ || BD9D1189-A58E-482B-A108-ADF7D2459BFD | |envelopeid || '''string''' || EnvelopeID текущего сообщения с ДТ || BD9D1189-A58E-482B-A108-ADF7D2459BFD | ||
+ | |- | ||
+ | |messagetype || '''string''' || Тип текущего ЭД сообщения с ДТ || CMN.11010 | ||
|- | |- | ||
|status || '''string''' || Статус процедуры в числовом виде || 3 | |status || '''string''' || Статус процедуры в числовом виде || 3 | ||
|- | |- | ||
|softver || '''string''' || Версия альбома и спецификации || 5.14.2/3.3.21 | |softver || '''string''' || Версия альбома и спецификации || 5.14.2/3.3.21 | ||
+ | |- | ||
+ | |ver || '''string''' || Системная версия списка колонок || 1.06 | ||
|- | |- | ||
|ProccessID || '''string''' || ID процедуры || 1a2ab345-1a12-1a01-1234-1234a5678bc1 | |ProccessID || '''string''' || ID процедуры || 1a2ab345-1a12-1a01-1234-1234a5678bc1 | ||
+ | |- | ||
+ | |ExProccessID || '''string''' || Список дополнительных ID процедур по основной || 1a2ab345-1a12-1a01-1234-1234a5678bc1 | ||
|- | |- | ||
|LastMessageDate || '''string''' || Дата последнего сообщения по процедуре || | |LastMessageDate || '''string''' || Дата последнего сообщения по процедуре || | ||
Строка 155: | Строка 163: | ||
|- | |- | ||
|consigneeAddres || '''string''' || Адрес получателя || | |consigneeAddres || '''string''' || Адрес получателя || | ||
+ | |- | ||
+ | |sellerName || '''string''' || Продавец (ДТС) || | ||
|- | |- | ||
|Transp || '''string''' || Номера транспортных средств || | |Transp || '''string''' || Номера транспортных средств || | ||
+ | |- | ||
+ | |TrCount || '''string''' || Количество транспортных средств || | ||
+ | |- | ||
+ | |Contract || '''string''' || Номер контракта || | ||
|- | |- | ||
|TrDoc || '''string''' || Номер транспортных документов || | |TrDoc || '''string''' || Номер транспортных документов || | ||
Строка 171: | Строка 185: | ||
|- | |- | ||
|ContractCurrencyCode || '''string''' || Валюта контракта || RUB | |ContractCurrencyCode || '''string''' || Валюта контракта || RUB | ||
+ | |- | ||
+ | |sborSum || '''string''' || Сумма таможенных сборов || 30000.00 | ||
+ | |- | ||
+ | |poshSum || '''string''' || Сумма таможенных пошлин || 1989792.00 | ||
+ | |- | ||
+ | |ndsSum || '''string''' || Сумма НДС || 1989792.00 | ||
+ | |- | ||
+ | |akcizSum || '''string''' || Сумма акциза || 1989792.00 | ||
+ | |- | ||
+ | |platSum || '''string''' || Сумма платежей || 1989792.00 | ||
|- | |- | ||
|REGNUM || '''string''' || Номер ДТ || 10000000/010121/0123456 | |REGNUM || '''string''' || Номер ДТ || 10000000/010121/0123456 | ||
Строка 178: | Строка 202: | ||
|GoodsCount || '''string''' || Кол-во товаров || 1 | |GoodsCount || '''string''' || Кол-во товаров || 1 | ||
|- | |- | ||
− | |UD || '''string''' || Код поста гр.30 || | + | |BorderCustoms || '''string''' || Код поста гр.29 || 10000000 |
+ | |- | ||
+ | |UD || '''string''' || Код поста гр.30 || 10000000 | ||
+ | |- | ||
+ | |UDName || '''string''' || Наименование поста гр.30 || ФТС России | ||
|- | |- | ||
|CustomsProcedure || '''string''' || Режим || ИМ | |CustomsProcedure || '''string''' || Режим || ИМ | ||
Строка 185: | Строка 213: | ||
|- | |- | ||
|DeclarationKind || '''string''' || Особенности процедуры || ПТД | |DeclarationKind || '''string''' || Особенности процедуры || ПТД | ||
+ | |- | ||
+ | |DocUsageCode|| '''string''' || Признак использования товаросопроводительного документа в качестве ДТ || СД | ||
|} | |} | ||
Строка 220: | Строка 250: | ||
|- | |- | ||
|27 || Идет осмотр | |27 || Идет осмотр | ||
+ | |- | ||
+ | |28 || Идет экспертиза | ||
|- | |- | ||
|8192 || Отказано в приеме | |8192 || Отказано в приеме | ||
Строка 229: | Строка 261: | ||
=== Получение, Печать документа, Просмотр документа === | === Получение, Печать документа, Просмотр документа === | ||
+ | |||
+ | Теперь, зная список документов, можно получить определенный документ по его ID, вывод данного запроса по умолчанию идет в html виде | ||
+ | |||
+ | <code>/docs/ID/</code> | ||
+ | |||
+ | , где ID = ProccessID_Login, пример: <code>1a2ab345-1a12-1a01-1234-1234a5678bc1_123456</code> | ||
+ | |||
+ | '''также можно передать дополнительные параметры''' | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Параметр || '''Тип''' || Описание || Пример | ||
+ | |- | ||
+ | |format || '''string''' || Формат ответа (html, xml, pdf) || format=xml | ||
+ | |} | ||
+ | |||
+ | === Получение полей (заголовки столбцов) === | ||
+ | |||
+ | <code>/docs/fields/</code> | ||
+ | |||
+ | получение полей, заголовков столбцов вынесли в отдельный запрос | ||
+ | |||
+ | === Получение вложенных документов из графы 44 === | ||
+ | |||
+ | <code>/docs44/ID/</code> | ||
+ | |||
+ | , где ID = ProccessID_Login, пример: 1a2ab345-1a12-1a01-1234-1234a5678bc1_123456 | ||
+ | |||
+ | '''также можно передать дополнительные параметры - фильтры''' | ||
+ | |||
+ | у каждого документа, есть вложенные документы, у документа может быть очень много записей в этом параметре, | ||
+ | поэтому также есть фильтр по вложенным документам | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Параметр || '''Тип''' || Описание || Пример | ||
+ | |- | ||
+ | |docCode || '''string''' || Код документа, можно указать часть кода , но только от начала строки || 0234*, 04031 | ||
+ | |- | ||
+ | |docNum || '''string''' || Номер документа, можно указать любую часть номера без звездочек VN-RU || VN-RU, 18/04/ | ||
+ | |- | ||
+ | |docDate[from] || '''string''' || Дата от || 2018-01-01 | ||
+ | |- | ||
+ | |docDate[to] || '''string''' || Дата до || 2019-05-08 | ||
+ | |- | ||
+ | |tovNum[] || '''array''' || Номер товара, задается массивом || tovNum[]=1</br>tovNum[]=40 | ||
+ | |} | ||
+ | |||
+ | в ответ получаем массив с документами | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |docName || '''string''' || имя документа | ||
+ | |- | ||
+ | |docCode || '''string''' || Код документа | ||
+ | |- | ||
+ | |docDate || '''string''' || Дата документа | ||
+ | |- | ||
+ | |tovNum || '''string''' || Товары, их номера | ||
+ | |- | ||
+ | |elDocId || '''string''' || ID документа в архиве таможни | ||
+ | |- | ||
+ | |docNum || '''string''' || Номер документа | ||
+ | |- | ||
+ | |elArchId || '''string''' || ID архива таможни | ||
+ | |} | ||
+ | |||
+ | === Получение тела документа 44. Печать в html === | ||
+ | |||
+ | Запрос похож на предыдущий, добавляем только спереди ID документа в архиве таможни | ||
+ | |||
+ | <code>/docs44/ID/</code> | ||
+ | |||
+ | , где ID = elDocId_ProccessID_Login, пример: b1b2abcd-1a2b-1a23-a123-a12b345cde1a_1a2ab345-1a12-1a01-1234-1234a5678bc1_123456 | ||
+ | |||
+ | === Получение сообщений === | ||
+ | |||
+ | <code>/messages/ID/</code> | ||
+ | |||
+ | , где ID = ProccessID_Login, пример: 1a2ab345-1a12-1a01-1234-1234a5678bc1_123456 | ||
+ | |||
+ | ProccessID и Login обязательны | ||
+ | |||
+ | дополнительные параметры для запроса: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Параметр || '''Тип''' || Описание || Пример | ||
+ | |- | ||
+ | |date[from] || '''string''' || Дата сообщения от || date[from]=2019-03-01 | ||
+ | |- | ||
+ | |date[to] || '''string''' || Дата сообщения до || date[to]=2019-03-01 | ||
+ | |} | ||
+ | |||
+ | ==== Ответные параметры ==== | ||
+ | |||
+ | в ответ получаем объект messages, это массив с элементами message - объект с данными сообщения | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |messages || array || массив с сообщениями | ||
+ | |} | ||
+ | |||
+ | сообщение message, элемент этого массива, структура: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |MessageType || '''string''' || Тип сообщения || CMN.11001 | ||
+ | |- | ||
+ | |Priority || '''string''' || Служебное поле в заголовке сообщения || 4 | ||
+ | |- | ||
+ | |Incoming || '''string''' || 0 - исходящее сообщение, 1 - входящее || 1 | ||
+ | |- | ||
+ | |login || '''string''' || Логин || 123456-ca | ||
+ | |- | ||
+ | |svdlogin || '''string''' || Логин, с которого пришло сообщение || 123456-01 | ||
+ | |- | ||
+ | |EnvelopeID || '''string''' || EnvelopeID сообщения || BD9D1189-A58E-482B-A108-ADF7D2459BFD | ||
+ | |- | ||
+ | |SoftVersion || '''string''' || Версия альбома и спецификации || 5.14.2/3.3.21 | ||
+ | |- | ||
+ | |ParticipantID || '''string''' || ID декларанта | ||
+ | |- | ||
+ | |CustomsCode || '''string''' || Код таможни сообщения || | ||
+ | |- | ||
+ | |InitialEnvelopeID || '''string''' || EnvelopeID родительского сообщения (на которое ссылается данное сообщение) || | ||
+ | |- | ||
+ | |PreparationDateTime || '''string''' || Дата и время сообщения || | ||
+ | |- | ||
+ | |ExchType || '''string''' || Служебное поле в заголовке сообщения || 19200 | ||
+ | |- | ||
+ | |ProccessID || '''string''' || ID процедуры сообщения || 1a2ab345-1a12-1a01-1234-1234a5678bc1 | ||
+ | |- | ||
+ | |MainProccessID || '''string''' || ID основной процедуры (если есть) || 1a2ab345-1a12-1a01-1234-1234a5678bc1 | ||
+ | |- | ||
+ | |SenderInformation || '''string''' || Отправитель сообщения || smtp://eps.customs.ru/gateway | ||
+ | |- | ||
+ | |ReceiverInformation || '''string''' || Получатель сообщения || smtp://eps.customs.ru/102770123456789.as | ||
+ | |- | ||
+ | |Sign || '''string''' || Электронная подпись || ФЕДЕРАЛЬНАЯ ТАМОЖЕННАЯ СЛУЖБА | ||
+ | |- | ||
+ | |canView || '''string''' || 1 – возможен ли просмотр сообщения || | ||
+ | |- | ||
+ | |type || '''string''' || arch – документ из архива (возможен запрос документа по ArchDocID) || | ||
+ | |- | ||
+ | |ArchID || '''string''' || ID архива таможни || | ||
+ | |- | ||
+ | |ArchDocID || '''string''' || ID документа в архиве таможни || | ||
+ | |} | ||
+ | |||
+ | запрос также проверяет доступ к ИНН, если не прописан доступ к ИНН, то вернет ошибку | ||
+ | |||
+ | === Получение сообщения. === | ||
+ | |||
+ | Запрос похож на предыдущий, добавляется только EnvelopeID | ||
+ | |||
+ | <code>/messages/ID/</code> | ||
+ | |||
+ | , где ID = EnvelopeID_ProccessID_Login, пример: b1b2abcd-1a2b-1a23-a123-a12b345cde1a_1a2ab345-1a12-1a01-1234-1234a5678bc1_123456 | ||
+ | |||
+ | EnvelopeID, ProccessID и Login обязательны | ||
+ | |||
+ | возвращается сообщение по умолчанию в html виде | ||
+ | |||
+ | если сообщение содержит несколько документов, то все они будут склеены в один html | ||
+ | |||
+ | НО разделены комментариями <nowiki><!-- next doc --> </nowiki> | ||
+ | |||
+ | лучше показывать каждый документ отдельно, т.к. иногда бывает, что у документов пересекаются стили и они могут выглядеть некорректно, т.к. при склеивании html склеивается тело и стили. Пример как это выглядит: | ||
+ | |||
+ | <source lang="xml"> | ||
+ | |||
+ | <!-- count 2 --> | ||
+ | <!-- id=172987F4-A741-4A71-9780-AE28A38031E4 --> | ||
+ | <!DOCTYPE html .... | ||
+ | html.... тело документа со всеми стилями | ||
+ | <!-- NEXT DOC --> | ||
+ | <!-- id=2ACB2210-F7E7-4AB0-A2BD-10533FE4FBE4 --> | ||
+ | <!DOCTYPE html .... | ||
+ | html.... тут следующее тело со стилями | ||
+ | </source> | ||
+ | |||
+ | надо ориентироваться, если в начале документа есть параметр count 2, то значит в сообщении 2 документа | ||
+ | |||
+ | '''также можно передать дополнительные параметры''' | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Параметр || '''Тип''' || Описание || Пример | ||
+ | |- | ||
+ | |format || '''string''' || Формат ответа (html, xml, pdf) || format=xml | ||
+ | |} | ||
+ | |||
+ | == Типы данных == | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |'''string''' || строковый параметр | ||
+ | |- | ||
+ | |'''array''' || массив значений, нумерация элементов начинается с 0, вложенные элементы могут быть всех типов | ||
+ | |- | ||
+ | |'''object''' || объект значений или именованный массив. ключи - могут быть как числовые так и текстовые, вложенные элементы могут быть всех типов | ||
+ | |} | ||
+ | |||
+ | == Ошибки == | ||
+ | |||
+ | При возникновении ошибки в корневом элементе появляется блок с кодом и описанием ошибки. | ||
+ | При работе с сервисом возможны следующие ошибки: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Код || Описание | ||
+ | |- | ||
+ | |'''100''' || Нет обязательных параметров | ||
+ | |- | ||
+ | |'''200''' || АПИ ключ не найден или не действительный | ||
+ | |- | ||
+ | |'''201''' || Неверный хэш | ||
+ | |- | ||
+ | |'''202''' || Ошибка авторизации, обратитесь к администратору | ||
+ | |- | ||
+ | |'''204''' || Нет права выполнять эту операцию(запрос) | ||
+ | |- | ||
+ | |'''203''' || Слишком много запросов. Запрос отклонен | ||
+ | |- | ||
+ | |'''210''' || Необходимо принять оферту на сайте | ||
+ | |- | ||
+ | |'''300''' || Метод API не найден, возможно неверная версия АПИ | ||
+ | |- | ||
+ | |'''301''' || В запросе(методе) отсутствует необходимый параметр | ||
+ | |- | ||
+ | | || Строка запроса содержит синтаксическую ошибку | ||
+ | |- | ||
+ | |'''500''' || Обработка запроса потерпела неудачу из-за неизвестной ошибки, исключения | ||
+ | |} | ||
+ | |||
+ | пример ошибок | ||
+ | |||
+ | <source lang='json'> | ||
+ | { | ||
+ | "error": 200, | ||
+ | "text": "BAD api key, USER not found" | ||
+ | } | ||
+ | { | ||
+ | "error": 201, | ||
+ | "text": "ERROR HASH" | ||
+ | } | ||
+ | { | ||
+ | "error": 203, | ||
+ | "q": "v1/decl/", | ||
+ | "request_wait": 3.05, | ||
+ | "text": "Sory, You have Limit requests to API: 5 requests per 10 seconds. Please wait 3.05 sec for next request" | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Примеры реализации простого клиента == | ||
+ | |||
+ | === простой клиент на питоне === | ||
+ | |||
+ | на питоне 2.7, надо установить библиотеку pip install requests | ||
+ | |||
+ | <source lang="Python"> | ||
+ | apikey = "api_key" # ваш ключ апи | ||
+ | secret = "secret" # ваш секрет апи | ||
+ | v = 1 # версия | ||
+ | func = "docs" # вызываемая функция | ||
+ | param = "" # параметр используется для получения конкретного документа, например /docs/ID/ /docs/100000000/ | ||
+ | # доп параметры запроса | ||
+ | params = { | ||
+ | 'd': '123', | ||
+ | 'param1': 'xxxxx', | ||
+ | 'param2': 'yyyyyy' | ||
+ | } | ||
+ | # урл для запроса | ||
+ | api_url = "https://report.alta.ru/api/v%d/%s/" % (v, func) + (param + "/" if param else "") | ||
+ | |||
+ | if __name__ == "__main__": | ||
+ | # рассчитываем хэш секрет для запроса | ||
+ | # идем по всем параметрам по порядку | ||
+ | str = "" | ||
+ | for p in params: | ||
+ | str += params[p] | ||
+ | print p, params[p] | ||
+ | # и в конце прибавляем ключ | ||
+ | str = "%d%s%s%s%s" % (v, func + (param if param else ""), str, hashlib.md5(apikey).hexdigest(), hashlib.md5(secret).hexdigest()) | ||
+ | # считаем хэш | ||
+ | hash = hashlib.md5(str).hexdigest() | ||
+ | # добавляем эти параметры в запрос | ||
+ | params['hash'] = hash # + "1111" | ||
+ | params['apikey'] = apikey | ||
+ | print str, hash, api_url | ||
+ | # делаем запрос, я отключил проверку сертификата SSL а то не давало сделать запрос | ||
+ | r = requests.get(api_url, params, verify=False) | ||
+ | # выдаем ответ | ||
+ | if r.status_code != 200: | ||
+ | print r.status_code, "Похоже возникли ошибки: \n", r.text, r.content | ||
+ | else: | ||
+ | print "ОТВЕТ", r.content | ||
+ | </source> | ||
[[Категория:Автоматизация]] | [[Категория:Автоматизация]] |
Текущая версия на 09:33, 12 ноября 2024
Содержание
- 1 Сервис мониторинг таможенного оформления (REPORT.ALTA.RU)
- 2 Описание параметров
- 3 Список всех функций API
- 3.1 Получение логинов
- 3.2 Получение декларантов
- 3.3 Получение таможенных постов
- 3.4 Получение документов
- 3.5 Наименования статусов
- 3.6 Получение, Печать документа, Просмотр документа
- 3.7 Получение полей (заголовки столбцов)
- 3.8 Получение вложенных документов из графы 44
- 3.9 Получение тела документа 44. Печать в html
- 3.10 Получение сообщений
- 3.11 Получение сообщения.
- 4 Типы данных
- 5 Ошибки
- 6 Примеры реализации простого клиента
Сервис мониторинг таможенного оформления (REPORT.ALTA.RU)
Сервис предоставляет разработчикам возможность получения информации из внешних программ и сайтов в JSON-формате. С помощью данного сервиса можно выгружать следующую информацию:
- Список логинов, к пользователю может быть прикреплено много логинов
- Декларанты, таможенные посты
- Получение ДТ
- Получение документов гр.44 (если включено дублирование всех сообщений)
- Получение ЭД сообщений
Описание параметров
Доступ к API предоставляется по URL https://report.alta.ru/api/ Входные параметры передаются с помощью запроса HTTPS GET. Для использования сервиса необходимо получить apikey и secret в личном кабинете
Пример адреса запроса с параметрами: https://report.alta.ru/api/function/параметр0/?параметр1…2...параметрN&apikey=XXXX&hash=YYYYY
любой запрос должен содержать обязательные параметры, они выделены жирным
Параметр | Тип | Описание | Пример |
---|---|---|---|
Обязательные, должны быть в любом запросе | |||
v1 | string | Версия апи, текущая версия 1 | v1 v2 … v1.1 |
function | string | вызываемая функция апи | docs, decl, logins, tam |
apikey | string | Ключ авторизации, получить в личном кабинете | 5b145adecf42b8eecd4e6f3dc7134f45 |
hash | string | ХЭШ запроса, рассчитывается для каждого запроса по слову secret | 34563456 |
К необязательным параметрам относится, например, параметр0 Параметр0 идет сразу после функции, его можно опустить, и не писать, тогда ставим слеш после функции и дописываем обязательные параметры ключ и хэш, пример:
/api/v1/docs/?apikey=XXX&hash=YYY
Параметр0 указываем для получения конкретного документа, пример:
/api/v1/docs/xxxxx/?apikey=XXX&hash=YYY
секрет нужен для генерации хэша (подписи) запроса, ХЭШ генерируется так:
hash = md5(версия + функция + параметр0(если есть) + ВСЕ_ПАРАМЕТРЫ + md5(apikey) + md5(secret))
ВСЕ_ПАРАМЕТРЫ — это конкатенация всех GET параметров в той последовательности, в которой они идут в параметрах запроса слева направо, параметры: апи ключ, хеш и секрет не участвуют
пример, запрос:
https://report.alta.ru/api/v1/docs/?x=1&y=2&z=3&apikey=5555&hash=5b145adecf42b8eecd4e6f3dc7134f45
в данном случае ВСЕ_ПАРАМЕТРЫ это x y z нам известно, что наш аккаунт имеет следующие данные: apikey = 5555, secret = 7777 тогда вычислим хэш:
hash = md5 ( 1 + docs + (параметр0 не указан, его не берем) + 1 + 2 + 3 + md5(5555) + md5(7777)) =
md5 (1docs1236074c6aa3488f3c2dddff2a7ca821aabd79c8788088c2193f0244d8f1f36d2db ) =
получилось, что hash = 5b145adecf42b8eecd4e6f3dc7134f45
Список всех функций API
Для наглядности опустим тут обязательную часть запроса, оставим только конкретику
https://report.alta.ru/api/v1/FUNC/param0/?apikey=XXX&hash=YYY
Получение логинов
/logins/
Ответом получаем массив с логинами
Получение декларантов
/decl/
получаем массив с ИНН и названиями организаций
Получение таможенных постов
/tam/
Получаем массив таможенных постов
Получение документов
/docs/
фильтры, передаются как ПАРАМЕТРЫ запроса, пример:
https://report.alta.ru/api/v1/docs/?regdate[from]=2019-03-01&apikey=xxx&hash=xxx&
Параметр | Тип | Описание | Пример |
---|---|---|---|
regdate[from] | string | дата регистрации от только дата |
regdate[from]=2019-03-01 |
regdate[to] | string | дата регистрации до только дата |
regdate[to]=2019-03-01 |
vypdate[from] | string | ДатаВремя выпуска от | vypdate[from]=2019-05-08 vypdate[from]=2021-10-10T10:30:00 |
vypdate[to] | string | ДатаВремя выпуска до | vypdate[to]=2019-05-08 vypdate[to]=2021-10-20T10:30:00+03:00 |
lastmsgdate[from] | string | последнее сообщение ДатаВремя от | lastmsgdate[from]= 2019-05-08 lastmsgdate[from]=2021-10-10T10:30:00 |
lastmsgdate[to] | string | последнее сообщение ДатаВремя до | lastmsgdate[to]=2019-03-01 lastmsgdate[to]=2021-10-20T10:30:00+03:00 |
decl | array | ИНН декларанта, можно несколько | decl[]=555555 decl[]=666666 |
tam | array | Номер таможенного поста, можно несколько | tam[]=555 |
login | array | Логин, можно несколько | login[]=xxx |
pid | array | процедуры | pid[]=xxx&pid[]=yyy&pid[]=zzz&.. |
В ответ получаем документы
docs | array | массив документов |
из выдачи убрали заголовки столбцов, для их получения есть запрос апи /docs/fields/
Массив docs
Это массив документов, содержит в себе объект doc
Объект doc
messagetype | string | Тип текущего сообщения с ДТ | CMN.11023 |
---|---|---|---|
login | string | Catchall Логин | 123456-ca |
svdlogin | string | Логин СВД | 123456-01 |
envelopeid | string | EnvelopeID текущего сообщения с ДТ | BD9D1189-A58E-482B-A108-ADF7D2459BFD |
messagetype | string | Тип текущего ЭД сообщения с ДТ | CMN.11010 |
status | string | Статус процедуры в числовом виде | 3 |
softver | string | Версия альбома и спецификации | 5.14.2/3.3.21 |
ver | string | Системная версия списка колонок | 1.06 |
ProccessID | string | ID процедуры | 1a2ab345-1a12-1a01-1234-1234a5678bc1 |
ExProccessID | string | Список дополнительных ID процедур по основной | 1a2ab345-1a12-1a01-1234-1234a5678bc1 |
LastMessageDate | string | Дата последнего сообщения по процедуре | |
DeclarantOrganizationName | string | Наименование организациии | ООО \"Альта-Софт\" |
DeclarantINN | string | ИНН декларанта | 1234567890 |
DeclarantOGRN | string | ОГРН декларанта | |
DeclarantFIO | string | ФИО декларанта из гр.54 | |
consignorName | string | Отправитель | |
consignorAddres | string | Адрес отправителя | |
consigneeName | string | Получатель | |
consigneeAddres | string | Адрес получателя | |
sellerName | string | Продавец (ДТС) | |
Transp | string | Номера транспортных средств | |
TrCount | string | Количество транспортных средств | |
Contract | string | Номер контракта | |
TrDoc | string | Номер транспортных документов | |
Cont | string | Номера контейнеров | |
NetWeightQuantity | string | Нетто | 20160.00 |
GrossWeightQuantity | string | Брутто | 20640.00 |
CustomsCost | string | Таможенная стоимость | 1989792.00 |
InvoicedCost | string | Фактурная стоимость | 1989792.00 |
ContractCurrencyCode | string | Валюта контракта | RUB |
sborSum | string | Сумма таможенных сборов | 30000.00 |
poshSum | string | Сумма таможенных пошлин | 1989792.00 |
ndsSum | string | Сумма НДС | 1989792.00 |
akcizSum | string | Сумма акциза | 1989792.00 |
platSum | string | Сумма платежей | 1989792.00 |
REGNUM | string | Номер ДТ | 10000000/010121/0123456 |
PackageNumber | string | Кол-во мест | |
GoodsCount | string | Кол-во товаров | 1 |
BorderCustoms | string | Код поста гр.29 | 10000000 |
UD | string | Код поста гр.30 | 10000000 |
UDName | string | Наименование поста гр.30 | ФТС России |
CustomsProcedure | string | Режим | ИМ |
CustomsModeCode | string | Процедура | 40 |
DeclarationKind | string | Особенности процедуры | ПТД |
DocUsageCode | string | Признак использования товаросопроводительного документа в качестве ДТ | СД |
Наименования статусов
1 | Открытие процедуры |
2 | Присвоен номер |
3 | Идет проверка |
4 | Идет досмотр |
5 | Проверка закончена |
6 | Условно выпущена |
7 | Выпуск разрешен |
10 | Отказано в выпуске |
11 | Товар прибыл (ПТД) |
12 | Выпуск с обеспечением |
13 | Отзыв |
14 | Считается не поданной |
15 | Выпуск приостановлен |
17 | Частично выпущена |
26 | Выпуск под обеспечение |
27 | Идет осмотр |
28 | Идет экспертиза |
8192 | Отказано в приеме |
16384 | Переход на "бумагу" |
32768 | Запрошен отзыв |
Получение, Печать документа, Просмотр документа
Теперь, зная список документов, можно получить определенный документ по его ID, вывод данного запроса по умолчанию идет в html виде
/docs/ID/
, где ID = ProccessID_Login, пример: 1a2ab345-1a12-1a01-1234-1234a5678bc1_123456
также можно передать дополнительные параметры
Параметр | Тип | Описание | Пример |
---|---|---|---|
format | string | Формат ответа (html, xml, pdf) | format=xml |
Получение полей (заголовки столбцов)
/docs/fields/
получение полей, заголовков столбцов вынесли в отдельный запрос
Получение вложенных документов из графы 44
/docs44/ID/
, где ID = ProccessID_Login, пример: 1a2ab345-1a12-1a01-1234-1234a5678bc1_123456
также можно передать дополнительные параметры - фильтры
у каждого документа, есть вложенные документы, у документа может быть очень много записей в этом параметре, поэтому также есть фильтр по вложенным документам
Параметр | Тип | Описание | Пример |
---|---|---|---|
docCode | string | Код документа, можно указать часть кода , но только от начала строки | 0234*, 04031 |
docNum | string | Номер документа, можно указать любую часть номера без звездочек VN-RU | VN-RU, 18/04/ |
docDate[from] | string | Дата от | 2018-01-01 |
docDate[to] | string | Дата до | 2019-05-08 |
tovNum[] | array | Номер товара, задается массивом | tovNum[]=1 tovNum[]=40 |
в ответ получаем массив с документами
docName | string | имя документа |
docCode | string | Код документа |
docDate | string | Дата документа |
tovNum | string | Товары, их номера |
elDocId | string | ID документа в архиве таможни |
docNum | string | Номер документа |
elArchId | string | ID архива таможни |
Получение тела документа 44. Печать в html
Запрос похож на предыдущий, добавляем только спереди ID документа в архиве таможни
/docs44/ID/
, где ID = elDocId_ProccessID_Login, пример: b1b2abcd-1a2b-1a23-a123-a12b345cde1a_1a2ab345-1a12-1a01-1234-1234a5678bc1_123456
Получение сообщений
/messages/ID/
, где ID = ProccessID_Login, пример: 1a2ab345-1a12-1a01-1234-1234a5678bc1_123456
ProccessID и Login обязательны
дополнительные параметры для запроса:
Параметр | Тип | Описание | Пример |
---|---|---|---|
date[from] | string | Дата сообщения от | date[from]=2019-03-01 |
date[to] | string | Дата сообщения до | date[to]=2019-03-01 |
Ответные параметры
в ответ получаем объект messages, это массив с элементами message - объект с данными сообщения
messages | array | массив с сообщениями |
сообщение message, элемент этого массива, структура:
MessageType | string | Тип сообщения | CMN.11001 |
Priority | string | Служебное поле в заголовке сообщения | 4 |
Incoming | string | 0 - исходящее сообщение, 1 - входящее | 1 |
login | string | Логин | 123456-ca |
svdlogin | string | Логин, с которого пришло сообщение | 123456-01 |
EnvelopeID | string | EnvelopeID сообщения | BD9D1189-A58E-482B-A108-ADF7D2459BFD |
SoftVersion | string | Версия альбома и спецификации | 5.14.2/3.3.21 |
ParticipantID | string | ID декларанта | |
CustomsCode | string | Код таможни сообщения | |
InitialEnvelopeID | string | EnvelopeID родительского сообщения (на которое ссылается данное сообщение) | |
PreparationDateTime | string | Дата и время сообщения | |
ExchType | string | Служебное поле в заголовке сообщения | 19200 |
ProccessID | string | ID процедуры сообщения | 1a2ab345-1a12-1a01-1234-1234a5678bc1 |
MainProccessID | string | ID основной процедуры (если есть) | 1a2ab345-1a12-1a01-1234-1234a5678bc1 |
SenderInformation | string | Отправитель сообщения | smtp://eps.customs.ru/gateway |
ReceiverInformation | string | Получатель сообщения | smtp://eps.customs.ru/102770123456789.as |
Sign | string | Электронная подпись | ФЕДЕРАЛЬНАЯ ТАМОЖЕННАЯ СЛУЖБА |
canView | string | 1 – возможен ли просмотр сообщения | |
type | string | arch – документ из архива (возможен запрос документа по ArchDocID) | |
ArchID | string | ID архива таможни | |
ArchDocID | string | ID документа в архиве таможни |
запрос также проверяет доступ к ИНН, если не прописан доступ к ИНН, то вернет ошибку
Получение сообщения.
Запрос похож на предыдущий, добавляется только EnvelopeID
/messages/ID/
, где ID = EnvelopeID_ProccessID_Login, пример: b1b2abcd-1a2b-1a23-a123-a12b345cde1a_1a2ab345-1a12-1a01-1234-1234a5678bc1_123456
EnvelopeID, ProccessID и Login обязательны
возвращается сообщение по умолчанию в html виде
если сообщение содержит несколько документов, то все они будут склеены в один html
НО разделены комментариями <!-- next doc -->
лучше показывать каждый документ отдельно, т.к. иногда бывает, что у документов пересекаются стили и они могут выглядеть некорректно, т.к. при склеивании html склеивается тело и стили. Пример как это выглядит:
<!-- count 2 -->
<!-- id=172987F4-A741-4A71-9780-AE28A38031E4 -->
<!DOCTYPE html ....
html.... тело документа со всеми стилями
<!-- NEXT DOC -->
<!-- id=2ACB2210-F7E7-4AB0-A2BD-10533FE4FBE4 -->
<!DOCTYPE html ....
html.... тут следующее тело со стилями
надо ориентироваться, если в начале документа есть параметр count 2, то значит в сообщении 2 документа
также можно передать дополнительные параметры
Параметр | Тип | Описание | Пример |
---|---|---|---|
format | string | Формат ответа (html, xml, pdf) | format=xml |
Типы данных
string | строковый параметр |
array | массив значений, нумерация элементов начинается с 0, вложенные элементы могут быть всех типов |
object | объект значений или именованный массив. ключи - могут быть как числовые так и текстовые, вложенные элементы могут быть всех типов |
Ошибки
При возникновении ошибки в корневом элементе появляется блок с кодом и описанием ошибки. При работе с сервисом возможны следующие ошибки:
Код | Описание |
---|---|
100 | Нет обязательных параметров |
200 | АПИ ключ не найден или не действительный |
201 | Неверный хэш |
202 | Ошибка авторизации, обратитесь к администратору |
204 | Нет права выполнять эту операцию(запрос) |
203 | Слишком много запросов. Запрос отклонен |
210 | Необходимо принять оферту на сайте |
300 | Метод API не найден, возможно неверная версия АПИ |
301 | В запросе(методе) отсутствует необходимый параметр |
Строка запроса содержит синтаксическую ошибку | |
500 | Обработка запроса потерпела неудачу из-за неизвестной ошибки, исключения |
пример ошибок
{
"error": 200,
"text": "BAD api key, USER not found"
}
{
"error": 201,
"text": "ERROR HASH"
}
{
"error": 203,
"q": "v1/decl/",
"request_wait": 3.05,
"text": "Sory, You have Limit requests to API: 5 requests per 10 seconds. Please wait 3.05 sec for next request"
}
Примеры реализации простого клиента
простой клиент на питоне
на питоне 2.7, надо установить библиотеку pip install requests
apikey = "api_key" # ваш ключ апи
secret = "secret" # ваш секрет апи
v = 1 # версия
func = "docs" # вызываемая функция
param = "" # параметр используется для получения конкретного документа, например /docs/ID/ /docs/100000000/
# доп параметры запроса
params = {
'd': '123',
'param1': 'xxxxx',
'param2': 'yyyyyy'
}
# урл для запроса
api_url = "https://report.alta.ru/api/v%d/%s/" % (v, func) + (param + "/" if param else "")
if __name__ == "__main__":
# рассчитываем хэш секрет для запроса
# идем по всем параметрам по порядку
str = ""
for p in params:
str += params[p]
print p, params[p]
# и в конце прибавляем ключ
str = "%d%s%s%s%s" % (v, func + (param if param else ""), str, hashlib.md5(apikey).hexdigest(), hashlib.md5(secret).hexdigest())
# считаем хэш
hash = hashlib.md5(str).hexdigest()
# добавляем эти параметры в запрос
params['hash'] = hash # + "1111"
params['apikey'] = apikey
print str, hash, api_url
# делаем запрос, я отключил проверку сертификата SSL а то не давало сделать запрос
r = requests.get(api_url, params, verify=False)
# выдаем ответ
if r.status_code != 200:
print r.status_code, "Похоже возникли ошибки: \n", r.text, r.content
else:
print "ОТВЕТ", r.content