Удаленное создание нефискального чека
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));