Перейти к содержанию

Бронирование (интернет-заказ)⚓︎

Бизнес-процессы работы с заказами⚓︎

Бронирование⚓︎

Возможные варианты схем интеграции в части требований этапов жизненного цикла заказа:

  1. Полная схема интеграции
  2. Уведомительная схема интеграции

С определенной периодичностью клиентское ПО должно опрашивать API для получения информации о новых или измененных заказах. Все полученные с сайта заказы должны быть приняты и обработаны клиентским ПО.

ВНИМАНИЕ!

Продажа товара по заказам с сайта должна производиться в ценах, не выше, чем указанные в документе заказа, с обязательным контролем максимально допустимой наценки для ЖНВЛС. Указанная цена берется из поля prc.

Заказ может быть трех видов:

  1. Товар только из наличия
  2. Товар только по предзаказу
  3. Комбинированый, товар как из наличия, так и по предзаказу

Новый заказ⚓︎

При создании заказа на сайте формируется статус на заголовок с кодом 100. В этом статусе в поле rcDate сайт передает информацию о времени сброса резерва, которое аптечное ПО должно контролировать.

При получении нового заказа, если присутствуют строки с товаром из наличия, клиентское ПО пытается бронировать все товары по этим строкам, в количестве, которое указано в поле qnt.

Если заказ со строками только из наличия, возможны следующие варианты:

  1. Товары полностью зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.
  2. Товары полностью не зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 202 на заголовок.
  3. Товары зарезервировались частично - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 201 на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).

Если заказ со строками только по предзаказу, клиентское ПО должно сформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.

В случае комбинированного заказа возможны варианты:

  1. Товары из наличия полностью зарезервировались и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.
  2. Товары из наличия полностью не зарезервировались или зарезервировались частично, и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 201 на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).

Если в документе присутствуют строки по предзаказу, то клиентское ПО должно разместить заказы на эти товары у поставщиков (API возвращает в строках заказа информацию об ИНН поставщика в поле supInn, взятую из сводного прайс-листа юрлица) и cформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 203 на заголовок заказа.

Редактирование заказа⚓︎

На сайте и в мобильном приложении для пользователя отсутствует возможность редактировать заказ после его создания. Редактирование активных заказов разрешено:

  1. Операторам колл-центра АСНА до статуса 213 - Заказ собран (укомплектован);
  2. Сотрудникам аптеки(первостольникам) вне зависимости от статуса заказа в учетной системе аптеки.

При редактировании заказа на сайте формируется статус на заголовок с кодом 108. В этом статусе в поле rcDate сайт передает информацию о времени сброса резерва, которое аптечное ПО должно контролировать. Если при редактировании заказа на сайте была удалена строка, то на эту строку формируется статус с кодом 102. Отредактированный заказ ПОЛНОСТЬЮ (заголовок, строки и созданные статусы) передается в аптеку.

При получении отредактированного заказа, если присутствуют строки с товаром из наличия, клиентское ПО пытается бронировать все товары по этим строкам, в количестве, которое указано в поле qnt.

Если заказ со строками только из наличия, возможны следующие варианты:

  1. Товары полностью зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.
  2. Товары полностью не зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 202 на заголовок.
  3. Товары зарезервировались частично - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 201 на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).

Если заказ со строками только по предзаказу, клиентское ПО должно сформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.

В случае комбинированного заказа возможны варианты:

  1. Товары из наличия полностью зарезервировались и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.
  2. Товары из наличия полностью не зарезервировались или зарезервировались частично, и принялись строки предзаказа - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 201 на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv).

Если в документе присутствуют строки по предзаказу, то клиентское ПО должно разместить заказы на эти товары у поставщиков (API возвращает в строках заказа информацию об ИНН поставщика в поле supInn, взятую из сводного прайс-листа юрлица) и cформировать и вернуть новый статус (с новым уникальным идентификатором) с кодом 203 на заголовок заказа.

При полном поступлении товаров по предзаказу в аптеку, ПО должно отправить статус 207. В ответ сайт отправит в аптеку статус 104, содержащий новое время сброса резерва, которое ПО должно контролировать.

Сбор (комплектация) заказа⚓︎

После того как заказ в аптеке был собран (укомплектован), необходимо отправить статус на заголовок 213. Отправка этого статуса инициируется из аптечного ПО, после того как сотрудник аптеки выставил в ПО статус полной комплектации заказа. Этот статус может формироваться из ПО сотрудником аптеки после каждого изменения комплектации заказа (например, в случае редактирования заказа покупателем). Если заказ содержал в себе строки предзаказа, то можно отправлять этот статус из ПО в случае подтверждения сотрудником аптеки полного прихода товара по ИЗП (предзаказу) и комплектации заказа.

Отмена покупателем⚓︎

При отмене заказа покупателем на сайте формируется статус на заголовок с кодом 111. Аптека формирует и возвращает новый статус (с новым уникальным идентификатором) подтверждения отмены заказа покупателем с кодом 211. Заказ снимается с резерва.

Отмена заказа аптекой⚓︎

В случае если у аптеки выставлен параметр cancelOrder, аптека должна иметь возможность отменить заказ. При отмене формируется и возвращается новый статус (с новым уникальным идентификатором) отмены заказа по инициативе аптеки с кодом 212. Заказ снимается с резерва.

Изменение времени бронирования⚓︎

Покупатель может попросить продлить время бронирования заказа. Если аптека принимает решение о продлении бронирования, то формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 204 с измененной датой снятия товара с резерва (поле rcDate).

Сброс резерва⚓︎

Клиентское ПО должно контролировать дату снятия заказа с резерва. Эту дату сайт передает в статусах 100, 104, 108. По достижению даты снятия товара с резерва, если товар не был выкуплен, формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 205. Заказ снимается с резерва.

Выкуп заказа⚓︎

Возможны следующие варианты: Если заказ был полностью выкуплен, то формируется и возвращается статус с кодом 210. Если был выкуплен только резерв из наличия и(или) товар, частично пришедший по предзаказу, но не выкуплен весь заказ, то формируется и возвращается статус с кодом 209 на каждую выкупленную строку. Этот статус может формироваться несколько раз, на каждый из чеков.

Статусы заказов, формируемые сайтом⚓︎

Код Название Описание
100 New Новый заказ. Формируется на заголовок
102 OrderRowCancelled Отмена строки на сайте. Формируется на строку
104 ChangeReservationTimeBySite Изменение времени бронирования с сайта. Формируется на заголовок
108 OrderEditedByBuyer Заказ отредактирован покупателем на сайте. Формируется на заголовок
109 PartiallyPurchased Резерв выкуплен, ожидает предзаказ. Формируется на заголовок только в случае онлайн-оплаты
110 Purchased Заказ выкуплен. Формируется на заголовок только в случае онлайн-оплаты
111 CancelledByBuyer Отмена заказа покупателем на сайте. Формируется на заголовок

Статусы заказов, формируемые аптекой⚓︎

Код Название Описание
200 Accepted Заказ принят аптекой. Формируется на заголовок
201 PartiallyAccepted Заказ частично принят аптекой. Формируется на заголовок
202 Rejected Отказ со стороны аптеки. Формируется на заголовок
203 WaitingForPreorder Ожидание предзаказа. Формируется и на строку и на заголовок
204 ChangeReservationTime Изменение времени бронирования. Формируется на заголовок
205 ReserveCancelled Резерв сброшен. Формируется на заголовок
206 ExceededDeliveryTime Превышение ожидаемого срока поставки. Формируется на заголовок
207 PreorderCompleted Предзаказ выполнен. Формируется на заголовок
208 EditingIsForbidden Редактирование строки запрещено. Формируется на строку
209 PartiallyPurchased Резерв выкуплен, ожидает предзаказ. Формируется на каждую выкупленную строку
210 Purchased Заказ выкуплен. Формируется на заголовок
211 CancellationAccepted Отмена заказа подтверждена. Формируется на заголовок
212 CancelledByStore Заказ отменен аптекой (если у нее есть такие права). Формируется на заголовок
213 Assembled Заказ собран (укомплектован). Формируется на заголовок
214 IssuedToCourier Выдан курьеру (для АСНА-МАРКЕТ). Формируется на заголовок
215 Delivered Доставлен (для АСНА-МАРКЕТ). Формируется на заголовок

ВНИМАНИЕ!

При получении в пакете нескольких статусов на один и тот же заголовок заказа или строку, ваше ПО обязано применить их к этому заголовку или строке четко в порядке их создания. Для этого нужно предварительно провести сортировку статусов по 2-м полям, полю ts, а затем по полю date в порядке возрастания этих дат.

Бизнес-процессы работы с заказами АСНА-Маркет⚓︎

Работа с заказами АСНА-МАРКЕТ аналогична работе с обычными заказами Заказы (бронирование) с некоторыми изменениями, указанными ниже.

В заказы добавились 2 новых статуса со стороны аптеки, 214 Выдан курьеру и 215 Доставлен. В заголовках заказов появилось 2 дополнительных поля delivery (признак доставки) и deliveryInfo (информация о доставке). При заказах с доставкой нет необходимости контролировать время резервирования в аптеке, поэтому текущие поля с временем резерва на всем жизненном цикле заказа = NULL.

Доставка⚓︎

Если заказ имел признак необходимости доставки(поле delivery), то при выдаче заказа курьеру ПО должно формировать и отсылать статус 214. При этом в поле cmnt можно передать ФИО курьера, время доставки, телефон курьера. Передача информации о курьере - не обязательна для ПО. После фактической доставки заказа покупателю, ПО обязано сформировать и отправить статус 215.

Получение информации о заказах аптеки⚓︎

Клиенты, которые работают с сайтом АСНА, могут получать через API информацию о новых заказах, сформированных на сайте, а также информацию об изменении статусов этих заказов.

ОГРАНИЧЕНИЕ

Запрашивать заказы необходимо не чаще 1-го раза в минуту для каждой аптеки.

ВНИМАНИЕ

Необходимо иметь в ПО возможность, например, по кнопке в кассовом модуле, запросить изменения заказов, так как заказ может быть сделан на терминале и клиент сразу подойдет к кассе.

GET /v5/stores/{storeId}/orders_exchanger?since={since}&orderId={orderId}&excludeOwn={false|true}

Описание⚓︎

Получить информацию по заказам аптеки storeId по протоколу v5

Параметры запроса⚓︎

Имя Тип Обяз. Описание
storeId GUID Идентификатор аптеки по справочнику АСНА
since datetime Дата, с которой необходимо получить изменения (не включительно) в формате ISO8601
orderId GUID Уникальный код заказа
excludeOwn bool Исключать или не исключать собственные изменения, по умолчанию true, т.е. при запросе изменений с какой-либо даты, вы получите в ответ только изменения, созданные сайтом, иначе получите назад и созданные аптекой статусы. Только для тестирования можно его выставлять в false.

Заголовки запроса⚓︎

Имя Описание
Authorization Bearer token
Accept application/json или application/x-json-full

Пример запроса⚓︎

1
2
3
4
5
GET /v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/orders_exchanger?since=2017-04-20T02:29:31.104986%2B00:00 HTTP/1.1
Host: api.asna.cloud
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Content-Type: application/json
Cache-Control: no-cache

Успешный ответ⚓︎

HTTP cтатус Значение
200 ОК. Успешный запрос. Тело запроса содержит объект заказов

Пример ответа⚓︎

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
{
  "headers": [
    {
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "issuerId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "src": "desktop",
      "num": "1",
      "date": "2017-05-23T02:52:50.9461641+00:00",
      "name": "Dorothy",
      "mPhone": "(713)576-1427",
      "payType": "payment",
      "payTypeId": 7,
      "dCard": "4005519200000004",
      "ae": 1,
      "unionId": "e5a5a7ca-0293-4318-b942-9b9328cccb73",
      "ts": "2017-05-23T02:52:51.9461641+00:00",
      "delivery": true,
      "deliveryInfo": "{\"address\":\"ул.Докукина, 15\"}"
    },
    {
      "orderId": "07e09592-937f-4a86-ad62-3c81118bc808",
      "storeId": "28082368-ef51-441a-b627-c53ea82355ec",
      "issuerId": "28082368-ef51-441a-b627-c53ea82355ec",
      "src": "terminal",
      "num": "4",
      "date": "2017-05-23T10:47:39.9011267+00:00",
      "name": "Denis",
      "mPhone": "(664)904-8190",
      "payType": "deposit",
      "payTypeId": 2,
      "dCard": "4009348888881881",
      "ae": 1,
      "unionId": "3075c830-0b90-4c3c-a6c6-192a5b0f78e6",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ],
  "rows": [
    {
      "rowId": "ace19789-ae52-484d-b8b5-e8e3089c4b02",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "rowType": 1,
      "prtId": "f00279e9-662a-45bd-942c-74ddefc2496c",
      "nnt": 76688,
      "qnt": 8,
      "prc": 219.76,
      "prcDsc": 219.76,
      "dscUnion": "EliLilly",
      "dtn": 1.88,
      "prcLoyal": 219.76,
      "prcOptNds": 219.76,
      "supInn": "48141893",
      "dlvDate": "2017-05-22T09:54:34.584838+00:00",
      "qntUnrsv": 2,
      "prcFix": 650.52,
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    },
    {
      "rowId": "2127300c-f40f-4f97-8324-c45d44901ac3",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "rowType": 1,
      "prtId": "564b3d19-e716-415d-8af6-e669ab97fd69",
      "nnt": 63475,
      "qnt": 3,
      "prc": 700.2,
      "prcDsc": 700.2,
      "dscUnion": "Pfizer",
      "dtn": 5.92,
      "prcLoyal": 700.2,
      "prcOptNds": 700.2,
      "supInn": "73306247",
      "dlvDate": "2017-05-22T19:46:37.6307193+00:00",
      "qntUnrsv": 1,
      "prcFix": 736.74,
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ],
  "statuses": [
    {
      "statusId": "0dea195c-3222-4751-bdde-021806fb8dfc",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "date": "2017-05-23T00:17:09.8996805+00:00",
      "status": 100,
      "rcDate": "2017-05-23T16:55:50.9970809+00:00",
      "cmnt": "no comments",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    },
    {
      "statusId": "8705f990-9443-4960-8cc7-d0dc31d2cde6",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "rowId": "2127300c-f40f-4f97-8324-c45d44901ac3",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "date": "2017-05-22T21:52:24.2957718+00:00",
      "status": 102,
      "cmnt": "no comments",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ]
}

Объект ответа⚓︎

Имя Тип Описание
headers Header[] Массив заголовков заказов
rows Row[] Массив строк заказов
statuses Status[] Массив статусов заказов

Объект ответа Header(заголовок)⚓︎

Имя Тип Описание
orderId GUID Уникальный код заказа. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP)
storeId GUID Уникальный код аптеки, на которой сделан заказ
issuerId GUID Уникальный код аптеки, которая выдает заказ (для самовывоза)
src string Источник заказа («desktop», «terminal», «mobile», «cashier» и т.д.). Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP). Cписок источников заказа
num string Номер заказа
date datetime Дата заказа в формате ISO8601 с указанием часового пояса
name string Имя покупателя
mPhone string Номер телефона
payType string Тип оплаты
payTypeId int ИД типа оплаты по справочнику АСНА
dCard string Дисконтная карта
ae int Признак АСНА-Экономия (0 - нет, 1 - да). Заказ с признаком АСНА-Экономия не должен редактироваться через клиентское ПО
unionId GUID ИД совместной покупки
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления заголовка сервисом АСНА(в нулевом часовом поясе)
delivery bool Признак доставки (true - необходима доставка, false - самовывоз)
deliveryInfo string Информация о доставке. Содержит строку в виде экранированного JSON, который при необходимости, можно распарсить и получить данные. Поля addr - адрес доставки, cmnt - комментарий покупателя, type - тип доставки, prc - стоимость доставки, email - почта покупателя

Пример заполнения поля deliveryInfo⚓︎

1
2
3
4
5
6
7
8
{
  "addr": "Докукина 16 стр.1",
  "cmnt": "Домофон 33333",
  "type": "Курьером",
  "prc": 200,
  "email": "asna@asna.ru",
  "phone": "89126765544"
}

Объект ответа Row(строка заказа)⚓︎

Имя Тип Описание
rowId GUID Уникальный код строки заказа
orderId GUID Уникальный код заказа
rowType int Тип строки (0 - наличие, 1 - предзаказ)
prtId string Уникальный код партии. На данный момент не возвращается
nnt int Код товара по справочнику АСНА
qnt float Количество в заказе
prc decimal Цена товара в момент заказа
prcDsc decimal Цена товара, обещанная покупателю в момент оформления заказа, с учетом наценки или скидки (АСНА-Экономия,акции производителей, промо-кодов и т.д.)
dscUnion string Признак дисконта
dtn decimal Дотация для единицы товара. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP)
prcLoyal decimal Цена реализации со скидкой по программам Pfizer, AstraZeneca и Eli Lilly
prcOptNds decimal Цена поставки
supInn string ИНН поставщика
dlvDate datetime Дата поставки в формате ISO8601
qntUnrsv float Количество незарезервированного товара
prcFix decimal Фиксированная цена
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления строки сервисом АСНА (в нулевом часовом поясе).
mark int Признак расчета цены реализации с возмещаемой скидкой от производителей, ООО "АСНА" (промо-коды). 1 - Запрещается применение по строке заказа скидки производителей на стороне аптечного ПО, 0(null) - разрешены дополнительные скидки производителей на стороне аптечного ПО

ВАЖНО

Производители при расчёте бюджетов возмещения контролируют примененные скидки на основании отчётов, предоставленных как аптечными сетями, так и АСНА. Обработка признака Mark на стороне аптечного ПО позволит избежать:

  1. Двойного применения скидки - скидка по заказам asna.ru компенсируется в аптечную сеть от производителя через АСНА.
  2. Ошибочной выгрузки транзакций по заказам asna.ru производителю со стороны аптечной сети - скидки по подобным транзакциям со стороны производителя компенсировать не будут.

Объект ответа Status(строка статуса)⚓︎

Имя Тип Описание
statusId GUID Уникальный код статуса
orderId GUID Уникальный код заказа
rowId GUID Уникальный код строки заказа (заполняется только если статус на строку)
storeId GUID Уникальный код аптеки
date datetime Дата и время статуса
status int Код статуса
rcDate datetime Дата и время сброса резерва в формате ISO8601. Поле заполняется только для 100, 108 ,104 статусов заказа
cmnt string Комментарий
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления статуса сервисом АСНА(в нулевом часовом поясе)

ВНИМАНИЕ!

Поле ts в заголовках, строках и статусах заказа имеет чрезвычайно важное значение для корректного получения изменений по заказам. При запросе изменений по заказам, всегда задавайте параметр since следующего запроса равным максимальному значению поля ts из всех трех массивов(заголовки, строки, статусы) предыдущего запроса. Не используйте локальное время на ваших серверах в качестве параметра since.

Неуспешный ответ⚓︎

HTTP статус Значение
400 Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа.
401 Unauthorized. Токен авторизации неверный или истек срок его действия
403 Forbidden. У вас нет прав на выполнение данной операции
429 Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени
500 Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

Список источников заказа⚓︎

Ид Источник Описание
1 asna.ru Заказ от сервисов asna.ru

Получение информации о заказах сети ⚓︎

Клиенты, которые работают с сайтом АСНА, могут получать через API информацию о новых заказах, сформированных на сайте, а также информацию об изменении статусов этих заказов по сети.

GET /v5/nets/{storeId}/orders_exchanger?since={since}&excludeOwn={false|true}

Описание⚓︎

Получить информацию по заказам сети, в которую входит аптека storeId по протоколу v5

Параметры запроса⚓︎

Имя Тип Обяз. Описание
storeId GUID Идентификатор аптеки по справочнику АСНА
since datetime Дата, с которой необходимо получить изменения (не включительно) в формате ISO8601
excludeOwn bool Исключать или не исключать собственные изменения, по умолчанию true, т.е. при запросе изменений с какой-либо даты, вы получите в ответ только изменения, созданные сайтом, иначе получите назад и созданные аптекой статусы. Только для тестирования можно его выставлять в false.

Заголовки запроса⚓︎

Имя Описание
Authorization Bearer token
Accept application/json или application/x-json-full

Пример запроса⚓︎

1
2
3
4
5
GET /v5/nets/BC164E55-B612-4A04-800B-34CCF10F6858/orders_exchanger?since=2017-04-20T02:29:31.104986%2B00:00 HTTP/1.1
Host: api.asna.cloud
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Content-Type: application/json
Cache-Control: no-cache

Успешный ответ⚓︎

HTTP cтатус Значение
200 ОК. Успешный запрос. Тело запроса содержит объект заказов

Пример ответа⚓︎

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
{
  "headers": [
    {
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "issuerId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "src": "desktop",
      "num": "1",
      "date": "2017-05-23T02:52:50.9461641+00:00",
      "name": "Dorothy",
      "mPhone": "(713)576-1427",
      "payType": "payment",
      "payTypeId": 7,
      "dCard": "4005519200000004",
      "ae": 1,
      "unionId": "e5a5a7ca-0293-4318-b942-9b9328cccb73",
      "ts": "2017-05-23T02:52:51.9461641+00:00",
      "delivery": true,
      "deliveryInfo": "{\"address\":\"ул.Докукина, 15\"}"
    },
    {
      "orderId": "07e09592-937f-4a86-ad62-3c81118bc808",
      "storeId": "28082368-ef51-441a-b627-c53ea82355ec",
      "issuerId": "28082368-ef51-441a-b627-c53ea82355ec",
      "src": "terminal",
      "num": "4",
      "date": "2017-05-23T10:47:39.9011267+00:00",
      "name": "Denis",
      "mPhone": "(664)904-8190",
      "payType": "deposit",
      "payTypeId": 2,
      "dCard": "4009348888881881",
      "ae": 1,
      "unionId": "3075c830-0b90-4c3c-a6c6-192a5b0f78e6",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ],
  "rows": [
    {
      "rowId": "ace19789-ae52-484d-b8b5-e8e3089c4b02",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "rowType": 1,
      "prtId": "f00279e9-662a-45bd-942c-74ddefc2496c",
      "nnt": 76688,
      "qnt": 8,
      "prc": 219.76,
      "prcDsc": 219.76,
      "dscUnion": "EliLilly",
      "dtn": 1.88,
      "prcLoyal": 219.76,
      "prcOptNds": 219.76,
      "supInn": "48141893",
      "dlvDate": "2017-05-22T09:54:34.584838+00:00",
      "qntUnrsv": 2,
      "prcFix": 650.52,
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    },
    {
      "rowId": "2127300c-f40f-4f97-8324-c45d44901ac3",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "rowType": 1,
      "prtId": "564b3d19-e716-415d-8af6-e669ab97fd69",
      "nnt": 63475,
      "qnt": 3,
      "prc": 700.2,
      "prcDsc": 700.2,
      "dscUnion": "Pfizer",
      "dtn": 5.92,
      "prcLoyal": 700.2,
      "prcOptNds": 700.2,
      "supInn": "73306247",
      "dlvDate": "2017-05-22T19:46:37.6307193+00:00",
      "qntUnrsv": 1,
      "prcFix": 736.74,
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ],
  "statuses": [
    {
      "statusId": "0dea195c-3222-4751-bdde-021806fb8dfc",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "date": "2017-05-23T00:17:09.8996805+00:00",
      "status": 100,
      "rcDate": "2017-05-23T16:55:50.9970809+00:00",
      "cmnt": "no comments",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    },
    {
      "statusId": "8705f990-9443-4960-8cc7-d0dc31d2cde6",
      "orderId": "ad392db0-53e0-4e46-b797-ebf1bc531241",
      "rowId": "2127300c-f40f-4f97-8324-c45d44901ac3",
      "storeId": "383426fd-ab3a-4139-9845-9a880a8f69c7",
      "date": "2017-05-22T21:52:24.2957718+00:00",
      "status": 102,
      "cmnt": "no comments",
      "ts": "2017-05-23T02:52:51.9461641+00:00"
    }
  ]
}

Объект ответа⚓︎

Имя Тип Описание
headers Header[] Массив заголовков заказов
rows Row[] Массив строк заказов
statuses Status[] Массив статусов заказов

Объект ответа Header(заголовок)⚓︎

Имя Тип Описание
orderId GUID Уникальный код заказа. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP)
storeId GUID Уникальный код аптеки, на которой сделан заказ
issuerId GUID Уникальный код аптеки, которая выдает заказ (для самовывоза)
src string Источник заказа («desktop», «terminal», «mobile», «cashier» и т.д.). Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP). Cписок источников заказа
num string Номер заказа
date datetime Дата заказа в формате ISO8601 с указанием часового пояса
name string Имя покупателя
mPhone string Номер телефона
payType string Тип оплаты
payTypeId int ИД типа оплаты по справочнику АСНА
dCard string Дисконтная карта
ae int Признак АСНА-Экономия (0 - нет, 1 - да). Заказ с признаком АСНА-Экономия не должен редактироваться через клиентское ПО
unionId GUID ИД совместной покупки
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления заголовка сервисом АСНА(в нулевом часовом поясе)
delivery bool Признак доставки (true - необходима доставка, false - самовывоз)
deliveryInfo string Информация о доставке. Содержит строку в виде экранированного JSON, который при необходимости, можно распарсить и получить данные. Поля addr - адрес доставки, cmnt - комментарий покупателя, type - тип доставки, prc - стоимость доставки, email - почта покупателя

Пример заполнения поля deliveryInfo⚓︎

1
2
3
4
5
6
7
8
{
  "addr": "Докукина 16 стр.1",
  "cmnt": "Домофон 33333",
  "type": "Курьером",
  "prc": 200,
  "email": "asna@asna.ru",
  "phone": "89126765544"
}

Объект ответа Row(строка заказа)⚓︎

Имя Тип Описание
rowId GUID Уникальный код строки заказа
orderId GUID Уникальный код заказа
storeId GUID Уникальный код аптеки, на которой сделан заказ
rowType int Тип строки (0 - наличие, 1 - предзаказ)
prtId string Уникальный код партии. На данный момент не возвращается
nnt int Код товара по справочнику АСНА
qnt float Количество в заказе
prc decimal Цена товара в момент заказа
prcDsc decimal Цена товара, обещанная покупателю в момент оформления заказа, с учетом наценки или скидки (АСНА-Экономия,акции производителей, промо-коды и т.д.)
dscUnion string Признак дисконта
dtn decimal Дотация для единицы товара. Поле необходимо протаскивать в чек, сформированный по этому заказу, для дальнейшей выгрузки этого поля в хранилище данных АСНА (передача товародвижения через FTP)
prcLoyal decimal Цена реализации со скидкой по программам Pfizer, AstraZeneca и Eli Lilly
prcOptNds decimal Цена поставки
supInn string ИНН поставщика
dlvDate datetime Дата поставки в формате ISO8601
qntUnrsv float Количество незарезервированного товара
prcFix decimal Фиксированная цена
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления строки сервисом АСНА (в нулевом часовом поясе).
mark int Признак расчета цены реализации с возмещаемой скидкой от производителей, ООО "АСНА" (промо-коды). 1 - Запрещается применение по строке заказа скидки производителей на стороне аптечного ПО, 0(null) - разрешены дополнитель=ные скидки производителей на стороне аптечного ПО

ВАЖНО

Производители при расчёте бюджетов возмещения контролируют примененные скидки на основании отчётов, предоставленных как аптечными сетями, так и АСНА. Обработка признака Mark на стороне аптечного ПО позволит избежать:

  1. Двойного применения скидки - скидка по заказам asna.ru компенсируется в аптечную сеть от производителя через АСНА.
  2. Ошибочной выгрузки транзакций по заказам asna.ru производителю со стороны аптечной сети - скидки по подобным транзакциям со стороны производителя компенсировать не будут.

Объект ответа Status(строка статуса)⚓︎

Имя Тип Описание
statusId GUID Уникальный код статуса
orderId GUID Уникальный код заказа
rowId GUID Уникальный код строки заказа (заполняется только если статус на строку)
storeId GUID Уникальный код аптеки
date datetime Дата и время статуса
status int Код статуса
rcDate datetime Дата и время сброса резерва в формате ISO8601. Поле заполняется только для 100, 108 ,104 статусов заказа
cmnt string Комментарий
ts datetime Отметка времени, в формате ISO8601. Представляет собой дату и время создания или обновления статуса сервисом АСНА(в нулевом часовом поясе)

ВНИМАНИЕ!

Поле ts в заголовках, строках и статусах заказа имеет чрезвычайно важное значение для корректного получения изменений по заказам. При запросе изменений по заказам, всегда задавайте параметр since следующего запроса равным максимальному значению поля ts из всех трех массивов(заголовки, строки, статусы) предыдущего запроса. Не используйте локальное время на ваших серверах в качестве параметра since.

Неуспешный ответ⚓︎

HTTP статус Значение
400 Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа.
401 Unauthorized. Токен авторизации неверный или истек срок его действия
403 Forbidden. У вас нет прав на выполнение данной операции
429 Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени
500 Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

Список источников заказа⚓︎

Ид Источник Описание
1 asna.ru Заказ от сервисов asna.ru

Отправка информации о заказах⚓︎

Клиенты, которые работают с заказами с сайта АСНА, должны передавать информацию об изменениях в заказах, произошедших в аптеке, а также информацию о статусе заказов.

PUT /v5/stores/{storeId}/orders_exchanger

Описание⚓︎

Передать информацию по заказам аптеки storeId по протоколу v5

Параметры запроса⚓︎

Имя Тип Обяз. Описание
storeId GUID Идентификатор аптеки по справочнику АСНА

Заголовки запроса⚓︎

Имя Описание
Authorization Bearer token
Content-Type application/json

Тело запроса⚓︎

Объект запроса⚓︎

Имя Тип Обяз. Описание
rows Row[] Массив строк заказов
statuses Status[] Массив статусов заказов

Объект запроса Row(строка заказа)⚓︎

Имя Тип Обяз. Описание
rowId GUID Уникальный код строки заказа
qntUnrsv float Количество незарезервированного товара

Объект запроса Status(статус заказа)⚓︎

Имя Тип Обяз. Описание
statusId GUID Уникальный код статуса. Генерируется клиентским ПО
orderId GUID Уникальный код заказа. Берется из обрабатываемого заказа
rowId GUID Уникальный код строки заказа (заполняется только если статус на строку). Берется из обрабатываемого заказа
storeId GUID Уникальный код аптеки. Берется из обрабатываемого заказа
date datetime Дата и время создания статуса в формате ISO8601 с указанием часового пояса
status int Код статуса
rcDate datetime Дата и время сброса резерва в формате ISO8601 с указанием часового пояса. Поле заполняется только для 204 статуса заказа
cmnt string Комментарий

Ссылка на JSON схему для валидации и тестирования

Пример запроса

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
PUT /v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/orders_exchanger HTTP/1.1
Host: api.asna.cloud
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Content-Type: application/json
Cache-Control: no-cache

{
    "rows": [
        {
        "rowId": "e10b7e67-b6ef-4eb2-8c73-efbc556f77eb",
        "qntUnrsv": 9
        },
        {
        "rowId": "de0fb428-1a9d-4635-9e8d-67577348869b",
        "qntUnrsv": 2
        }
    ],
    "statuses": [
        {
        "statusId": "0711c000-f54a-4854-877f-e8b8b9e5b6d1",
        "orderId": "903a9021-35a8-402e-a037-17e64f066aeb",
        "storeId": "9bebe7c1-142f-4474-ab11-45575dafbf8b",
        "date": "2017-05-22T16:55:50.9970809+00:00",
        "rcDate": "2017-05-23T16:55:50.9970809+00:00",
        "status": 204
        },
        {
        "statusId": "4d25f7c6-9299-4eb2-a512-407b3936b3f9",
        "orderId": "903a9021-35a8-402e-a037-17e64f066aeb",
        "storeId": "b3ecd8d0-665c-4057-a103-9cc3a2cb72c2",
        "date": "2017-05-23T01:16:07.3800902+00:00",
        "status": 200
        }
    ]
}

Успешный ответ⚓︎

HTTP cтатус Значение
201 Created. Данные успешно записаны

Пример ответа⚓︎

1
HTTP/1.1 201 Created

Неуспешный ответ⚓︎

HTTP статус Значение
400 Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа.
401 Unauthorized. Токен авторизации неверный или истек срок его действия
403 Forbidden. У вас нет прав на выполнение данной операции
429 Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени
500 Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

Бизнес-процесс работы с заказами Пульс ⚓︎

Требования к обработке электронных накладных интернет заказов от поставщика ФК Пульс⚓︎

По каждому интернет заказу поставщик выгружает отдельную электронную накладную.

В текущую структуру электронной накладной для аптеки добавляются новые поля:

  • PRICER - розничная цена, включающая все налоги;
  • IDOC - оригинальный номер интернет заказа;
  • ONLINE - признак интернет-заказ, возможные значения: 1 – интернет-заказ; 0 - обычная накладная;

Если в накладной поля pricer и idoc заполнены значениями или поле online = 1, то данная накладная сформирована и выгружена в аптеку по интернет заказу покупателя.

В аптечном ПО необходимо настроить прием и обработку электронных накладных интернет заказов от поставщика ФУ Пульс по аналогии обработки накладных по заказам apteka.ru и zdravcity.ru.

Минимальные требования к ПО:

  • После прихода товара с розничными ценами по электронной накладной ФК Пульс, необходимо забронировать товар(исключить из свободной продажи, отложенный чек, чек резерва и т.п..);
  • Сотрудник аптеки(первостольник) должен иметь возможность по номеру заказа(IDOC) найти/скопировать содержимое оприходованной накладной интернет заказа в чек.

Дополнительные возможности:

В накладных интернет заказов от поставщика ФК Пульс выгружается информация о покупателе (ФИО, телефон и email):

  1. В агрегированном виде в поле: ECOM_BUYER
  2. В разагрегированном виде в полях:

  3. ECOM_PERS – ФИО покупателя

  4. ECOM_PHONE – телефон покупателя
  5. ECOM_MAIL – email покупателя

Каждый заказ собирается на складе поставщика в отдельный пакет/коробку и маркируется этикеткой. Скачать пример этикетки.

На этикетке присутствует штрихкод, который содержит номер заказа(IDOC) дополненный лидирующими нулями слева до 12 символов + контрольный символ.

Данная информация может быть использована в аптечном ПО, для удобства обработки заказов сотрудником аптеки – поиск заказ по ФИО, номеру телефона, email покупателя, через сканирование ШК.

Если аптека получает накладные от поставщика ФК Пульс через сервисы сводных прайс-листов PharmSM и т.п.., то для обработки интернет заказов необходимо настроить прямое получение электронных накладных от поставщика.

Для этого необходимо согласовать с поставщиком:

  • Способ получение электронных накладных: Email или FTP, передать адрес для доставки электронных накладных.
  • Структуру файла электронной накладной: шаблон поставщика(Скачать) или шаблон аптечного ПО(передать требования к файлу накладной).

Требования к доработке файловой выгрузки в АСНА⚓︎

Требования к доработке файловой выгрузки в АСНА, согласно Регламенту информационного обмена

Доработать логику формирования файла "Данные о товародвижении" по приходным и расходным документам интернет заказов с доставкой со склада Пульс:

Название Тип Описание
5) Тип документа Целочисленный 15 - Приход сторонний интернет-заказ, 16 - Продажи сторонний интернет-заказ, 2 – продажа через ККМ
26) Уникальный код заказа Строковый(40) Уникальный внутренний код заказа. Данное поле заполняется только для расходных документов типа – 2 (Чеки), документов типа 15 (Приход сторонний интернет-заказ) и 16 (Продажи сторонний интернет-заказ) В данном поле указывать оригинальный номер заказа из электронной накладной поставщика: поле IDOC Пример: "5093447"
27) Источник заказа Строковый(40) Данное поле заполняется только для расходных документов типа – 2 (Чеки), 16 (Продажи сторонний интернет-заказ) и для приходных документов типа – 15 (Приход сторонний интернет-заказ). В данном поле указывать "puls.asna.ru"

Требования к интеграции с сайтом asna.ru⚓︎

Для работы с заказами Пульс необходимо провести упрощенную интеграцию с сайтом asna.ru, если ваше ПО не интегрированно, а именно:

  1. Авторизация (см. Авторизация в АСНА REST API)
  2. Реализовать метод, описанный ниже (Отправка информации о выкупленных заказах)

Если ваше ПО уже интегрированно с сайтом asna.ru, то п.1 из списка выше выполнять не надо. Отправка информации о выкупленных заказах может производиться одним из двух способов.

  • Это можно делать при пробитии чека с заказом на кассе, но обязательно способом, не блокирующим работу кассы, например в отдельном потоке.
  • Информацию о выкупленных заказах можно передавать и по расписанию, например каждые 10-15 минут.

Обязательно наличие retry-логики, попытки отправить информацию должны продолжаться до тех пор, пока не будет получен статус успешного завершения операции, если вы получали от api транзиентную(временную) ошибку.

Отправка информации о выкупленных заказах Пульс⚓︎

Клиенты, которые работают с заказами Пульс на сайте asna.ru, должны передавать на сайт информацию о выкупленных в аптеке заказах.

POST /v5/stores/{storeId}/redeemed_orders_pulse

Описание⚓︎

Передать информацию по выкупленным заказам Пульс аптеки storeId по протоколу v5

Параметры запроса⚓︎

Имя Тип Обяз. Описание
storeId GUID Идентификатор аптеки по справочнику АСНА

Заголовки запроса⚓︎

Имя Описание
Authorization Bearer token
Content-Type application/json

Тело запроса⚓︎

Массив строк в формате JSON, где каждая строка - номер заказа Пульс, полученный в накладной.

Пример запроса⚓︎

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
POST /v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/redeemed_orders_pulse HTTP/1.1
Host: api.asna.cloud
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Content-Type: application/json
Cache-Control: no-cache

[
    "1674849533",
    "6984849534"
]

Успешный ответ⚓︎

HTTP cтатус Значение
201 Created. Данные успешно записаны

Пример ответа⚓︎

1
HTTP/1.1 201 Created

Неуспешный ответ⚓︎

HTTP статус Значение
400 Bad Request. Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. В случае если было отправлено несколько номеров заказов и не все заказы найдены в БД, то вернется этот статус со списком заказов, которые не были найдены в БД, в теле ответа. Найденные заказы при этом будут записаны. См. пример ниже.
401 Unauthorized. Токен авторизации неверный или истек срок его действия
403 Forbidden. У вас нет прав на выполнение данной операции
429 Too Many Requests. Слишком много запросов с одного IP адреса за промежуток времени
500 Internal Server Error. Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

Пример ответа, если заказ не найден⚓︎

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "statusCode": 400,
  "isError": true,
  "isTransient": false,
  "exceptionMessage": "Please correct the specified validation errors",
  "referenceDocumentLink": "https://api.asna.cloud/docs/v5/validation.html",
  "validationErrors": [
    {
      "field": "4849534",
      "message": "Order not found"
    }
  ]
}

Последнее обновление: 17 августа 2021 г. 11:14:40
Созданный: 5 августа 2021 г. 12:36:05

Комментарии

Back to top