Помощь кассиру

Адреса и общие правила

Контуры, токены, заголовки, деньги и коды ответа: всё, что одинаково для всех способов.

Адреса

КонтурБазаДля чего
Рабочийhttps://ofd.yaros.kg:8143/ofd-work-0.0.1настоящие фискальные чеки
Демоhttps://ofd.yaros.kg:8143/ofd-0.0.1проба и отладка
Запасной доменhttps://ofd2.yaros.kg:8143 с теми же путямиесли основной недоступен
TCPhttp://<IP кассы>:<порт>, порт по умолчанию 8090напрямую в кассу по локальной сети

Документ, отправленный в демо, в рабочий ОФД не попадёт. Смена контура меняет только базовый путь, но касса подключена к одному контуру.

Проверить, что сервер отвечает, можно без токена:

Командная строка
curl 'https://ofd.yaros.kg:8143/ofd-0.0.1/gate/ping'

Токены

Токенов два вида, и они не взаимозаменяемы.

Токен обменаТокен V2
Где нуженобмен через кассу по HTTPфискализация без кассы
Видчисло: 123456789UUID
Откудаэкран кассы, Настройки → Обмен, строка «Номер для обмена»запрос get-token
Как меняетсяпри каждом включении обмена на кассепри каждом запросе get-token, не чаще раза в 5 минут
Заголовокtoken: <токен>token: <токен>

Токен передаётся только в заголовке: это не поле JSON, не логин и не Basic-авторизация. Храните его в настройках своей системы, а не в коде. По TCP токен не нужен, заголовок игнорируется.

Запрос

Деньги

ГдеЕдиницы
price, cash_sum, cashless_sum, amount в чекахсомы с дробной частью
amount во внесении и изъятииединицы валюты: 500 это 500 долларов, не центов
блок receipt в оповещенияхтыйыны: 12500 это 125 сом
теги налоговой в gnsResultтыйыны

price принимает до 4 знаков после точки. Считайте суммы в целых тыйынах или в Decimal, а не в float: 0.1 + 0.2 в double даст расхождение со сверкой сумм.

Уникальный id

Поле id документа и guid операции с наличными это ключ от дублей. Генерируйте GUID один раз на операцию и храните его, пока операция не завершится. Повтор с тем же ключом безопасен, с новым это вторая операция.

Коды ответа

Сервер отвечает HTTP 200 и на успех, и на отказ по существу. Решение принимайте по полю status в теле, а не по коду HTTP.

КодКогдаТело
200запрос разобран, в том числе отказJSON с status
400нет заголовка token, неверный JSON, не хватает обязательного поляслужебный JSON сервера с полями timestamp, status, error, path
404такого метода нетслужебный JSON сервера
415нет Content-Type: application/jsonслужебный JSON сервера

Отсутствующее поле и null считайте одним и тем же: сервер не отправляет поля со значением null. Незнакомые поля пропускайте, в новых версиях их может стать больше.

Что писать в журнал

Записывайте по каждой операции id, канал, метод, время, код HTTP, status, info, число попыток и итоговые реквизиты. Не записывайте пароль, токен целиком и полный номер карты. При обращении в поддержку называйте id документа: по нему находят запрос.

Смотрите также