Документ описывает сценарий использования программного интерфейса приложений (API) сервиса CheckOnline для информационной системы Ferma®.
Кодировка, используемая в запросах и ответах – UTF-8. Запросы выполняются методом POST, параметры запроса располагаются в структуре данных формата JSON, передаваемой в блоке данных запроса. Ответы выдаются сервером в формате JSON и, в случае успешности ответа, согласно его заголовку (код ответа по протоколу HTTP равен 200).
Для выполнения запросов на устройстве необходимо использовать сертификат, после чего выполнить запрос на создание чеков с использованием конвертера «Checkonline», который имеет вид:
POST https://ferma-c.ofd.ru/api/kkt/cloud/sync/receipt
Входные параметры данного запроса передаются в его теле в виде структуры данных в формате JSON. Пример запроса приведен ниже:
{
"Requestid": "545+64",
"Clientid": "",
"Device": "auto",
"DocumentType": 0,
"Lines": [
{
"Qty": 1,
"Price": 78850,
"PayAttribute": 4,
"Taxid": 4,
"Description": "Услуги по перевозке пассажиров и багажа",
"AgentModes": 64,
"ProviderData": {
"INN": "7707083893"
}
}
],
"NonCash": [
78850,
0,
0
],
"Cash": 0,
"TaxMode": 0,
"PhoneOrEmail": "79878985623",
"Place": "",
"FullResponse": false,
"PaymentAgentModes": 64
}
Параметры структуры запроса c их описаниями представлены в таблице 1.
Таблица 1. Параметры структуры запроса на создание чеков
Параметр | Вложенные поля | Формат значения | Назначение | Тег |
---|---|---|---|---|
Group | Строка | Идентификатор предприятия. По умолчанию будет извлечен из сертификата. Передаётся только в случае использования одного сертификата на несколько предприятий. | ||
Requestid | Строка, обязательное | Уникальный идентификатор запроса. Важно! Если требуется перепробить чек (в случае ошибок), нельзя изменять RequestId. Иначе возможно задвоение чека. | ||
Clientid | Строка | Идентификатор клиента. Идентификатор клиента удобно использовать, если у вас несколько сайтов и значение поля RequestId может иметь одинаковое значение. | ||
Device | Строка, обязательное | Должен иметь значение auto | ||
DocumentType | Целое число, обязательное | Тип чека. Возможны варианты: 0 - Приход; 1 - Расход; 2 - Возврат прихода; 3 - Возврат расхода. | 1054 | |
Lines | Структура, обязательно | Товарные позиции | 1059 | |
Qty | Целое число, обязательное | Количество товара. Указывается в тысячных долях. Если необходимо передать количество, например, 2,5 килограмма то в параметре следует указать 2500 (2,5 · 1000 = 2500). | 1023 | |
Price | Целое число, обязательное | Цена указывается в копейках | 1079 | |
PayAttribute | Целое число | Признак способа расчёта, смотрите п.п. 2.2. | 1214 | |
LineAttribute | Целое число | Признак предмета расчёта, смотрите п.п. 2.3. При указании значений 15 или 16 поле Description должно содержать строки со значениями от «1» до «25» и от «26» до «31» соответственно. На чеке же будут распечатаны значения, перечисленные в п.п. 2.5 | 1212 | |
Taxid | Целое число, обязательное | Код налога: 1 - НДС 20%; 2 - НДС 10%; 3 - НДС 0%; 4 - Без налога; 5 - Ставка 20/120; 6 - Ставка 10/110. | 1199 | |
Description 1) | Строка, обязательное | Наименование товарной позиции. Не может быть пустым. Реквизит включается в состав ФД, за исключением случая, когда реквизит «признак способа расчета» (тег 1214) имеет значение, равное «3». Важно! Если поле LineAttribute имеет значение «15 — о внереализационном доходе», то в данном параметре должно быть указано числовое значение от 1 до 31 из п.п. 2.5. Если поле LineAttribute имеет значение «16 — о страховых взносах», то в данном параметре должно быть указано числовое значение от 26 до 31 из п.п. 2.5. | 1030 | |
NonCash | Массив данных, обязательное | Массив из 3-х целых чисел с суммами безналичных оплат 3-х различных типов. Если во внутреннем учете пользователя устройства есть разбиение по типам оплат (например: Visa, MasterCard, Мир) имеет вид: [ 78850, 0, 250 ] Если разбиение не требуется, то можно передавать в виде: [ 1000 ]. Число указывается в копейках. | 1081 | |
Cash | Целое число | Сумма оплаты наличными в копейках. Если сумма равна нулю, то это поле можно опустить. | 1031 | |
TaxMode | Целое число | Система налогообложения, смотрите п.п. 2.1. По умолчанию та, которая задана при регистрации. Обратите внимание на то, что это поле является битовой маской. Если при регистрации устройства в ФНС было выбрано более одного режима налогообложения, то в поле TaxMode необходимо указать, к какой системе относится данный чек. Если была выбрана одна система, то это поле можно опустить. | 1055 | |
PhoneOrEmail 2) | Строка | Телефон или электронный адрес покупателя. Телефон передаётся в формате «7XXXXXXXXXX» или «7-XXX-XXX-XX-XX». | 1008 | |
Place 3) | Строка | Наименование места установки кассы. Место установки вендингового оборудования; при использовании в Интернете указывается адрес(а) сайта(ов); при развозной торговле марка и номер транспортного средства или адрес совершения расчетов для курьерской доставки. | 1187 | |
FullResponse | Логическое выражение | Признак получения полного ответа. (true — получение полного ответа по всем командам, из которых строится запрос, аналогичный ответу команды Batch; false — получение сокращённого ответа). | ||
PaymentAgentModes | Целое число | Режим агента для документа, смотрите п.п. 2.6. Обратите внимание, что данное поле является битовой маской. В этом поле можно указать режим агента, который будет распространён на все записи в документе. | 1057 |
Ответ на данный запрос также содержит структуру данных в формате JSON.
Ниже приведен пример ответа, если поле FullResponse имеет значение false.
Параметры структуры ответа описаны в таблице 2.
{
"fceerror": 0,
"Requestid": "ac88fe9f-5885-11ea-ae38-788b1848edc8",
"Clientid": null,
"Device": {
"Name": "00000003820034472769",
"Address": "172.16.13.213:4444"
},
"Path": "/fr/api/v2/Complex",
"Response": {
"Error": 0,
"ErrorMessages": null
},
"FiscalDocNumber": 62848,
"DocNumber": 58,
"Date": {
"Date": {
"Day": 27,
"Month": 2,
"Year": 20
},
"Time": {
"Hour": 12,
"Minute": 43,
"Second": 57
}
},
"GrandTotal": 17520,
"FiscalSign": 1570734444,
"DocumentType": 0,
"QR": "t=20200227T3333&s=175.20&fn=9289000100444444&i=62888&fp=1577734888&n=1",
"FNSerialNumber": "9289000100444444",
"DeviceSerialNumber": "00000003820034444449",
"DeviceRegistrationNumber": "0001729222014444",
"FCEError": 0,
"ErrorDescription": null,
"Fatal": false,
"HTTPStatus": 200
}
Таблица 2. Параметры структуры ответа на проксирование чеков
Параметр | Вложенные поля | Вложенные поля | Формат значения | Назначение |
---|---|---|---|---|
fceerror | Целое число | Код ошибки, смотрите п.п. 3.1. В случае успешного ответа имеет значение 0 | ||
Requestid | Строка | Уникальный идентификатор запроса | ||
ClientId | Строка | Идентификатор клиента | ||
Device | Структура | Информация об устройстве, обработавшем запрос | ||
Name | Строка | Заводской номер кассового устройства | ||
Address | Строка | IP адрес и порт устройства | ||
Path | Строка | Путь выполняемого API-запроса в Checkonline | ||
Response | Структура | Результат выполнения API-запроса на проксирование чеков | ||
Error | Целое число | Код ошибки, смотрите п.п. 3.2. Если значение равно 0 это значит, что команда была успешно выполнена и в фискальном накопителе был сформирован новый документ. | ||
ErrorMessages | Строка | Список сообщений, сформированных устройством при обработке запроса. Отображается в случае, если код ошибки не равен 0. | ||
FiscalDocNumber | Строка | Номер фискального документа | ||
DocNumber | Целое число | Номер чека | ||
Date | Структура | Дата и время формирования документа | ||
Date | Структура | Дата формирования документа | ||
Day | Целое число | День формирования документа | ||
Month | Целое число | Месяц формирования документа | ||
Year | Целое число | Год формирования документа. Указаны только последние 2 цифры года. | ||
Time | Структура | Время формирования документа | ||
Hour | Целое число | Час формирования документа | ||
Minute | Целое число | Минуты формирования документа | ||
Second | Целое число | Секунды формирования документа | ||
GrandTotal | Целое число | Итог чека в копейках | ||
FiscalSign | Целое число | Фискальный признак документа | ||
DocumentType | Целое число | Тип формируемого документа, смотрите п.п. 2.7. | ||
QR | Строка | QR-код чека. Представляет собой текстовую строку из латинских букв, цифр и символов-разделителей «=» и «&». Кодировка CP866. Состоит из шести полей: t=<date/time – дата и время осуществления расчета в формате ГГГГММДДТЧЧММ> s=<сумма расчета в рублях и копейках, разделенных точкой> fn=<заводской номер фискального накопителя> i=<порядковый номер фискального документа, нулями не дополняется> fp=<фискальный признак документа, нулями не дополняется> n=<признак расчета> |
||
FNSerialNumber | Строка | Номер фискального накопителя, в котором сформирован документ | ||
DeviceSerialNumber | Строка | Заводской номер кассового устройства | ||
DeviceRegistrationNumber | Строка | Регистрационный номер кассового устройства | ||
FCEError | Целое число | Код ошибки, смотрите п.п. 3.1. В случае успешного ответа имеет значение 0 | ||
ErrorDescription | Строка | Описание ошибки или дополнительная информация | ||
Fatal | Логическое выражение | Значение true показывает, что повторное выполнение запроса приведёт к ошибке; false показывает, что повторное выполнение запроса не приведёт к ошибке. | ||
HTTPStatus | целое число | HTTP код ответа от сервера, на который был отправлен API-запрос |
При ошибках, возникающих при работе сервиса, возвращается ошибка HTTP с номером 500.
Таблица 3. Ошибки сервиса
Код | Описание |
---|---|
1 | Ошибка чтения запроса. Сервер не смог прочитать тело запроса, пришедшего от клиента. Необходимо проверить, правильно ли указана длина запроса в заголовке |
2 | Ошибка распознавания JSON. Сервер не смог правильно преобразовать JSON в свои внутренние структуры данных. Необходимо проверить правильность переданного JSON, а также соответствие типов полей сервера указанным в документации. |
3 | Отсутствует поле Device |
4 | Отсутствует поле Duration или QueueLen |
5 | Нет подходящих устройств (согласно выбранной стратегии). Сервер попытался найти подходящее устройство за TryCount попыток. Необходимо изменить условия стратегии, либо увеличить значение поля TryCount. |
6 | Ошибка отправки запроса устройству |
7 | Значение поля Device «auto» допустимо только в пакетных командах |
8 | Неправильное имя (заводской номер) или адрес устройства |
9 | Неправильный адрес устройства |
10 | Неправильное имя (заводской номер) устройства |
12 | Ошибка активации устройства |
13 | Устройство уже существует |
14 | Устройство не активировано |
15 | Неправильно сформированный пароль устройства |
16 | Ошибка распознавания JSON ответа. От устройства был получен ответ, который не содержит корректный JSON. При получении этой ошибки сервер переведёт устройство в неактивное состояние. |
17 | Отсутствует поле RequestId |
18 | Устройство занято. Было выбрано устройство, которое получило другой запрос раньше, чем данный. После ожидания WaitForFree секунд, сервер вернёт ошибку «Устройство занято». |
19 | Ошибка кэша сервера |
20 | Ошибка очереди асинхронных запросов |
21 | Поле Callback допустимо только в командах Batch и Complex |
24 | Запрос в процессе обработки. Был повторно прислан запрос с данными RequestId, Group и ClientId до окончания обработки предыдущего запроса. |
Код | Описание |
---|---|
1 | Неизвестная команда ФН |
2 | Состояние ФН не соответствует присланной команде |
3 | Ошибка ФН |
4 | Ошибка контрольной суммы команды ФН |
5 | Закончен срок эксплуатации ФН |
6 | Архив ФН переполнен |
7 | Дата и время не соответствуют логике работы ФН |
8 | Запрошенные данные отсутствуют в архиве ФН |
9 | Некорректные параметры команды ФН |
16 | Размер передаваемых данных превысил допустимый |
17 | Нет транспортного соединения с ОФД |
18 | Исчерпан ресурс криптографического сопроцессора ФН. Требуется закрыть фискальный режим |
20 | Ресурс для хранения документов для ОФД исчерпан |
21 | Исчерпан ресурс ожидания хранения данных в ФН |
22 | Продолжительность смены долее 24 часов |
23 | Неверная разница во времени между 2 операциями (более 5 минут) |
32 | Сообщение от ОФД не может быть принято |
40 | Ничего важного не изменилось, перерегистрация не нужна |
41 | ИНН и регистрационный номер не должны меняться |
51 | Параметр команды содержит неверные данные. Подробнее здесь. |
52 | Отсутствуют данные для команды |
55 | Команда не реализована |
57 | Внутренняя ошибка устройства. Подробнее здесь. |
60 | Смена открыта |
61 | Смена не открыта |
69 | Сумма всех оплат меньше итога чека |
70 | Не хватает наличности в кассе |
73 | Неверный тип документа для данной команды |
74 | Чек открыт |
77 | Сумма безналичных видов оплаты больше итога чека |
79 | Неверный пароль для данной команды |
80 | Данные печатаются |
85 | Чек закрыт |
90 | Скидка больше итога по строке |
94 | Неверная команда |
95 | Сторно больше итога чека |
109 | Не хватает оборота по налогу |
114 | Команда не допустима в этом подрежиме |
115 | Команда не допустима в этом состоянии устройства |
124 | Ошибочная дата |
125 | Неверно сформированная дата |
142 | Нулевой итог чека |
192 | Ожидание подтверждения даты |
196 | Номер смены в ФН не соответствует номеру смены в устройстве |
200 | Тайм-аут принтера |
207 | Неправильная дата/время |
208 | Документ не содержит товарных позиций |
238 | Номер группы, пришедший от сервера FCE не соответствует группе устройства |
239 | Истёк срок аренды устройства |
240 | Ошибка при выполнении API-запроса |
241 | Неизвестная команда в пакете |
242 | Пустой запрос |
243 | Отсутствует идентификатор запроса RequestId |
244 | Ошибка при конвертации в JSON |
245 | Отсутствует идентификатор пакетного запроса RequestId |
246 | Ошибка при конвертации из JSON |
247 | Несуществующая смена |
248 | Изменены регистрационные параметры |
249 | Ошибка транспортного уровня при получении данных из архива ФН |
250 | Основная плата устройства не отвечает |
252 | Неверная контрольная сумма файла |
253 | Прочие ошибки принтера |
254 | Принтер в оффлайне |
255 | Фатальная ошибка устройства |
Во время исполнения команды в устройстве произошёл сбой, который возможно перевёл устройство в состояние фатальной ошибки.
Раздел описывает способ тестирования программного интерфейса приложений (API) сервиса «Checkonline» для информационной системы Ferma® с пробитием чеков и возможностью их просмотра. Для тестирования используется демонстрационный личный кабинет клиента (ЛКК), а также кассовый аппарат с установленным тестовым фискальным накопителем (ФН МГМ), который подключен к тестовой информационной системе Ferma®.
Для того чтобы пробить чеки на тестовой кассе Ferma®, которая находится в демо ЛКК, используйте данные:
Чтобы войти в демо личный кабинет клиента для дальнейшего просмотра чеков, нужно выполнить следующие действия:
После того как вошли в демо ЛКК, для просмотра пробитых чеков на кассе, нужно:
Для того чтобы пробить чеки на кассе Ferma®, которая находится в ЛКК, используйте данные:
Авторизация осуществляется по сертификату.
Чтобы получить сертификат, необходимо зайти в свой ЛКК.
Зайти в раздел Сервис Ferma®.
Здесь на странице найти Реквизиты доступа.
В реквизитах доступа нажать следующую кнопку.
Рабочий сертификат будет скачан на устройство.
Версия 1.0
Выпущена 03 марта 2020 г.
Первая отслеживаемая версия документа.
Версия 1.1
Выпущена 07 апреля 2020 г.
Добавлен раздел описывающий порядок тестирования.
Версия 1.2
Выпущена 21 сентября 2020 г.
Версия 1.3
Выпущена 20 октября 2020 г.
Изменен продуктовый URL на ferma-c.ofd.ru.
Версия 1.4
Выпущена 29 октября 2020 г.
Добавлена ссылка на сертификат для тестового доступа.
Версия 1.5
Выпущена 20 декабря 2021 г.
Исправлены мелкие недочеты.
Версия 1.6
Выпущена 14 июня 2024 г.
Проведена общая актуализация описания и корректировка верстки документа.