Пример реализации простой кассы на REST API
Добавление обработчика кассы
Пример добавления обработчика кассы с возможностью настройки данных для авторизации, информации о компании и режиме работы кассы:
BX24.callMethod( "sale.cashbox.handler.add", { "CODE": "my_rest_cashbox", "NAME": "Моя REST-касса", "SORT": 100, "SETTINGS": { "PRINT_URL": "http:\/\/example.com\/rest_print.php", "CHECK_URL": "http:\/\/example.com\/rest_check.php", "CONFIG": { "AUTH": { "LABEL": "Авторизация", "ITEMS": { "LOGIN": { "TYPE": "STRING", "REQUIRED": "Y", "LABEL": "Логин" }, "PASSWORD": { "TYPE": "STRING", "REQUIRED": "Y", "LABEL": "Пароль" }, } }, "COMPANY": { "LABEL": "Данные об организации", "ITEMS": { "INN": { "TYPE": "STRING", "REQUIRED": "Y", "LABEL": "ИНН организации" } } }, "INTERACTION": { "LABEL": "Настройки взаимодействия с кассой", "ITEMS": { "MODE": { "TYPE": "ENUM", "LABEL": "Режим работы с кассой", "OPTIONS": { "ACTIVE": "боевой", "TEST": "тестовый" } } } } } } }, function(result) { if(result.error()) console.error(result.error()); else console.dir(result.data()); } );
Добавленная касса настраивается пользователем через настройки магазина или через Центр продаж. Пример настройки:
- Вкладка Касса:
- Вкладка Настройки:
Страница PRINT_URL
Страница PRINT_URL - адрес, на который отправляются данные для печати чека.
Структура POST-параметров, отправляемых на адрес PRINT_URL:
Параметр | Описание |
---|---|
type | Тип чека. Значения:
|
operation | Признак прихода/расхода. Значения:
|
unique_id | ID чека в базе данных портала. |
items | Массив товаров в чеке. Структура элементов массива:
|
date_create | Дата создания чека (timestamp). |
payments | Массив оплат. Структура элементов массива:
|
client_email | E-mail клиента. |
total_sum | Общая сумма по чеку. |
uuid | Идентификатор документа во внешней системе (портал Битрикс24). |
number_kkm | Внешний идентификатор кассы (из настроек кассы). |
service_email | Email (из настроек кассы). |
cashbox_params | Массив настроек кассы. Структура задаётся параметром CONFIG массива SETTINGS, указанного в качестве параметра метода sale.cashbox.handler.add. |
По адресу PRINT_URL происходит обработка входных данных, формирование документа и возвращение результата печати. Ответом в случае ошибки служит JSON-массив вида:
{ "ERRORS": [ "Сообщение об ошибке", "Сообщение об ошибке", ... ] }
При успешной печати массив имеет вид:
{ "UUID": "00112233-4455-6677-8899-aabbccddeeff" }
Пример реализации простого обработчика:
<?php $login = $_REQUEST['cashbox_params']['AUTH']['LOGIN']; $password = $_REQUEST['cashbox_params']['AUTH']['PASSWORD']; if (empty($login) || empty($password)) { echo json_encode([ 'ERRORS' => [ 'Authorization data is missing', ] ]); die(); } // произведение необходимых действий: авторизация пользователя, обработка данных, регистрация чека в системе, ... echo json_encode([ 'UUID' => $resultUUID, ]);
Страница CHECK_URL
Страница CHECK_URL - адрес, по которому происходит проверка успешности печати чека.
Запрос по адресу CHECK_URL производится по запросу менеджера либо спустя некоторое время после успешной печати чека.
Структура POST-параметров, отправляемых на адрес PRINT_URL:
Параметр | Описание |
---|---|
uuid | Идентификатор чека. |
Запрос по адресу CHECK_URL должен возвращать данные о чеке, данные об ошибке, возникшей при печати, либо статус “в ожидании печати”.
Пример реализации простого обработчика:
<?php $uuid = $_REQUEST['uuid']; // произведение необходимых действий: проверка статуса чека, ... // при печати чека произошла ошибка if ($result['ERROR']) { echo json_encode([ 'STATUS' => 'ERROR', 'ERROR' => 'Сообщение об ошибке' ]); die(); } // чек ещё не напечатан if ($result['WAIT']) { echo json_encode([ 'STATUS' => 'WAIT', ]); die(); } // отправка результата echo json_encode([ 'STATUS' => 'DONE', 'UUID' => $uuid, 'REG_NUMBER_KKT' => '000111222333', 'FISCAL_DOC_ATTR' => '33445500', 'FISCAL_DOC_NUMBER' => 123, 'FISCAL_RECEIPT_NUMBER' => 10, 'FN_NUMBER' => '0011223344556677', 'SHIFT_NUMBER' => 12, 'PRINT_END_TIME' => 1609452000, ]);
Данные, возвращаемые CHECK_URL, сохраняются в базу данных и используются для генерации ссылки на чек.