Удалённое создание нефискального чека
LifePay позволяет удаленно создать нефискальный чек по атрибутам запроса
Пример распечатанного чека по запросу:

Отправка чека на печать
Тип запроса:
POST
Формат данных:
Данные в теле запроса предварительно сериализуются в json-формат
Адрес URL:
https://sapi.life-pay.ru/cloud-print/create-non-fiscal-receipt
Описание полей
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
| apikey | Строка | АПИ-ключ компании в системе Lifepay. Узнать свой АПИ-ключ можно в личном кабинете Lifepay. | Да |
| login | Строка | Логин администратора компании или торговой точки в системе Lifepay. Если логин относится к торговой точке, к которой привязан принтер, документ будет отправлен на этот принтер. Как правило, логин - номер телефона в формате 7xxxxxxxxxx. | Да |
| purchase | json | Позиции в чеке. | Да |
| test | Целое | Тестовый режим отправки запроса без печати. Может принимать значения 0, 1, или отсутствовать (печать по умолчанию). В тестовом режиме uuid сгенерирован не будет, оповещения о результате печати отправляться не будут. | Нет |
| type | Строка | Тип документа. Возможные значения:payment - приход (по умолчанию),refund - возврат прихода,buy - расход,buy_refund - возврат расхода. | Нет |
| card_amount | Ве щественное | Строка | Сумма, оплаченная клиентом по карте. Особое значение - #. | Нет |
| cash_amount | Вещественное | Строка | Сумма, оплаченная клиентом наличными. Особое значение - #. | Нет |
| cashier_name | Строка | Имя кассира. | Нет |
| target_serial | Строка | Серийный номер принтера, на который необходимо направить чек. Если не задан, чек будет распечатан на одном из подключенных (активных) фискальных принтеров. | Нет |
| ext_id | Строка | Идентификатор в сторонней системе. Максимум 50 символов. В случае, если в систему повторно передан запрос с одинаковым ext_id, документ создан не будет, сервер вернет uuid первого документа. | Нет |
| callback_url | Строка | URL для отправки уведомления об обработке документа. Максимум 255 символов. Уведомление будет сформировано при смене статуса обработки документа на "обработан", "ожидает повтора", "ошибка". | Нет |
| callback_data | Строка | Объект | Массив | Пользовательские данные, которые будут отправлены обратно на URL, указанный в параметре callback_url. | Нет |
| ref_uuid замечание | Строка | Идентификатор, который вернул сервер при создании документа. Может использоваться только при возврате прихода (см. замечания). | Нет |
| pos описаниепример | json | Объект | Массив | Опции для подключенного POS-терминала (см. описание поля и замечания). | Нет |
| tax_system замечание | Строка | Система налогообложения.Возможные значения:osn - ОСНusn6 - УСН доходusn15 - УСН доход-расходeshn - ЕСНpatent - Патент | Нет |
| payment_place | Строка | Место осуществления расчетов между пользователем и покупателем (клиентом) | Нет |
Пример содержимого поля purchase:
{
"products": [
{
"name": "Монитор DELL U2412M",
"price": 20730.00,
"quantity": 1,
"unit": "piece",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Сканер Canon CanoScan LiDE 120",
"price": 3710.00,
"quantity": 1,
"unit": "piece",
"discount": {
"type": "percent",
"value": 10
}
}
]
}
Описание поля purchase
| Параметр | Описание |
|---|---|
| products | Массив позиций для печати |
Описание позиций в поле products
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
| name | Строка | Наименование позиции. | Да |
| price | Строка | Цена за единицу. | Да |
| quantity | Вещественное | Количество товаров в позиции. В случае с весовыми товарами данное значение может быть дробным (до трех знаков после запятой, разделитель - точка). | Да |
| unit | Строка | Единица измерения. Доступные значения: piece - штуки (по умолчанию), kg - килограммы, g - граммы, l - литры, ml - миллилитры, m2 - квадратные метры. | Нет |
| discount | json | Скидка на позицию. | Нет |
Описание поля discount объекта products
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
| type | Строка | Тип скидки. Возможные значения:amount - абсолютное значение,percent процентное значение. | Да |
| value | Вещественное | Значение скидки. | Да |
Описание поля pos
| Параметр | Описание |
|---|---|
| perform | Перед печатью принять карту через POS-терминал. Возможные значения: 0 - не использовать, 1 - использовать. |
| slip_count | Количество слип-чеков, которые необходимо распечатать после успешной транзакции по POS-терминалу. Возможные значения: 0, 1, 2. |
Замечания
- Ни одно из полей
card_amount,cash_amountне являются обязательными, но их сумма должна быть не меньше суммы позиций в чеке. Например, если сумма чека по позициям 1000, card_amount = 700, cash_amount = 500 то это означает, что покупатель оплатил покупку по карте на 700 рублей и 500 рублей наличными, сдача при этом будет составлять 200 рублей.
Если оплата была по карте, то в поле card_amount должна быть указана общая сумма, которую клиент оплатил по карте и совпадать с суммой позиций в чеке (в примере выше 239.45 рублей).
Любое из этих полей card_amount, cash_amount может прини мать значение #, которое будет сообщать системе, что значение является вычисляемым: # = {сумма всех позиций из products} - (card_amount + cash_amount).
Данное значение может быть полезно для того, чтобы не вычислять сумму, которую заплатил покупатель по products и не беспокоиться о проблемах с округлением в подсчетах.
В самом простом варианте, если покупка была оплачена, например, по карте, то необходимо заполнить только card_amount = #.
В примере выше, если оплата была по наличным на 10000, а остальное клиент оплатил электронными, то значения полей можно заполнить как: cash_amount = 10000, card_amount = #. В результате card_amount будет вычислен автоматически и в примере выше будет равен 11996.00.
-
Параметр
ref_uuidпозволяет сопоставить 2 документа - приход и возврат прихода. Актуален только для запроса возврата прихода (type = refund). В случае, если параметрref_uuidзадан, система попытается найти документ прихода и, если он будет найден и сумма возвратов не превышает суммы прихода, создаст документ возврата прихода. Если осуществляется возврат прихода с парамет ром pos (perform = 1),ref_uuidявляется обязательным для заполнения для поиска RRN платежа в документе прихода. -
Параметр
tax_systemпозволяет осуществлять продажи в случае нескольких СНО. Если товары продаются по одной СНО, а услуги по другой, необходимо сформировать 2 чека с разными значениямиtax_system. Еслиtax_systemне будет указана в запросе, система применит значение СНО, установленное в личном кабинете Lifepay. Если в личном кабинете СНО не была установлена, будет применена СНО - ОСН. -
Опция
posсо значениемperform = 1позволяет перед печатью принять оплату/возврат по POS-терминалу, в случае успеха будет распечатан чек прихода (в случаеtype = payment), либо возврата прихода (в случаеtype = refund). Сумма, которая будет отправлена на POS-терминал, берется из параметраcard_amount. Поддерживаемые терминалы: Ingenico IPP* с поддержкой библиотеки arcus2.
Особенности работы с POS-терминалом при удаленной печати.
- В рамках одной смены до сверки на POS терминале при возврате осуществляется попытка отмены, при ее неудаче обрабатывается возврат.
- Смена на терминале закрывается при снятии z-отчета на принтере, подключенному к тому же микрокомпьютеру.
- Если смена на терминале не была закрыта в течение 48 часов, сверка осуществляется автоматически спустя 48 часов.
- В рамках одного микрокомпьютера можно подключить только 1 POS терминал.
- POS терминалу может не хватать питания только лишь от микрокомпьютера (зависит от блока питания). Нехватка питания выражается в постоянной перезагрузке при попытке оплаты. Поможет подключение отдельного питания к POS-терминалу, либо замена блока питания.
- Если оплата/возврат по POS терминалу прошла, но чек по каким-либо причинам не распечатался, транзакция откатываться не будет. В зависимости от ошибки принтера, сервер предпримет попытку повторной печати.
Пример успешного ответа:
формат json
Object
(
[code] => 0
[message] =>
[data] => Object
(
[uuid] => 84fefc72-cbc5-5cc1-ba40-d00f035f05cb
)
)
uuid - уникальный идентификатор документа
Пример ответа при ошибке:
формат json
Object
(
[code] => 400
[message] => Ошибка данных.
[data] => Object
(
[purchase] => Array
(
[0] => purchase не содержит products или products не является массивом
)
)
)
Возможные значения поля code:
500Внутренняя ошибка сервера400Ошибка данных6000Неверный формат данных6009Не удалось найти пользователя по login6010Не удалось найти пользователя по login и apikey6080Облачная фискализация запрещена6095Доступ запрещен
При значении поля “code” = 500 необходимо обратиться в тех поддержку, уточнить причину появления данной ошибки.
Рекомендация:
Если http-код ответа (не путать с полем code) отличен от 200, необходимо повторять запрос с тем же ext_id через некоторые промежутки времени.
Промежутки повтора запроса могут быть, например, такими: 1 минута, 3 минуты, 5 минут, далее – один раз в 10 минут до получения http кода ответа 200.
Пример запроса на языке php.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = [
'products' => [
[
'name' => 'Монитор DELL U2412M',
'unit' => 'piece',
'price' => 20730.00,
'quantity' => 1,
'discount' => [
'type' => 'percent',
'value' => 10,
]
],
[
'name' => 'Сканер Canon CanoScan LiDE 120',
'unit' => 'piece',
'price' => 3710.00,
'quantity' => 1,
'discount' => [
'type' => 'percent',
'value' => 10,
]
],
]
];
$data['type'] = 'payment';
$data['test'] = 0;
$data['cash_amount'] = 10000;
$data['card_amount'] = '#';
$data['payment_place'] = 'м. Автозаводская (центр зала)';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-non-fiscal-receipt";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$result = curl_exec($curl);
curl_close($curl);
$resultJson = @json_decode($result);
printf("Res: %s\n", print_r($resultJson ? : $result, true));