Прочие возможности⚓︎
Информирование о событиях API (Webhooks)⚓︎
АСНА REST API может уведомлять заинтересованных подписчиков о событиях, происходящих в сервисе. Например, вы можете получать уведомление о поступлении новых заказов или об успешной загрузке ваших остатков в облако. Для это API использует технологию Webhooks, т.е. осуществляет HTTP запросы на ваши адреса, зарегистрированные в API. Использование уведомлений возможно, если ваши сервисы находятся в открытом доступе и имеют либо постоянный IP адрес, либо постоянное доменное имя. В случае отсутствия постоянного доменного имени или адреса можно воспользоваться службами Dynamic DNS или утилитами, типа ngrok1 . За консультацией вы можете обратиться в Отдел веб-сервисов компании АСНА.
Список событий, поддерживаемых API⚓︎
Название | Описание |
---|---|
stocks_full | Приняты полные остатки аптеки |
stocks_updates | Приняты изменения остатков аптеки |
preorders_full | Принят полный сводный прайс-лист юрлица |
preorders_updates | Приняты изменения сводного прайс-листа юрлица |
orders_updates_store | Приняты изменения заказов со стороны аптеки |
orders_updates_site | Приняты изменения заказов со стороны сайта |
Безопасность webhooks⚓︎
В целях обеспечения безопасности, при запросе на ваш адрес, в заголовке X-Signature запроса мы передаем хэш (HMAC SHA256) тела запроса.
При получении запроса на ваш URL, вы можете вычислить хэш тела запроса по алгоритму SHA256 и сравнить его значение с содержимым заголовка X-Signature. В случае если вычисленное вами значение совпадает с тем, что находится в заголовке, вы обрабатываете запрос, иначе отклоняете его.
Алгоритм формирования значения заголовка X-Signature⚓︎
- Содержимое тела запроса в виде массива байт хэшируется по алгоритму SHA256 с использованием секретного ключа.
- Полученный массив байт переводим в строку с шестнадцатиричным кодированием (hex-encoded string)
- Спереди к полученной строке добавляем строку sha256=
Проверка подписи не обязательна, но если вы хотите быть уверены что запрос пришел именно от АСНА API, а не от постороннего, возможно вредоносного, ПО, то наличие этой проверки в вашем сервисе сделает его более защищенным.
Получение ключа⚓︎
Клиенты, которые желают защитить от несанкционированного доступа свои URL, используемые для получения уведомлений от АСНА REST API, должны получить ключ, который будет использоваться для формирования подписи запроса.
ЗАПРОС
/v5/keys/webhooks
Описание⚓︎
Получить ключ для проверки подписи webhooks по протоколу v5
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Ключ выдан. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Подписка на события⚓︎
Клиенты, которые желают получать уведомление от API о событии, должны подписаться на это событие.
ЗАПРОС
/v5/events/{eventName}/subscribe
Описание⚓︎
Подписаться на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно получить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) | |
url | string | URL, на который API должен делать запрос при возникновении события |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
201 | Created. Новая подписка создана. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Обновление информации о подписке⚓︎
Клиенты могут изменить подписку на событие, например, при изменении URL, который должен вызывать API.
ЗАПРОС
/v5/events/{eventName}/subscribe
Описание⚓︎
Изменить подписку на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно получить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) | |
url | string | URL, на который API должен делать запрос при возникновении события |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Подписка изменена. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Удаление подписки⚓︎
Клиенты могут удалить подписку на событие, если в ней больше нет необходимости.
ЗАПРОС
/v5/events/{eventName}
Описание⚓︎
Удалить подписку на событие eventName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
eventName | string | Название события |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Пример запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
clientId | GUID | Уникальный идентификатор клиента по справочнику АСНА (например, если нужно удалить уведомление о событии приема полных остатков по определенной аптеке, то в качестве clientId подставляется уникальный идентификатор этой аптеки ) |
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
204 | No Content. Подписка удалена. |
Пример ответа⚓︎
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Проверка отложенной обработки⚓︎
Если вы, при вызове API, получили в ответ HTTP-статус 202
Accepted, то это значит что переданные данные требуют отложенной обработки и были поставлены в очередь на обработку. В этом случае HTTP-заголовок Location содержит URL, запросив который вы получите статус обработки.
Проверить статус отложенной обработки можно несколькими способами.
- Через вызов API, описанный в этом разделе, можно получить информацию о статусе отложенной обработки.
- Получить статус отложенной обработки можно, кроме вышеописанного, способом, описанным в Информирование о событиях API (Webhooks).
- Запросить через API остатки назад и убедиться что они соответствуют отправленным Получение информации по остаткам аптеки.
- Получить информацию об остатках и прайс-листах можно через бота.
ЗАПРОС
/v5/messages/{messageId}/status
Описание⚓︎
Получить информацию о статусе отложенной обработки упаковки данных c messageId по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
messageId | GUID | Идентификатор упаковки данных |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Accept | application/json или application/x-json-full |
Пример запроса⚓︎
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | ОК. В теле ответа содержится JSON со связками. |
204 | No Content. Информации о пакете нет в БД |
Пример ответа⚓︎
Имя | Тип | Описание |
---|---|---|
id | int | Идентификатор записи |
messageId | GUID | Идентификатор упаковки |
statusId | int | Код статуса |
statusMessage | string | Статус |
statusDate | datetime | Дата статуса в формате ISO8601 в нулевом часовом поясе |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Статусы пакетов⚓︎
Код (statusId) | Название | Описание |
---|---|---|
0 | Accepted | Принято к обработке |
1 | Processing | Обрабатывается |
2 | Processed | Обработано |
3 | Error | Ошибка. Пакет не был обработан |
Валидация данных в формате JSON⚓︎
Иногда может возникнуть необходимость проверить отправляемые данные на соответствие формату JSON. Как правило, это происходит если API отклоняет запрос со статусом 400
, но вы не можете обнаружить причину. Для проверки ваших данных, вы можете использовать следующий вызов API:
ЗАПРОС
/v5/json_schemas/{schemaName}/validation
Описание⚓︎
Валидировать данные по схеме schemaName по протоколу v5
Параметры запроса⚓︎
Имя | Тип | Обяз. | Описание |
---|---|---|---|
schemaName | string | Имя схемы для валидации. Может принимать значения: stocks, preorders, orders, transactions |
Заголовки запроса⚓︎
Имя | Описание |
---|---|
Authorization | Bearer token |
Content-Type | application/json |
Тело запроса⚓︎
Тело запроса должно содержать в формате JSON пакет, который требуется валидировать
Пример запроса
Успешный ответ⚓︎
HTTP cтатус | Значение |
---|---|
200 | OK. Пакет не содержит ошибок |
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |
Пример ответа с ошибками валидации⚓︎
Имя | Тип | Описание |
---|---|---|
field | string | Поле, в котором обнаружена ошибка |
message | string | Описание ошибки |
Возможна ситуация когда пакет не удается распарсить, в этом случае мы не можем понять в каких полях ошибка. Ниже пример такого ответа.
Неуспешный ответ⚓︎
HTTP статус | Значение |
---|---|
400 | Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. |
401 | Unauthorized. Токен авторизации неверный или истек срок его действия |
403 | Forbidden. У вас нет прав на выполнение данной операции |
429 | Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени |
500 | Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса |