Project

General

Profile

Регламент работы для Аптек в режиме Бронирования. (в процессе написания и редактирования)

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

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

Новый заказ

При создании заказа на сайте формируется статус на заголовок с кодом 100. В этом статусе в поле rcDate сайт передает информацию о времени сброса резерва, которое аптечное ПО должно контролировать.
При получении нового заказа, клиентское ПО пытается бронировать все товары по этим строкам, в количестве, которое указано в поле qnt.
Возможны следующие варианты:
Товары полностью зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 200 на заголовок.
Товары полностью не зарезервировались - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 202 на заголовок.
Товары зарезервировались частично - формируется и возвращается новый статус (с новым уникальным идентификатором) с кодом 201 на заголовок, а так же возвращаются строки заказа, по которым не хватило количества в наличии (код строки в поле rowId и незарезервированное количество в поле qntUnrsv.

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

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

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

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

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

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

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

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

Выкуп заказа

При выкупе заказа формируется и возвращается статус с кодом 210.

Статусы заказов

Код Название Описание
100 sented Новый заказ. Формируется на заголовок
200 accepted Заказ принят аптекой. Формируется на заголовок
201 partiallyaccepted Заказ частично принят аптекой. Формируется на заголовок
202 disbanded Заказ расформирован(вышел срок резерва, нет в наличии). Формируется на заголовок
204 ChangeReservationTime Изменение времени бронирования. Формируется на заголовок
210 Purchased Заказ выкуплен. Формируется на заголовок
213 packed Заказ собран (укомплектован). Формируется на заголовок
214 packing Заказ комплектуется. Формируется на заголовок

Авторизация

YaVApteke REST API поддерживает авторизацию на основе JWT токенов.

Для обращения к любому из ресурсов YaVApteke REST API требуется наличие JWT токена в заголовке Authorization HTTP запроса, с типом Bearer. При отсутствии токена API вернет 401 статус (Unauthorized), этот же статус вернется в случае, если время действия токена закончилось (токен выдается на определенное время). В обоих случаях нужно запросить новый токен.

Получение токена

Для выполнения запросов к API, необходимо получить JWT токен от службы единой авторизации облачных сервисов YaVApteke , расположенной по адресу https://*************
POST /connect/token

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

Имя Обяз. Описание
client_id Да Идентификатор аптеки по справочнику YaVApteke
client_secret Да Пароль аптеки, полученный от службы техподдержки или клиентского маркетинга
grant_type Да Тип авторизации. В данном случае всегда client_credentials

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

Имя Описание
Content-Type Должно иметь значение application/x-www-form-urlencoded

Ответы

HTTP cтатус Значение
200 ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON с информацией о выданном токене.
400 Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. Например, при отсутствии аптеки с таким идентификатором выдается invalid_client
500 Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

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

Запрос на получение информации о заказах необходимо производит не чаще чем 1 раз в 10 минут и не реже чем 1 раз в 30 минут.

Запрос

GET /stores/{storeId}/orders_exchanger?since={since}

Описание

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

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

Имя Тип Обяз. Описание
storeId GUID Да Идентификатор аптеки по справочнику YaVApteke
since datetime Дата, с которой необходимо получить изменения (не включительно) в формате ISO8601

Заголовок запроса

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

Ответы

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

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

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

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

Имя Тип Описание
orderId GUID Уникальный код заказа.
storeId GUID Уникальный код аптеки, на которой сделан заказ.
num string Номер заказа
date datetime Дата заказа в формате ISO8601 с указанием часового пояса
name string Имя покупателя
mPhone string Номер телефона
dCard string Дисконтная карта
delivery bool Признак доставки (true - необходима доставка, false - самовывоз)
status int Код статуса
rcDate datetime Дата и время сброса резерва в формате ISO8601.

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

Имя Тип Описание
rowId GUID Уникальный код строки заказа
orderId GUID Уникальный код заказа
CodeX int Уникальный идентификатор предложения
code int Код товара в системе контрагента(указывается в прайс-листе выгружаемом на справку, в поле "code")
codecr int Код производителя в системе контрагента(указывается в прайс-листе выгружаемом на справку, в поле "codecr")
qnt float Количество в заказе
ean13 char Штрих-код
Junk bool Уценка
Await bool Ожидается
Series char Серия
Period char Срок годности
prc decimal Цена товара в момент заказа
prcOptNds decimal Цена поставки
supInn string ИНН поставщика

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

Клиенты, которые работают с заказами с сайта YaVApteke, должны передавать информацию об изменениях в заказах, произошедших в аптеке, а также информацию о статусе заказов.
PUT /stores/{storeId}/orders_exchanger

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

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

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

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

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

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

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

Имя Тип Описание
orderId GUID Уникальный код заказа.
num string Номер заказа
status int Код статуса

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

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