Outofbox.54-FZ : Протокол обмена
Протокол обмена представляет собой REST API. Данный подход позволяет интегрировать решение практически в любую систему, где есть возможность обмена данными по HTTP.
После включения устройства в вашу локальную сеть, рекомендуется выдать ему статический IP адрес и выдать локальное DNS имя (если это возможно).
Система является асинхронной, нет гарантии, что чек будет отпечатан немедленно, так как в один момент времени кассовый аппарат можем работать только с одним чеком. Все чеки попадают в очередь на печать и будут отпечатаны по принципу FIFO (first in first out). Также система отдает более высокий приоритет чекам от кассира, чтобы не задерживать покупателя. Онлайн чеки идут с меньшим приоритетом. Весь процесс отслеживания описан в соответствующем разделе.
Печать чека продажи
POST |
/_api/receipts |
---|
В тело запроса надо передать json объект следующего вида:
{ "items": [{ "name": "Чипсы Lays", "price": 100, "quantity": 1 }, { "name": "Сухарики", "price": 50, "quantity": 2 }], "payments": [{ "type": 0, "amount": 200 }] }
В случае успешного приема чека, будет выдан HTTP код ответа 200, а в теле документа будет json объект чека:
{ "receipt": { "uuid": <UUID>, "status": "PENDING", ... } }
uuid является уникальным идентификатором чека и этот идентификатор можно использовать для отслеживания статуса печати чека.
Список всех доступных параметров с их описанием:
{ "type": "sell", "items": [ { "type": "service" "name": "Доставка", "price": 100, "quantity": 1, "pay_type": "advance" }, { "name": "Чипсы Lays", "price": 100, "quantity": 1 }, { "name": "Сухарики", "price": 50, "quantity": 2, "supplier_inn": "123456789", "supplier": { "name": "ООО Поставщик", "phone": "+123456789" }, "agent": { "name": "ООО Агент", "INN": "3644065397", "address": "Тестовый адреса 16, офис 3", "phones": [ "+123456789" ] } } ], "payments": [{ "type": 0, "amount": 200 }], "email": "client@mail.ru", "print": true, "caption": "Заказ #123456", "barcode": "V123456", "autoDelete": false, "agent_types": [ "payingAgent", "bankPayingAgent" ], "tax_system": "patent" }
Описание:
Параметр | Описание | Тип данных | Обязательно |
---|---|---|---|
type |
Вид чека sell – продажа return – возврат продажи |
String enum | Нет |
items | Массив список позиций чека с указанием наименование, цены за единицу и общего количества. | Array | Да |
payments |
Массив оплат по чеку. Каждый элемент массива – объект с ключами type и amount type – тип платежа. Соответствует номеру платежа из кассового аппарата. 0 – как правило, наличные amount – сумма данного способа платежа Сумма всех платежей должна соответствовать общей стоимости из массива items |
Array | Да |
Email клиента, куда будет отправлен электронный чек | String | Нет | |
Если задан email клиента, то данный параметр управляет печатью чека на бумажном носителе. Если true, то бумажный чек будет отпечатан Если false, то бумажный чек не будет отпечатан В случае, если email не задан, то данный параметр всегда будет принимать значение true |
Boolean | Нет | |
caption |
Подпись чека. Если задано это значение, то строка будет отпечатана в начале чека. |
String | Нет |
barcode |
Штрихкод чека. Если задано это значение, то в начале чека будет отпечатан штрихкод, в котором будет закодирована значение в формате CODE128 |
String | Нет |
autoDelete |
Параметр для автоудаления. Если не планируется использовать отслеживание статуса чека, то можно передать сюда true и такой чек будет удален сразу же после успешной печати. По-умолчанию false |
Boolean | Нет |
agent_types |
Признак платежного агента. Можно передать как один, так и несколько значений bankPayingAgent – банковский платежный агент bankPayingSubagent – банковский платежный субагент payingAgent – платежный агент payingSubagent – платежный субагент attorney – поверенный commissionAgent – комиссионер another – другой тип агента |
String array | Нет |
tax_system |
Система налогообложения для всего чека main – ОСНО usn6 – УСН 6 usn15 – УСН 15 envd – ЕНВД eshn – ЕСХН patent – Патент |
String | Нет |
Описание полей items
Параметр | Описание | Тип данных | Обязательно |
---|---|---|---|
name | Наименование позиции | String | Да |
price | Цена единицы позиции | Double | Да |
quantity | Количество | Double | Да |
type |
Тип позиции commodity (по-умолчанию) – Товар excise – Подакцизный товар job – Работа service – Услуга gambling_bet – Ставка азартной игры gambling_prize – Выигрыш азартнгой игры lottery – Лотерейный билет lottery_prize – Выигрыш лотереи intellectual_activity – Предоставление результатов интерелектуальной деятельности payment – Платеж agent_commission – Агентское вознаграждение another – Иной предмет расчета |
String enum | Нет, по-умолчанию используется commodity |
pay_type |
Тип оплаты full_prepayment – Предоплата 100% prepayment – Предоплата advance – Аванс full_payment (по-умолчанию) – Полный расчет partial_payment – Частичный расчет и кредит credit – Передача в кредит credit_payment – Оплата кредита |
String enum | Нет, по-умолчанию используется full_payment |
supplier_inn | ИНН поставщика | String | Нет |
supplier |
Объект с данными о поставщике name - Наименование поставщика phone - Номер телефона поставщика (если он один) phones - Номера телефонов поставщика (массив телефонных номеров) |
Object | Нет |
agent |
Объект с данными об агенте name- Наименование агента INN - ИНН Агента address - Адрес агента phone - Номер телефона агента (если он один) phones - Номера телефонов агента (массив телефонных номеров) |
Object | Нет |
Примеры чеков
Чек предоплаты
Предоплата по заказу с оплатой наличными
{ "type": "sell", "print": true, "items": [ { "name": "Предоплата по заказу №123", "price": 100, "quantity": 1, "type": "service", "pay_type": "advance" } ], "payments": [ { "type": 0, "amount": 100 } ] }
Статус чека
Возвращает информацию о чеке по его UUID
GET |
/_api/receipts/{uuid} |
---|
{ "receipt": { "uuid": <UUID>, "status": "PENDING" } }
Удаление чека
Рекомендуется удалить чек после того, как мы отследили его статус, чтобы он удалился из системы немедленно. Для этого можно послать следующий DELETE запрос:
DELETE |
/_api/receipts/{uuid} |
---|
В случае успешного удаления чека код ответа будет HTTP 204
Отслеживание статуса чека
Как говорилось выше, вся система является асинхронной и требуется дополнительная обработка, чтобы узнать наверняка, был ли распечатан чек или нет.
Весь процесс выглядит следующим образом:
- Отправляем чек на печать, получаем его UUID
- Используя этот UUID запрашиваем статус чека до тех пор, пока поле status не примет значение SUCCESS или ERROR.
- Если status чека равен ERROR, то в поле errorMessage можно посмотреть текст ошибки
- Удаляем чек