Облачная Касса: Интеграция с Фискальным Процессингом: различия между версиями
Mediawiki (обсуждение | вклад) |
Merkulov (обсуждение | вклад) |
||
(не показаны 133 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
= Введение = | = Введение = | ||
Данное руководство описывает процедуру интеграции ИС (Информационной Системы) заказчика с Фискальным Процессингом (далее ФП) '''БИФИТ Онлайн'''. <br>В документе описаны следующие процедуры: | |||
Данное руководство описывает процедуру интеграции ИС (Информационной Системы) заказчика с Фискальным Процессингом (далее ФП) '''БИФИТ Онлайн'''. | |||
* '''Авторизация в ФП''' - процесс необходимый для подключения клиента к фискальному процессингу, | * '''Авторизация в ФП''' - процесс необходимый для подключения клиента к фискальному процессингу, | ||
* '''Формирование контент чека''' - формирование информации для дальнейшей отправки на фискализацию, | * '''Формирование контент чека''' - формирование информации для дальнейшей отправки на фискализацию, | ||
* '''Отправка чека в ФП''' - передача контента чека в фискальный процессинг для дальнейшей фискализации, | * '''Отправка чека в ФП''' - передача контента чека в фискальный процессинг для дальнейшей фискализации, | ||
* '''Получение документа по ID''' - получение документа с фискальными признаками по его номеру. | * '''Получение документа по ID''' - получение документа с фискальными признаками по его номеру. | ||
{|align="center" | |||
|-valign="top" | |||
|[[File:Fp_scheme.png|Схема работы с ФП]] | |||
|} | |||
= Нумераторы = | = Нумераторы = | ||
Строка 45: | Строка 47: | ||
* ПАТЕНТ | * ПАТЕНТ | ||
|}}<br> | |}}<br> | ||
{{ProductTable-2 | {{ProductTable-2 | ||
Строка 56: | Строка 57: | ||
* '''AVANS''' | * '''AVANS''' | ||
* '''FULL_PAY''' | * '''FULL_PAY''' | ||
* ''' | * '''PARTIAL_SETTLEMENT_AND_CREDIT''' | ||
* '''TRANSFER_ON_CREDIT''' | * '''TRANSFER_ON_CREDIT''' | ||
* '''CREDIT_PAYMENT''' | * '''CREDIT_PAYMENT''' | ||
Строка 70: | Строка 71: | ||
|}}<br> | |}}<br> | ||
= Авторизация = | {{ProductTable-2 | ||
|title-left='''vat''' - ставка НДС (тэг 1199). | |||
|title-right= | |||
|content-left= | |||
| |||
* '''WITHOUT_VAT''' | |||
* '''VAT_0''' | |||
* '''VAT_10''' | |||
* '''VAT_20''' | |||
* '''VAT_110''' | |||
* '''VAT_120''' | |||
|content-right= | |||
| |||
* Без НДС | |||
* НДС 0% | |||
* НДС 10% | |||
* НДС 20% | |||
* НДС 10/110 | |||
* НДС 20/120 | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left='''Payments''' - тип оплаты. | |||
|title-right= | |||
|content-left= | |||
| |||
* '''CASH''' | |||
* '''CARD''' | |||
* '''PREPAY''' | |||
* '''POSTPAY''' | |||
* '''OTHER''' | |||
|content-right= | |||
| |||
* (тэг 1031) Сумма оплаты наличными | |||
* (тэг 1081) Сумма оплата безналичными | |||
* (тэг 1215) Сумма оплаты предоплатой (зачётом аванса) | |||
* (тэг 1216) Сумма оплаты постоплатой (в кредит) | |||
* (тэг 1217) Сумма оплаты встречным предоставлением | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left='''PaymentSubject''' - признак предмета расчета (тэг 1212). | |||
|title-right= | |||
|content-left= | |||
| |||
* '''PRODUCT''' | |||
* '''EXCISABLE_PRODUCT''' | |||
* '''JOB''' | |||
* '''SERVICE''' | |||
* '''GAMBLING_RATE''' | |||
* '''GAMBLING_WIN''' | |||
* '''LOTTERY_TICKET''' | |||
* '''LOTTERY_WIN''' | |||
* '''PROVISION_RID''' | |||
* '''PAYMENT''' | |||
* '''AGENCY''' | |||
* '''COMPOUND_SUBJECT''' | |||
* '''OTHER_SUBJECT''' | |||
* '''PROPERTY_LAW''' | |||
* '''NON_OPERATING_INCOME''' | |||
* '''INSURANCE_CONTRIBUTIONS''' | |||
* '''TRADE_FEE''' | |||
* '''RESORT_FEE''' | |||
* '''PLEDGE''' | |||
* '''CONSUMPTION''' | |||
* '''CONTRIBUTIONS_MPI_SE''' | |||
* '''CONTRIBUTIONS_MPI''' | |||
* '''CONTRIBUTIONS_CHI_SE''' | |||
* '''CONTRIBUTIONS_CHI''' | |||
* '''CONTRIBUTIONS_MSI''' | |||
* '''CASINO_PAYMENT''' | |||
* '''MONEY_PAYMENT''' | |||
* '''ATNM''' | |||
* '''ATM''' | |||
* '''TNM''' | |||
* '''TM''' | |||
|content-right= | |||
| |||
* Товар | |||
* Подакцизный товар | |||
* Работа | |||
* Услуга | |||
* Ставка азартной игры | |||
* Выигрыш азартной игры | |||
* Лотерейный билет | |||
* Выигрыш лотереи | |||
* Предоставление РИД | |||
* Платеж | |||
* Агентское вознаграждение | |||
* Составной предмет расчета | |||
* Иной предмет расчета | |||
* Имущественное право | |||
* Внереализованный доход | |||
* Страховые взносы | |||
* Торговый сбор | |||
* Курортный сбор | |||
* Залог | |||
* Расход | |||
* Вкзносы на ОПС ИП | |||
* Взносы на ОПС | |||
* Взносы на ОМС ИП | |||
* Взносы на ОМС | |||
* Взносы на ОСС | |||
* Платеж казино | |||
* Выплата | |||
* Подакцизный маркируемый товар без КМ | |||
* Подакцизный маркируемый товар с КМ | |||
* Маркируемый товар без КМ | |||
* Марируемый товар с КМ | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left='''PaymentAddress''' - место расчётов (тэг 1187). | |||
|title-right= | |||
|content-left= По умолчанию то, которое задано при регистрации. В этом поле можно указать адрес сайта, на котором сделан чек или место установки вендингового оборудования | |||
|content-right= | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left='''address''' - телефон или электронный адрес покупателя (тэг 1008). | |||
|title-right= | |||
|content-left= Телефон передаётся в формате "7ХХХХХХХХХХ" | |||
|content-right= | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left='''items''' - массив товарных позиций (тэг 1059). | |||
|title-right= | |||
|content-left= | |||
* '''CALCULATIONMETHOD''' | |||
* '''PAYMENTSUBJECT''' | |||
* '''NAME''' | |||
* '''PRICE''' | |||
* '''QUANTITY''' | |||
* '''VAT''' | |||
* '''TOTAL''' | |||
|content-right= | |||
* (тэг 1244) Признак способа расчета | |||
* (тэг 1212) Признак предмета расчета | |||
* (тэг 1030) Наименование товарной позиции. Не может быть пустым | |||
* (тэг 1079) Цена, цена указывается в рублях 100.00 | |||
* (тэг 1023) Количество. Количество указывается дробных числах, если вам надо указать 937 грамм, а цена у вас за один килограмм - 0.937 | |||
* (тэг 1199) Ставка НДС | |||
* (тэг 1043) Сумма товарной позиции | |||
|}}<br> | |||
= Авторизация в OAuth2 при помощи токена коннектора = | |||
'''Токен коннектора''' - строка, содержащая символы и/или буквы и/или цифры. Это ссылка на одну или несколько облачных ККТ в сервисе '''БИФИТ Онлайн'''. Токен коннектора генерируется пользователем или партнером в ЛК '''БИФИТ Бизнес''' после оплаты аренды облачной ККТ. Таким образом, после авторизации по токену коннектора, все запросы обрабатываются на строго определенной/ых ККТ. | |||
{{ Note | '''''Примечание''''' | |||
* Все ссылки будут указаны для тестового контура ФП! '''https://fp-test.bifit.com/processing-api/.../''' | |||
* Для отладки интеграции в тестовом контуре, используйте токен коннектора: '''P5cKbUUD9uSSrSlGdzspLblvBnD0GzTAE0cLmAPSEMxJ79DtLE''' | |||
* Адрес "боевого" контура ФП '''https://fp.bifit.com/processing-api/.../'''|1000}} | |||
<br> | |||
{{ProductTable-2 | |||
|title-left='''Запрос''' | |||
|title-right='''POST''' | |||
|content-left= URL: https://fp-test.bifit.com/processing-api/oauth/token | |||
|content-right= | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/oauth/token | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Request Body | |||
|title-right= type: '''x-www-form-urlencoded''' | |||
|content-left= | |||
* '''token''': токен коннектора ФП. Необходимо получить в ЛК '''БИФИТ Онлайн''', либо у партнера БИФИТ КАССА. | |||
* '''client_id''': передать значение ''"processing-connector-token"'' | |||
* '''client_secret''': передать значение ''"processing-connector-token"'' | |||
* '''grant_type''': передать значение ''"token"'' | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
token: "P5cKbUUD9uSSrSlGdzspLblvBnD0GzTAE0cLmAPSEMxJ79DtLE" | |||
client_id: "processing-connector-token" | |||
client_secret: "processing-connector-token" | |||
grant_type: "token" | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Response | |||
|title-right= | |||
|content-left= | |||
* '''access_token''': токен доступа. Используется при отправке запросов ФП | |||
* '''token_type''': тип токена | |||
* '''refresh_token''': использовать для обновления токена доступа после истечении срока жизни (либо повторно авторизоваться с токеном коннектора) | |||
* '''expires_in''': срок жизни токена доступа в секундах. | |||
* '''scope''': | |||
* '''connector_id''': ID коннектора | |||
* '''jti''': | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
{ | |||
access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w", | |||
token_type: "bearer", | |||
refresh_token: "eyJhbGciOiJSUzI1Ni.._782S_MQ", | |||
expires_in: 3599, | |||
scope: "read write", | |||
connector_id: 1, | |||
jti: "2f22e02e-4e72-4b68-991b-6aec065d996c" | |||
} | |||
</syntaxhighlight> | |||
|}}<br> | |||
= Авторизация в OAuth2 по refresh token = | |||
* По истечении времени жизни '''access_token''' (по умолчанию 1 час), Вы '''можете''' использовать механизм восстановления '''access_token''' по значению '''refresh_token''', полученному при помощи авторизации по токену коннектора. Однако, для восстановления '''access_token''', так же можно использовать повторную процедуру авторизации по токену коннектора. | |||
{{ Note | '''''Примечание''''' | {{ Note | '''''Примечание''''' | ||
*Все ссылки будут указаны для тестового контура ФП! | * Все ссылки будут указаны для тестового контура ФП! '''https://fp-test.bifit.com/processing-api/.../''' | ||
* | * Адрес "боевого" контура ФП '''https://fp.bifit.com/processing-api/.../'''|1000}} | ||
<br> | |||
{{ProductTable-2 | |||
|title-left='''Авторизация OAuth2''' | |||
|title-right='''POST''' | |||
|content-left= URL: https://fp-test.bifit.com/processing-api/oauth/token | |||
|content-right= | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/oauth/token | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Request Body | |||
|title-right= type: '''x-www-form-urlencoded''' | |||
|content-left= | |||
* '''refresh_token''': полученный при авторизации по токену коннектора | |||
* '''client_id''': передать значение ''":processing-connector-token"'' | |||
* '''client_secret''': передать значение ''":processing-connector-token"'' | |||
* '''grant_type''': передать значение ''"refresh_token"'' | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
refresh_token: "eyJhbGciOiJSUzI1Ni.._782S_MQ" | |||
client_id: "processing-connector-token" | |||
client_secret: "processing-connector-token" | |||
grant_type: "refresh_token" | |||
</syntaxhighlight> | |||
|}}<br> | |||
* | {{ProductTable-2 | ||
|title-left= Response | |||
|title-right= | |||
|content-left= | |||
* '''access_token''': токен доступа. Используется при отправке запросов ФП | |||
* '''token_type''': тип токена | |||
* '''refresh_token''': использовать для обновления токена доступа после истечении срока жизни (либо повторно авторизоваться с токеном коннектора) | |||
* '''expires_in''': срок жизни токена доступа в секундах. | |||
* '''scope''': | |||
* '''connector_id''': ID коннектора | |||
* '''jti''': | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
{ | |||
access_token: "ero3UNcffhlKdn5e76i...edfr_JU", | |||
token_type: "bearer", | |||
refresh_token: "tjlsoduopUIy76sdsf.._78tyfbv", | |||
expires_in: 3599, | |||
scope": "read write, | |||
connector_id: 1, | |||
jti: "2f22e02e-4e72-4b68-991b-6aec065d996c" | |||
} | |||
</syntaxhighlight> | |||
|}}<br> | |||
= Отправка документа на фискализацию в процессинг = | |||
{{ProductTable-2 | |||
|title-left='''Запрос регистрации чека''' | |||
|title-right='''POST''' | |||
|content-left= https://fp-test.bifit.com/processing-api/protected/documents/registration/receipts | |||
|content-right= | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/protected/documents/registration/receipts | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Request Headers | |||
|title-right= | |||
|content-left= | |||
* '''authorization''': переменная для передачи access_token. Введите тип токена (в нашем случае слово "Bearer") перед значением '''access_token''' | |||
* '''idempotency-key''': ключ идемпотентности. Уникальный идентификатор документа в рамках сервиса '''БИФИТ Онлайн'''. Ключ генерируется на стороне клиента и обеспечивает невозможность повторного выполнения запроса регистрации чека на сервере. Варианты формирования ключа: | |||
** Используйте '''[https://ru.wikipedia.org/wiki/GUID GUID]''' для генерации ключа идемпотентности ('''Рекомендуется''') | |||
** Используйте правило генерации ключа: '''SHA256(Локальный номер документа & PIN(4 символа) & Сумма чека(ххх.хх) & ДатаВремя(ДД.ММ.ГГГГ ЧЧ:ММ))''' для случаев, когда необходимо воспроизвести ключ по исходным данным с ИС отправителя запросов | |||
*** '''Локальный номер документа''': Локальный инкрементируемый счетчик в ИС отправителя запросов; | |||
*** '''PIN''': Зафиксированное значение в ИС отправителя запросов; | |||
*** '''Сумма чека''': Сумма чека, переданная в переменную '''total'''; | |||
*** '''Время чека''': Время зафиксированное в ИС отправителя; | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
authorization: "Bearer ero3UNcffhlKdn5e76i...edfr_JU" | |||
idempotency-key: "sdftfc-KF784mkd-skdhkaasca_lf34hKxsf" | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left=Request Body | |||
|title-right=JSON структура | |||
|content-left= | |||
* '''type''': тип фискального документа, см. раздел "Нумераторы" ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
* '''taxSystem''': система налогообложения, см. раздел "Нумераторы" ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
* '''cashier''': информация о кассире | |||
** '''name''': ФИО кассира, допускается вместе с ФИО указать должность кассира ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''inn''': ИНН кассира ('''не обязательный реквизит''') | |||
* '''client''': информация о клиенте | |||
** '''address''': электронный адрес или номер телефона ('''не обязательный реквизит''') | |||
* '''items''': массив, содержащий номенклатурные позиции | |||
** '''calculationMethod''': признак способа расчёта, см. раздел "Нумераторы" ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''paymentSubject''': признак предмета расчёта, см. раздел "Нумераторы" ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''name''': наименование товарной позиции ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''price''': цена товарной позиции с учетом примененной скидки/надбавки ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''quantity''': количество товарных позиций ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''vat''': НДС товарной позиции, по умолчанию передаётся значение "БЕЗ НДС" ('''не обязательный реквизит''') | |||
** '''total''': сумма товарной позиции с учетом примененных скидок/надбавок | |||
* '''total''': итоговая сумма чека. Содержит итоговую сумму всех товарных позиций в чеке ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
* '''payments''': типы оплаты. В чеке должен быть указан хотя бы один тип оплаты ('''ОБЯЗАТЕЛЬНЫЙ РЕКВИЗИТ''') | |||
** '''CASH''': сумма по типу оплаты наличными ('''не обязательный реквизит''') | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
{ | |||
"type": "SALE", | |||
"taxSystem": "COMMON", | |||
"cashier": { | |||
"name": "Иванов И.И." | |||
}, | |||
"client": { | |||
"address": "test@test.com" | |||
}, | |||
"items": [ | |||
{ | |||
"calculationMethod": "FULL_PAY", | |||
"paymentSubject": "SERVICE", | |||
"name": "Услуга", | |||
"price": 100.00, | |||
"quantity": 1.500, | |||
"vat": "VAT_20", | |||
"total": 150.00 | |||
} | |||
], | |||
"total": 150.00, | |||
"payments": { | |||
"CASH": 150.00 | |||
} | |||
} | |||
</syntaxhighlight> | |||
|}}<br> | |||
* | {{ProductTable-2 | ||
|title-left=Response | |||
|title-right= | |||
|content-left= | |||
* Ответ сервера содержит '''ID''' зарегистрированного чека | |||
|content-right= | |||
<syntaxhighlight> | |||
254934 | |||
</syntaxhighlight> | |||
|}}<br> | |||
= Запрос информации о документе по ID = | |||
{{ProductTable-2 | |||
|title-left='''Запрос информации о чеке по ID''' | |||
|title-right='''GET''' | |||
|content-left= | |||
https://fp-test.bifit.com/processing-api/protected/documents/{id} | |||
''Используйте ID документа, полученного на предыдущем шаге, для получения информации о фискализации и контента чека.'' | |||
|content-right= | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/protected/documents/254934 | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Request Headers | |||
|title-right= | |||
|content-left= | |||
* '''authorization''': переменная для передачи access_token. Введите тип токена (в нашем случае слово "Bearer") перед значением '''access_token''' | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
authorization: "Bearer ero3UNcffhlKdn5e76i...edfr_JU" | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left=Response | |||
|title-right= | |||
|content-left= | |||
Ответ содержит информацию о состоянии отправленного на фискализацию документа. В случае успешной фискализации, будет содержать следующую: | |||
* Информацию о ККТ, на которой был фискализирован документ | |||
* Исходный запрос | |||
* Информацию для генерации QR: | |||
** Тип документа | |||
** Дата/время расчета (фискализации документа на ККТ) | |||
** Сумма чека | |||
** Номер фискального накопителя | |||
** Номер фискального документа | |||
** Фискальный признак документа | |||
* Печатную форму фискального документа<br> | |||
<TABLE width="260px"><tr><td><syntaxhighlight lang="JSON"> | |||
-------------------------------- | |||
Кассовый чек | |||
ПРИХОД | |||
АО БИФИТ | |||
г.Москва, Ниж. Первомайская, д.4 | |||
6 | |||
15:04:22 12:17 | |||
-------------------------------- | |||
Услуга | |||
1.5 * 100.00 = 150.00 | |||
НДС 20% | |||
УСЛУГА | |||
-------------------------------- | |||
ИТОГ = 150.00 | |||
НАЛИЧНЫМИ = 150.00 | |||
СУММА НДС 20% = 25.00 | |||
ЭЛ.АДР.ПОКУПАТЕЛЯ test@test.com | |||
ЭЛ.АДР.ОТПРАВИТЕЛЯ | |||
noname@email.com | |||
КАССИР Иванов И.И. | |||
ЧЕК 39 | |||
СМЕНА 299 | |||
СНО ОСН | |||
ИНН 7724923302 | |||
РН ККТ 0000000001053073 | |||
ФН 9999078902002260 | |||
ФД 5088 | |||
ФП 3705633526 | |||
</syntaxhighlight></td></tr></TABLE> | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
" | { | ||
"id": 254934, | |||
"executorType": "CONNECTOR", | |||
"executorId": 1, | |||
"kkmId": 50, | |||
"kkm": { | |||
"id": 50, | |||
"vendor": "БИФИТ", | |||
"model": "БФР-112ФС", | |||
"factoryNumber": "98065732341002", | |||
"inn": "7724923302", | |||
"registrationNumber": "0000000001053073", | |||
"fdNumber": "9999078902002260", | |||
"fdStatus": null, | |||
"taxSystems": [ | |||
"COMMON", | |||
"SIMPLIFIED", | |||
"SIMPLIFIED_WITH_EXPENSE", | |||
"ENVD", | |||
"COMMON_AGRICULTURAL" | |||
], | |||
"lastDocumentDate": 1614173792888, | |||
"brokerVersion": "3.36" | |||
}, | |||
"idempotencyKey": "b28463ba-48b6-4d95-8612-d2027d804f42", | |||
"type": "RECEIPT", | |||
"request": { | |||
"type": "SALE", | |||
"taxSystem": "COMMON", | |||
"cashier": { | |||
"name": "Иванов И.И." | |||
}, | |||
"client": { | |||
"address": "test@test.com" | |||
}, | |||
"items": [ | |||
{ | |||
"calculationMethod": "FULL_PAY", | |||
"paymentSubject": "SERVICE", | |||
"name": "Услуга", | |||
"price": 100.00, | |||
"quantity": 1.500, | |||
"vat": "VAT_20", | |||
"total": 150.00 | |||
} | |||
], | |||
"total": 150.00, | |||
"payments": { | |||
"CASH": 150.00 | |||
} | |||
}, | |||
"response": { | |||
"raw": "--------------------------------\n Кассовый чек \n ПРИХОД \n АО БИФИТ \nг.Москва, Ниж. Первомайская, д.4\n 6 \n 15:04:22 12:17 \n--------------------------------\nУслуга \n1.5 * 100.00 = 150.00\nНДС 20% \nУСЛУГА \n--------------------------------\nИТОГ = 150.00\nНАЛИЧНЫМИ = 150.00\nСУММА НДС 20% = 25.00\nЭЛ.АДР.ПОКУПАТЕЛЯ test@test.com\nЭЛ.АДР.ОТПРАВИТЕЛЯ \n noname@email.com\nКАССИР Иванов И.И.\nЧЕК 39\nСМЕНА 299\nСНО ОСН\nИНН 7724923302\nРН ККТ 0000000001053073\nФН 9999078902002260\nФД 5088\nФП 3705633526\n", | |||
"shiftNumber": 299, | |||
"receiptNumber": 39 | |||
}, | |||
"fiscalDocument": 5088, | |||
"fiscalAmount": 150.00, | |||
"fiscalTime": 1650014239472, | |||
"fiscalSign": "3705633526", | |||
"fiscalDrive": "9999078902002260", | |||
"status": "SUCCESS", | |||
"created": 1650014238962, | |||
"changed": 1650014240672 | |||
} | |||
</syntaxhighlight> | |||
|}}<br> | |||
= Оффлайн возможности фискального процессинга = | |||
Фискальный процессинг позволяет сформировать HTML страницу с информацией о чеке, для предоставления клиенту, в "оффлайн режиме". Такая возможность обеспечивается за счет использования специального GET запроса без авторизации с использованием ключа идемпотентности. В случае, если документ не может быть передан в процессинг по причине отсутствия связи между клиентом и сервером, сервер вернет информацию о необходимости подождать завершения процесса обработки фискального документа. Такой запрос можно представить в виде QR кода, для считывания камерой смартфона. | |||
{{ProductTable-2 | |||
|title-left='''Запрос информации о чеке по Ключу идемпотентности''' | |||
|title-right='''GET''' | |||
|content-left= | |||
https://fp-test.bifit.com/processing-api/receipts/{idempotency_key} | |||
''Используйте ID документа, полученного на предыдущем шаге, для получения информации о фискализации и контента чека.'' | |||
|content-right= | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/receipts/b28463ba-48b6-4d95-8612-d2027d804f42 | |||
</syntaxhighlight> | |||
|}}<br> | |||
= | {{ProductTable-2 | ||
|title-left= | |||
Документ отправлен в ФП, но связи с ФП нет | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/receipts/b28463ba-48b6-4d95-8612-d2027d804f42 | |||
</syntaxhighlight> | |||
|title-right= | |||
Документ отправлен в ФП, и фискализировался | |||
<syntaxhighlight> | |||
https://fp-test.bifit.com/processing-api/receipts/b28463ba-48b6-4d95-8612-d2027d804f42 | |||
</syntaxhighlight> | |||
|content-left= | |||
[[File:Fp_no_connect_receipt.png|300px]] | |||
|content-right= | |||
[[File:Fp_connect_receipt.png|300px]] | |||
|}}<br> | |||
= Справочник Ошибок = | |||
{{ProductTable-2 | |||
|title-left='''Структура ошибок в формировании запросов или авторизации''' | |||
|title-right='''Структура ошибок в бизнес логике (некорректные документы, отсутствие прав и т.д)''' | |||
|content-left= | |||
<syntaxhighlight lang="JSON"> | |||
{ | |||
"error": String, | |||
"error_description": String | |||
} | |||
</syntaxhighlight> | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
{ | |||
"type": String, | |||
"message": String, | |||
"dependentErrors": Object | |||
} | |||
</syntaxhighlight> | |||
|}}<br> | |||
= | {{ProductTable-2 | ||
|title-left= Перечень статусов документов | |||
|title-right= | |||
|content-left= | |||
* '''NEW''' - только что созданный документ, еще не отправлен в очередь (фискальные данные в документе отсутствуют). | |||
* '''QUEUE''' - документ находится в очереди на фискализацию (фискальные данные в документе отсутствуют). | |||
* '''REGISTRATION''' - документ находится в процессе регистрации на ККТ (фискальные данные в документе отсутствуют). | |||
* '''FAIL''' - ошибка при фискализации документа (фискальные данные в документе отсутствуют). | |||
* '''SUCCESS''' - документ успешно фискализирован (в документе присутствуют фискальные данные и печатная форма чека). | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
</syntaxhighlight> | |||
|}}<br> | |||
{{ProductTable-2 | |||
|title-left= Перечень ошибок | |||
|title-right= | |||
|content-left= | |||
Если запрошенный по ID документ находится в статусе '''FAIL''', это означает, что ККТ по каким-то причинам не фискализировала такую транзакцию. Перечень причин см. в правой части | |||
|content-right= | |||
<syntaxhighlight lang="JSON"> | |||
ERR20002: | |||
statusCode: 503 | |||
code: ERR20002 | |||
description: Запрос не может быть выполнен. Попробуйте позже | |||
ERR20005: | |||
statusCode: 400 | |||
code: ERR20005 | |||
description: Некорректный запрос | |||
ERR20008: | |||
statusCode: 401 | |||
code: ERR20008 | |||
description: Некорректный пароль | |||
ERR20012: | |||
statusCode: 401 | |||
code: ERR20012 | |||
description: Доступ запрещен | |||
ERR20013: | |||
statusCode: 400 | |||
code: ERR20013 | |||
description: Ошибка ФН | |||
ERR20014: | |||
statusCode: 400 | |||
code: ERR20014 | |||
description: Некорректный запрос | |||
ERR20015: | |||
statusCode: 404 | |||
code: ERR20015 | |||
description: Неизвестный ФН | |||
ERR20016: | |||
statusCode: 400 | |||
code: ERR20016 | |||
description: Некорректный запрос | |||
ERR20017: | |||
statusCode: 400 | |||
code: ERR20017 | |||
description: Смена не открыта | |||
ERR20018: | |||
statusCode: 400 | |||
code: ERR20018 | |||
description: Смена превысила 24 часа | |||
ERR20019: | |||
statusCode: 400 | |||
code: ERR20019 | |||
description: Хост недоступен | |||
</syntaxhighlight> | |||
|}}<br> | |||
= См. также = | |||
* [https://kassa.bifit.com/wiki/index.php?title=API:Отправка_чека_на_повторную_фискализацию Отправка чека на повторную фискализацию] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Авторизация_в_OAuth2_при_помощи_токена_коннектора Авторизация в OAuth2 при помощи токена коннектора] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Авторизация_в_OAuth2_по_refresh_token Авторизация в OAuth2 по refresh token] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Отправка_документа_на_фискализацию_в_процессинг Отправка документа на фискализацию в процессинг] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Отправка_документа_на_фискализацию_в_процессинг_(маркированный_товар) Отправка документа на фискализацию в процессинг (маркированный товар)] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Отправка_документа_на_фискализацию_в_процессинг_(агентский_товар) Отправка документа на фискализацию в процессинг (агентский товар)] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Запрос_информации_о_документе_по_ID Запрос информации о документе по ID] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Оффлайн_возможности_фискального_процессинга Оффлайн возможности фискального процессинга] | |||
* [https://kassa.bifit.com/wiki/index.php?title=БИФИТ_ОНЛАЙН:Справочник_Ошибок_(ФП) Справочник Ошибок (ФП)] |
Текущая версия на 15:15, 16 июня 2023
Введение
Данное руководство описывает процедуру интеграции ИС (Информационной Системы) заказчика с Фискальным Процессингом (далее ФП) БИФИТ Онлайн.
В документе описаны следующие процедуры:
- Авторизация в ФП - процесс необходимый для подключения клиента к фискальному процессингу,
- Формирование контент чека - формирование информации для дальнейшей отправки на фискализацию,
- Отправка чека в ФП - передача контента чека в фискальный процессинг для дальнейшей фискализации,
- Получение документа по ID - получение документа с фискальными признаками по его номеру.
Нумераторы
ReceiptType - тип фискального документа (тэг 1054) | |
|
|
TaxSystem - cистема налогообложения (тэг 1055). Если при регистрации устройства в ФНС было выбрано более одного режима налогообложения, то в TaxSystem необходимо указать, к какой системе налогообложения относится данный чек. | |
|
|
CalculationMethod - признак способа расчета (тэг 1214). | |
|
|
vat - ставка НДС (тэг 1199). | |
|
|
Payments - тип оплаты. | |
|
|
PaymentSubject - признак предмета расчета (тэг 1212). | |
|
|
PaymentAddress - место расчётов (тэг 1187). | |
По умолчанию то, которое задано при регистрации. В этом поле можно указать адрес сайта, на котором сделан чек или место установки вендингового оборудования |
address - телефон или электронный адрес покупателя (тэг 1008). | |
Телефон передаётся в формате "7ХХХХХХХХХХ" |
items - массив товарных позиций (тэг 1059). | |
|
|
Авторизация в OAuth2 при помощи токена коннектора
Токен коннектора - строка, содержащая символы и/или буквы и/или цифры. Это ссылка на одну или несколько облачных ККТ в сервисе БИФИТ Онлайн. Токен коннектора генерируется пользователем или партнером в ЛК БИФИТ Бизнес после оплаты аренды облачной ККТ. Таким образом, после авторизации по токену коннектора, все запросы обрабатываются на строго определенной/ых ККТ.
- Все ссылки будут указаны для тестового контура ФП! https://fp-test.bifit.com/processing-api/.../
- Для отладки интеграции в тестовом контуре, используйте токен коннектора: P5cKbUUD9uSSrSlGdzspLblvBnD0GzTAE0cLmAPSEMxJ79DtLE
- Адрес "боевого" контура ФП https://fp.bifit.com/processing-api/.../
Запрос | POST |
URL: https://fp-test.bifit.com/processing-api/oauth/token | https://fp-test.bifit.com/processing-api/oauth/token |
Request Body | type: x-www-form-urlencoded |
|
token: "P5cKbUUD9uSSrSlGdzspLblvBnD0GzTAE0cLmAPSEMxJ79DtLE"
client_id: "processing-connector-token"
client_secret: "processing-connector-token"
grant_type: "token"
|
Response | |
|
{
access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",
token_type: "bearer",
refresh_token: "eyJhbGciOiJSUzI1Ni.._782S_MQ",
expires_in: 3599,
scope: "read write",
connector_id: 1,
jti: "2f22e02e-4e72-4b68-991b-6aec065d996c"
}
|
Авторизация в OAuth2 по refresh token
- По истечении времени жизни access_token (по умолчанию 1 час), Вы можете использовать механизм восстановления access_token по значению refresh_token, полученному при помощи авторизации по токену коннектора. Однако, для восстановления access_token, так же можно использовать повторную процедуру авторизации по токену коннектора.
- Все ссылки будут указаны для тестового контура ФП! https://fp-test.bifit.com/processing-api/.../
- Адрес "боевого" контура ФП https://fp.bifit.com/processing-api/.../
Авторизация OAuth2 | POST |
URL: https://fp-test.bifit.com/processing-api/oauth/token | https://fp-test.bifit.com/processing-api/oauth/token |
Request Body | type: x-www-form-urlencoded |
|
refresh_token: "eyJhbGciOiJSUzI1Ni.._782S_MQ"
client_id: "processing-connector-token"
client_secret: "processing-connector-token"
grant_type: "refresh_token"
|
Response | |
|
{
access_token: "ero3UNcffhlKdn5e76i...edfr_JU",
token_type: "bearer",
refresh_token: "tjlsoduopUIy76sdsf.._78tyfbv",
expires_in: 3599,
scope": "read write,
connector_id: 1,
jti: "2f22e02e-4e72-4b68-991b-6aec065d996c"
}
|
Отправка документа на фискализацию в процессинг
Запрос регистрации чека | POST |
https://fp-test.bifit.com/processing-api/protected/documents/registration/receipts | https://fp-test.bifit.com/processing-api/protected/documents/registration/receipts |
Request Headers | |
|
authorization: "Bearer ero3UNcffhlKdn5e76i...edfr_JU"
idempotency-key: "sdftfc-KF784mkd-skdhkaasca_lf34hKxsf"
|
Request Body | JSON структура |
|
{
"type": "SALE",
"taxSystem": "COMMON",
"cashier": {
"name": "Иванов И.И."
},
"client": {
"address": "test@test.com"
},
"items": [
{
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"name": "Услуга",
"price": 100.00,
"quantity": 1.500,
"vat": "VAT_20",
"total": 150.00
}
],
"total": 150.00,
"payments": {
"CASH": 150.00
}
}
|
Response | |
|
254934 |
Запрос информации о документе по ID
Запрос информации о чеке по ID | GET |
https://fp-test.bifit.com/processing-api/protected/documents/{id} Используйте ID документа, полученного на предыдущем шаге, для получения информации о фискализации и контента чека. |
https://fp-test.bifit.com/processing-api/protected/documents/254934 |
Request Headers | |
|
authorization: "Bearer ero3UNcffhlKdn5e76i...edfr_JU"
|
Response | ||
Ответ содержит информацию о состоянии отправленного на фискализацию документа. В случае успешной фискализации, будет содержать следующую:
|
{
"id": 254934,
"executorType": "CONNECTOR",
"executorId": 1,
"kkmId": 50,
"kkm": {
"id": 50,
"vendor": "БИФИТ",
"model": "БФР-112ФС",
"factoryNumber": "98065732341002",
"inn": "7724923302",
"registrationNumber": "0000000001053073",
"fdNumber": "9999078902002260",
"fdStatus": null,
"taxSystems": [
"COMMON",
"SIMPLIFIED",
"SIMPLIFIED_WITH_EXPENSE",
"ENVD",
"COMMON_AGRICULTURAL"
],
"lastDocumentDate": 1614173792888,
"brokerVersion": "3.36"
},
"idempotencyKey": "b28463ba-48b6-4d95-8612-d2027d804f42",
"type": "RECEIPT",
"request": {
"type": "SALE",
"taxSystem": "COMMON",
"cashier": {
"name": "Иванов И.И."
},
"client": {
"address": "test@test.com"
},
"items": [
{
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"name": "Услуга",
"price": 100.00,
"quantity": 1.500,
"vat": "VAT_20",
"total": 150.00
}
],
"total": 150.00,
"payments": {
"CASH": 150.00
}
},
"response": {
"raw": "--------------------------------\n Кассовый чек \n ПРИХОД \n АО БИФИТ \nг.Москва, Ниж. Первомайская, д.4\n 6 \n 15:04:22 12:17 \n--------------------------------\nУслуга \n1.5 * 100.00 = 150.00\nНДС 20% \nУСЛУГА \n--------------------------------\nИТОГ = 150.00\nНАЛИЧНЫМИ = 150.00\nСУММА НДС 20% = 25.00\nЭЛ.АДР.ПОКУПАТЕЛЯ test@test.com\nЭЛ.АДР.ОТПРАВИТЕЛЯ \n noname@email.com\nКАССИР Иванов И.И.\nЧЕК 39\nСМЕНА 299\nСНО ОСН\nИНН 7724923302\nРН ККТ 0000000001053073\nФН 9999078902002260\nФД 5088\nФП 3705633526\n",
"shiftNumber": 299,
"receiptNumber": 39
},
"fiscalDocument": 5088,
"fiscalAmount": 150.00,
"fiscalTime": 1650014239472,
"fiscalSign": "3705633526",
"fiscalDrive": "9999078902002260",
"status": "SUCCESS",
"created": 1650014238962,
"changed": 1650014240672
}
|
Оффлайн возможности фискального процессинга
Фискальный процессинг позволяет сформировать HTML страницу с информацией о чеке, для предоставления клиенту, в "оффлайн режиме". Такая возможность обеспечивается за счет использования специального GET запроса без авторизации с использованием ключа идемпотентности. В случае, если документ не может быть передан в процессинг по причине отсутствия связи между клиентом и сервером, сервер вернет информацию о необходимости подождать завершения процесса обработки фискального документа. Такой запрос можно представить в виде QR кода, для считывания камерой смартфона.
Запрос информации о чеке по Ключу идемпотентности | GET |
https://fp-test.bifit.com/processing-api/receipts/{idempotency_key} Используйте ID документа, полученного на предыдущем шаге, для получения информации о фискализации и контента чека. |
https://fp-test.bifit.com/processing-api/receipts/b28463ba-48b6-4d95-8612-d2027d804f42 |
Справочник Ошибок
Структура ошибок в формировании запросов или авторизации | Структура ошибок в бизнес логике (некорректные документы, отсутствие прав и т.д) |
{
"error": String,
"error_description": String
}
|
{
"type": String,
"message": String,
"dependentErrors": Object
}
|
Перечень статусов документов | |
|
Перечень ошибок | |
Если запрошенный по ID документ находится в статусе FAIL, это означает, что ККТ по каким-то причинам не фискализировала такую транзакцию. Перечень причин см. в правой части |
ERR20002:
statusCode: 503
code: ERR20002
description: Запрос не может быть выполнен. Попробуйте позже
ERR20005:
statusCode: 400
code: ERR20005
description: Некорректный запрос
ERR20008:
statusCode: 401
code: ERR20008
description: Некорректный пароль
ERR20012:
statusCode: 401
code: ERR20012
description: Доступ запрещен
ERR20013:
statusCode: 400
code: ERR20013
description: Ошибка ФН
ERR20014:
statusCode: 400
code: ERR20014
description: Некорректный запрос
ERR20015:
statusCode: 404
code: ERR20015
description: Неизвестный ФН
ERR20016:
statusCode: 400
code: ERR20016
description: Некорректный запрос
ERR20017:
statusCode: 400
code: ERR20017
description: Смена не открыта
ERR20018:
statusCode: 400
code: ERR20018
description: Смена превысила 24 часа
ERR20019:
statusCode: 400
code: ERR20019
description: Хост недоступен
|
См. также
- Отправка чека на повторную фискализацию
- Авторизация в OAuth2 при помощи токена коннектора
- Авторизация в OAuth2 по refresh token
- Отправка документа на фискализацию в процессинг
- Отправка документа на фискализацию в процессинг (маркированный товар)
- Отправка документа на фискализацию в процессинг (агентский товар)
- Запрос информации о документе по ID
- Оффлайн возможности фискального процессинга
- Справочник Ошибок (ФП)