Первичная авторизация осуществляется посредством bearer токена.
Для получения токена необходимо обратиться с POST запросом по адресу: https://api.f3bus.ru/user/auth
передав данные в формате JSON
{
"login": "demo",
"password": "demo"
}
Пример для программы "Postman"
Активация департаментов выполняется для того, чтобы они были доступны для приема данных, а также для отправки заказа.
По не активированным департаментам заказы передаваться не будут!
Для получения списка доступных департаментов, необходимо выполнить запрос(ы):
GET /User/Departments - показать все доступные интегратору департаменты, включая активированные.
GET /User/Departments/unactivated - показать доступные интегратору, но не активированные департаменты.
Описание полей:
department - департамент аптеки
id - Уникальный код департамента
name - Наименование
address – Адрес подразделения
inn – ИНН
kpp – КПП
rv - версия последнего полученного объекта из предыдущего запроса
created - дата создания записи
source - источник данных
id - уникальный код источника данных
name - название источника
email – электронная почта
phone – телефон
address – адрес
isCentral – флаг ЦО аптеки. Заказы не принимаются в центральный офис, только в периферийную аптеку
isActivated - флаг активации департамента
\
Далее для активации/деактивации выполнить запрос:
POST /user/departments/activate
POST /user/departments/deactivate
Активация департамента возможна только по одному источнику!
В теле запроса перечислить департаменты и источник данных.
[{"depId":"0967CCEA-51C4-4968-AE34-41DE36C54A45", "sourceId":"129564"},...]
Единый справочник (товары, инструкции, фотографии)
Единый справочник включает в себя 3 сущности: товары, инструкции и фотографии.
Для каждой сущности существует 2 способа получения данных - по версии строки (для регулярного обновления данных, пачками) и поштучно (для получения точечной информации, например - получить атрибуты по конкретному товару ЕС).
Поштучные методы необходимы для выполнения редких задач загрузки конкретного товара, инструкции или фотографии, для регулярного обновления необходимо использовать методы с параметром {rv} (версия строки).
Для обеспечения корректной работы с API существуют ограничения на количество вызовов каждого метода ЕС в сутки - 100 раз.
Методы:
GET /EsAdditional/goods/{rv} - Единый справочник товаров (по версии строки).
GET /EsAdditional/goods/{id} - Единый справочник товаров (по одной позиции).
GET /EsAdditional/instructions/{rv} - Единый справочник инструкций товаров (по версии строки).
GET /EsAdditional/instructions/{id} - Единый справочник инструкций товаров (по одной позиции).
GET /EsAdditional/photos/{rv} - Единый справочник фотографий товаров (по версии строки).
GET /EsAdditional/photos/{id} - Единый справочник фотографий товаров (для одной позиции товара).
GET /Goods/{depId} (уникальный код департамента)
Параметры:
rv - версия последнего полученного объекта из предыдущего запроса
Описание полей:
refId – уникальный идентификатор товара по справочнику F3Bus
code – уникальный код товара по справочнику аптеки
name – наименование товара
producer – производитель
country - страна
barcodes – штрихкод товара
GoodsGroupCodes – массив кодов групп товаров в кодировке аптеки, в которые входит номенклатурная позиция
rv - версия последнего полученного объекта из предыдущего запроса
created - дата создания записи
GET /GoodsGroup
Параметры:
sourceId - идентификатор установки, для которой нужно выгрузить справочник групп товаров аптеки. Обязательный параметр!
rv - версия последнего полученного объекта из предыдущего запроса
Описание полей:
groupId – уникальный идентификатор группы товаров в рамках аптеки (передается вместе с номенклатурой аптеки)
parentGroupId – уникальный идентификатор родительской группы товаров в рамках аптеки
esGroupGuid – уникальный идентификатор группы товара по Единому справочнику (если он используется в аптеке)
name – название группы товара
created - дата создания записи
deletedDate - дата удаления группы товара в аптеке
rv - версия последнего полученного объекта из предыдущего запроса
GET /Departments
Параметры:
rv - версия последнего полученного объекта из предыдущего запроса
Описание полей:
id - Уникальный код департамента
name - Наименование
address – Адрес подразделения
inn – ИНН
kpp – КПП
rv - версия последнего полученного объекта из предыдущего запроса
created - дата создания записи
GET /Receipts
Параметры:
rv - версия последнего чека, полученного в предыдущей выгрузке. Будут выгружены данные после этого чека. Если не указано, данные будут перевыгружены полностью.
depId - код департамента, если не указан - используются все, доступные интегратору.
date - дата чека, если указана - выдаются все чеки, начиная с этой даты.
Описание полей:
id - id чека
chequeType - тип чека (продажа, возврат)
date - дата выдачи чека
sessNum - номер кассовой смены
cashierId - идентификатор кассира
depId - уникальный код департамента
items - список позиций чека
goodsCode - код товара
qty - количество
totalPriceVAT - Цена продажи с учетом НДС (розничная цена)
bestBefore - Срок годности
rv - версия строки данных
created - дата создания записи
GET /Stocks/{depId} (уникальный код департамента)
Параметры:
rv - версия последнего полученного объекта из предыдущего запроса
Описание полей:
Крайне важно понимать, что ключевое поле у остатков составное, включающее в себя следующие поля:
depId, goodsCode, priceBuy, priceSale, expDate, seriesNum, т.е. сравнивать текущий остаток с вновь полученным через API можно только по этим полям, а все остальные - обновлять.
stockDate - дата остатка
depId - уникальный код департамента
goodsCode - код товара
qty - количество
priceBuy - цена покупки
priceSale - цена продажи
expDate - срок годности
seriesNum - серия ЛС
rv - версия последнего полученного объекта из предыдущего запроса
created - Дата создания
Получение списка интернет-заказов
GET /Orders - для получения всех заказов
GET /Orders/{orderNum} - для получения указанного заказа
GET /Orders/{orderNum}/status - для получения статуса указанного заказа
orderNum - идентификатор заказа в системе интегратора
Параметры:
rv - версия последнего полученного объекта из предыдущего запроса
Описание полей:
agentId - идентификатор агента
id - уникальный идентификатор заказа
num - номер заказа
dep_id - аптечное подразделение, в которое необходимо передать заказ
date - дата заказа
customer - информация по заказчику
name - ФИО клиента
phone - телефон клиента
prepaymentAmount - сумма предоплаты по заказу
paymentAmount - полная сумма заказа
orderStatus - статусы заказа: new, registered, reserved, reservedPartially, cancelled, readyToPickup, completed
comment - комментарий к заказу
items - Список позиций заказа
goodsCode - код товара
qnt - заказанное количество
price - цена
discountPr - скидка в процентах
discountVal - сумма скидки
rv - версия последнего полученного объекта из предыдущего запроса
Статусы:
Шапка заказа { New, Registered, Reserved, ReservedPartially, Cancelled, ReadyToPickup, Completed }
Позиция { Ok, NotEnough, Cancelled }
{
"id": "string",
"num": "string",
"depId": "string",
"date": "2020-04-27T12:27:00",
"customer": {
"name": "string",
"phone": "string"
},
"prepaymentAmount": 0,
"paymentAmount": 0,
"orderStatus": "new",
"comment": "string",
"items": [
{
"goodsCode": "string",
"qnt": 0,
"price": 0,
"discountPr": 0,
"discountVal": 0
}
]
}
Отмена Интернет-заказа, указывается номер заказа и статус
PUT /Orders/{orderNum}/status
orderNum - номер заказа
Пример запроса:
Callback сервис используется для получения событий о смене состояния данных и представляет собой url ресурса со стороны клиента, который будет вызван системой F3BUS.
Для регистрации callback-сервиса необходимо выполнить:
PUT /Settings/Callback/{type}
Передав в теле url:
{
url: "https://your.callback/
}
Параметр type описывает тип регистрируемого callback-сервиса и на данный момент может принимать единственное значение:
orders - получение уведомлений об изменении заказа.
При наступлении события в F3bus, для которого зарегистрированы callback-сервисы, система вызывыет указанный ресурс и передаст сообщение следующего формата:
{
type: "<Тип события>", // Тип, определяющий сущность сообщения
payload: "Сопутствующие данные"
}
Для коллбэка orders, type может принимать значение NewOrderStatus - смена статуса заказа. При этом в payload будет записан идентификатор заказа, у которого сменился статус.
Пример сообщения:
{
type: "NewOrderStatus",
payload: "С27A59B7-1033-528B-B03C-E6C6FD678722"
}
Объем данных получаемых клиентами может быть весьма велик.
Для обеспечения полноты данных у клиента, все данные из шины передаются порциями - не более 1000 позиций за раз.
Для этого используется параметр "RV" - версия последнего полученного объекта из предыдущего запроса.
Значение формируется как TimeStamp(UTC) + случайное число.
Типичный цикл получения данных выглядит так:
- При первом подключении параметр RV должен быть установлен равным нулю
- Клиент получает порцию данных (не более 1000 позиций) и сохраняет у себя значение RV для этой порции данных
- При следующем обращении клиент должен указать параметр RV полученный в предыдущем сеансе.
При этом клиенту будут переданы уже новые данные (не более 1000 позиций) и новое значение RV
- Цикл получения данных необходимо повторять до тех пор пока запрос возвращает хотя бы одну строку данных
Для повторной полной загрузки данных параметр RV необходимо установить равным нулю
Подключение к интернет площадке происходит через отдельный модуль установленный в аптеке. Сотрудник аптеки отправляет запрос на подключение.
Так же подключение можно выполнить по заявке с помощью сервисного специалиста.