Удаленная фискализация
LifePay позволяет удаленно фискализировать продажи без необходимости во взаимодействии с принтером на месте продажи, либо агрегировать продажи из нескольких источников для печати на одном принтере
Пример распечатанного чека по запросу:
Отправка чека на фискализацию
Тип запроса:
POST
Формат данных:
Данные в теле запроса предварительно сериализуются в json-формат
Адрес URL:
https://sapi.life-pay.ru/cloud-print/create-receipt
Условные обозначения в формате данных
Обозначение | Описание |
---|---|
Ц | Атрибут, обозначающий, что данные реквизита должны быть представлены в виде цифры |
С | Атрибут, обозначающий, что данные реквизита должны быть представлены в виде символа |
{} | Атрибут повторяемый |
Описание полей
Параметр | Тег | Тип | Описание | Обязательный | Формат | Максимальная длина |
---|---|---|---|---|---|---|
apikey | Строка | АПИ-ключ компании в системе Lifepay. Узнать свой АПИ-ключ можно в личном кабинете Lifepay. | Да | {С} | 255 | |
login | Строка | Логин администратора компании или торговой точки в системе Lifepay. Если логин относится к торговой точке, к которой привязан принтер, документ будет отправлен на этот принтер. | Да | 7{Ц} | 11 | |
purchase | Массив | Позиции в чеке. | Да | |||
test | Целое | Тестовый режим отправки запроса без фискализации. Может принимать значения 0 , 1 , или отсутствовать (фискализировать по умолчанию). В тестовом режиме uuid сгенерирован не будет, оповещения о результате фискализации отправляться не будут. |
Нет | |||
mode | Строка | Режим печати/отправки чека. Возможные значения:email - отправить электронный чек по email и/или смс,print_email - распечатать чек и отправить по email и/или смс. |
Нет | |||
type | 1054 | Строка | Тип документа. Возможные значения:payment - приход (по умолчанию),refund - возврат прихода,buy - расход,buy_refund - возврат расхода. |
Нет | ||
customer_phone | 1008 | Строка | Номер телефона клиента для отправки чека. | Нет | +{Ц} | 15 |
customer_email | 1008 | Строка | Электронный адрес клиента для отправки чека. | Нет | {С}@{С} | 64 |
customer_name | 1227 | Строка | Покупатель (клиент). | Нет | {С} | 256 |
customer_inn | 1228 | Строка | ИНН покупателя. | Нет | {Ц} | 12 |
card_amount | 1081 | Вещественное | Сумма, оплаченная клиентом по карте. Особое значение - # . |
Нет | {Ц}.ЦЦ | {Ц} | |
cash_amount | 1031 | Вещественное | Сумма, оплаченная клиентом наличными. Особое значение - # . |
Нет | {Ц}.ЦЦ | {Ц} | |
prepayment_amount | 1215 | Вещественное | Сумма, внесенная авансом. Особое значение - # . |
Нет | {Ц}.ЦЦ | {Ц} | |
credit_amount | 1216 | Вещественное | Сумма, внесенная кредитными средствами. Особое значение - # . |
Нет | {Ц}.ЦЦ | {Ц} | |
other_amount | 1217 | Вещественное | Сумма иной формы оплаты (встречное предоставление). Особое значение - # . |
Нет | {Ц}.ЦЦ | {Ц} | |
cashier_name | 1021 | Строка | Имя кассира. | Нет | {С} | 64 |
cashier_inn | 1203 | Строка | ИНН кассира. | Нет | {Ц} | 12 |
target_serial | Строка | Серийный номер принтера, на котором необходимо фискализировать данные. Если не задан, чек будет фискализирован на одном из подключенных (активных) фискальных принтеров. | Нет | {С} | ||
target_kkt_group_uuid | Строка | Идентификатор группы касс для фискализации. При задании параметра чек будет фискализирован на одном из ККТ, входящих в указанную группу. Объединить кассы в группы, и получить идентификатор можно в Личном кабинете Lifepay. | Нет | {С} | ||
chpu_login | Строка | Логин, на который необходимо направить чек после печати фискального. | Нет | 7{Ц} | ||
ext_id | Строка | Идентификатор в сторонней системе. В случае, если в систему повторно передан запрос с одинаковым ext_id, документ создан не будет, сервер вернет uuid первого документа. | Нет | {С} | 50 | |
order_number | Строка | Номер заказа в сторонней системе. Может использоваться для поиска чека в личном кабинете. | Нет | {С} | ||
callback_url | Строка | URL для отправки уведомления об обработке документа. Уведомление будет сформировано при смене статуса обработки документа на “обработан”, “ожидает повтора”, “ошибка”. | Нет | {С} | 255 | |
callback_data | Строка | Структура | Массив | Пользовательские данные, которые будут отправлены обратно на URL, указанный в параметре callback_url. | Нет | |||
ref_uuid замечание |
Строка | Идентификатор, который вернул сервер при создании документа. Может использоваться только при возврате прихода (см. замечания). | Нет | {С} | 50 | |
pos описание пример |
Структура | Опции для подключенного POS-терминала (см. описание поля и замечания). | Нет | |||
agent описание замечание пример |
1057 | Структура | Целое | Признак агента. | Нет | ||
tax_system замечание |
1055 | Строка | Система налогообложения. Возможные значения: osn - ОСНusn6 - УСН доходusn15 - УСН доход-расходeshn - ЕСНpatent - Патент |
Нет | ||
payment_place | 1187 | Строка | Место осуществления расчетов между пользователем и покупателем (клиентом) | Нет | {С} | 256 |
additional_receipt_details | 1192 | Строка | Дополнительный реквизит чека (БСО) | Нет | {С} | 16 |
receipt_header_lines описание пример |
Массив | Кастомные строки заголовка чека. | Нет | |||
sender_email | 1117 | Строка | Электронный адрес (email) отправителя чеков. | Нет | {С}@{С} | 64 |
additional_user_detail описание |
1084 | Структура | Дополнительный реквизит пользователя. | Нет |
Пример содержимого поля purchase
:
{
"products": [
{
"name": "Ананас",
"price": 110,
"quantity": 1,
"tax": "vat20",
"unit": "piece",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Картофель",
"price": 15,
"quantity": 2,
"tax": "vat20",
"unit": "kg",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Кешью",
"price": 1200,
"quantity": 0.1,
"tax": "vat10",
"unit": "kg",
"discount": {
"type": "amount",
"value": 6.55
}
}
]
}
Описание поля purchase
Параметр | Описание |
---|---|
products | Список позиций для печати |
Описание позиций в поле products
Параметр | Тег | Тип | Описание | Обязательный | Формат | Максимальная длина |
---|---|---|---|---|---|---|
name | 1030 | Строка | Наименование позиции. | Да | {С} | 128 |
price | 1079 | Вещественное | Цена за единицу. | Да | {Ц}.ЦЦ | {Ц} | |
quantity | 1023 | Вещественное | Количество товаров в позиции. | Да | {Ц}.ЦЦЦ | {Ц} | |
tax | 1199 | Строка | Налог на позицию. Возможные значения: none - НДС не облагается;vat0 - НДС по ставке 0%;vat10 - НДС чека по ставке 10%;vat20 - НДС чека по ставке 20%;vat110 - НДС расчитанный 10/110;vat120 - НДС расчитанный 20/120; |
Нет | ||
unit | Строка | Единица измерения. Доступные значения: piece - штуки, kg - килограммы, g - граммы, l - литры, ml - миллилитры, m2 - квадратные метры. |
Нет | |||
discount | Структура | Скидка на позицию. | Нет | |||
type | 1214 | Целое | Признак способа расчета. Для стандартных случаев данный параметр заполнять не следует. Возможные значения: 1 - Полная предварительная оплата до момента передачи предмета расчета;2 - Частичная предварительная оплата до момента передачи предмета расчета;3 - Аванс;4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета;5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит;6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит;7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита); |
Нет | ||
item_type | 1212 | Целое | Признак предмета расчета. Возможные значения: 1 - Товар;2 - Подакцизный товар;3 - Работа;4 - Услуга;5 - Ставка азартной игры;6 - Выигрыш азартной игры;7 - Лотерейный билет;8 - Выигрыш лотереи;9 - Предоставление результатов интеллектуальной деятельности;10 - Платеж;11 - Агентское вознаграждение;12 - Составной предмет расчета;13 - Иной предмет расчета; |
Нет | ||
agent_item_type описание пример |
1222 | Массив | Признак агента по предмету расчета. | Нет | ||
agent_data | 1223 | Структура | Данные агента. | Нет | ||
supplier_data | 1224 | Структура | Данные поставщика. | Нет | ||
supplier_inn | 1226 | Строка | ИНН поставщика. Должен быть корректным. | Да, если задано supplier_data | {Ц} | 12 |
marking_code | 1162 | Строка | Код маркировки, полученный от сканера. Будет разобрано в тег 1162 автоматически. Пример: Переданное значение: 010460043993125621JgXJ5.T\u001d8005112000\u001d930001\u001d923zbrLA==\u001d24014276281 Разобранное значение 1162: 444D042F1F9681784A67584A352E54313132303030 (hex). |
Нет | {С} | 32 |
country_code | 1230 | Строка | Код страны происхождения товара. | Нет | ЦЦЦ | 3 |
declaration_number | 1231 | Строка | Номер таможенной декларации. | Нет | {С} | 32 |
excise_amount | 1229 | Вещественное | Сумма акциза в рублях. | Нет | {Ц}.ЦЦ | {Ц} | |
additional_detail | 1191 | Строка | Дополнительный реквизит предмета расчета. | Нет | {С} | 64 |
unit_value | 1197 | Строка | Единица измерения предмета расчета. | Нет | {С} | 16 |
Описание поля discount
объекта products
Параметр | Тип | Описание | Обязательный | Формат | Максимальная длина |
---|---|---|---|---|---|
type | Строка | Тип скидки. Возможные значения:amount - абсолютное значение,percent процентное значение. |
Да | ||
value | Вещественное | Значение скидки. | Да | {Ц}.ЦЦ | {Ц} |
Описание поля agent_data
объекта products
Параметр | Тег | Тип | Описание | Формат | Максимальная длина |
---|---|---|---|---|---|
tag1005 | 1005 | Строка | Адрес оператора перевода. | {С} | 256 |
tag1016 | 1016 | Строка | ИНН оператора перевода. Должен быть корректным. | {Ц} | 12 |
tag1026 | 1026 | Строка | Наименование оператора перевода. | {С} | 64 |
tag1075 | 1075 | Массив строк | Телефон оператора перевода. | [+{Ц}] | 19 (для каждого элемента) |
tag1044 | 1044 | Строка | Операция платежного агента. | {С} | 24 |
tag1073 | 1073 | Массив строк | Телефон платежного агента. | [+{Ц}] | 19 (для каждого элемента) |
tag1074 | 1074 | Массив строк | Телефон оператора по приему платежей. | [+{Ц}] | 19 (для каждого элемента) |
Описание поля supplier_data
объекта products
Параметр | Тег | Тип | Описание | Формат | Максимальная длина |
---|---|---|---|---|---|
tag1171 | 1171 | Массив строк | Телефон поставщика. | [+{Ц}] | 19 (для каждого элемента) |
tag1225 | 1225 | Строка | Наименование поставщика. | {С} | 256 |
Описание поля pos
Параметр | Описание |
---|---|
perform | Перед фискализацией принять карту через POS-терминал. Возможные значения: 0 - не использовать, 1 - использовать. |
slip_count | Количество слип-чеков, которые необходимо распечатать после успешной транзакции по POS-терминалу. Возможные значения: 0, 1, 2. |
Описание поля agent
, agent_item_type
Параметр | Описание |
---|---|
bankPaymentAgent | Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным агентом. Возможные значения: 0 - нет, 1 - да. |
bankPaymentSubagent | Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным субагентом. Возможные значения: 0 - нет, 1 - да. |
paymentAgent | Оказание услуг покупателю (клиенту) пользователем, являющимся платежным агентом. Возможные значения: 0 - нет, 1 - да. |
paymentSubagent | Оказание услуг покупателю (клиенту) пользователем, являющимся платежным субагентом. Возможные значения: 0 - нет, 1 - да. |
attorney | Осуществление расчета с покупателем (клиентом) пользователем, являющимся поверенным. Возможные значения: 0 - нет, 1 - да. |
commissioner | Осуществление расчета с покупателем (клиентом) пользователем, являющимся комиссионером. Возможные значения: 0 - нет, 1 - да. |
agent | Осуществление расчета с покупателем (клиентом) пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером. Возможные значения: 0 - нет, 1 - да. |
Описание поля receipt_header_lines
Содержит массив строк:
Параметр | Тип | Описание |
---|---|---|
text | Строка | Строка для печати. |
align | Строка | Выравнивание текста. Возможные значения: left , center , right . По умолчанию left . |
text_wrap | Строка | Перенос строки. Возможные значения: no - не переносить, words - переносить по словам. По умолчанию no . |
char_size_multiply | Целое | Мультипликатор ширины и высоты символов. Возможные значения: 1 , 2 . По умолчанию 1 . |
Описание поля additional_user_detail
Параметр | Тег | Тип | Описание | Формат | Максимальная длина |
---|---|---|---|---|---|
tag1085 | 1085 | Строка | Наименование дополнительного реквизита пользователя. | {С} | 64 |
tag1086 | 1086 | Строка | Значение дополнительного реквизита пользователя. | {С} | 256 |
Замечания
- Ни одно из полей
card_amount
,cash_amount
,mc_amount
не являются обязательными, но их сумма должна быть не меньше суммы позиций в чеке. Например, если сумма чека по позициям 1000, card_amount = 700, cash_amount = 500 то это означает, что покупатель оплатил покупку по карте на 700 рублей и 500 рублей наличными, сдача при этом будет составлять 200 рублей.
Если оплата была по карте, то в поле card_amount
должна быть указана общая сумма, которую клиент оплатил картой и совпадать с суммой позиций в чеке (в примере выше 239.45 рублей).
Любое из этих полей card_amount
, cash_amount
, mc_amount
, prepayment_amount
, credit_amount
, other_amount
может принимать значение #
, которое будет сообщать системе, что значение является вычисляемым: # = {сумма всех позиций из products} - (card_amount + cash_amount + mc_amount + prepayment_amount + credit_amount + other_amount)
.
Данное значение может быть полезно для того, чтобы не вычислять сумму, которую заплатил покупатель по products
и не беспокоиться о проблемах с округлением в подсчетах.
В самом простом варианте, если покупка была оплачена, например, по карте, то необходимо заполнить только card_amount = #
.
В примере выше, если оплата была по карте на 100, а остальное клиент оплатил наличными, то значения полей можно заполнить как: card_amount = 100
, cash_amount = #
. В результате cash_amount
будет вычислен автоматически и в примере выше будет равен 139.45
.
Параметр
mode
актуален для принтеров, соответствующих 54-ФЗ. Если этот параметр равенemail
илиprint_email
, электронный чек будет отправлен покупателю по смс или email (в зависимости от заполненности полейcustomer_phone
иcustomer_email
).Функционал аванса/кредита (в соответствии с ФФД 1.05) доступен на принтерах АТОЛ начиная с версии прошивки 3689. Версию прошивки можно посмотреть в личном кабинете Lifepay в разделе Фискализация -> Принтеры.
Параметр
ref_uuid
позволяет сопоставить 2 документа - приход и возврат прихода. Актуален только для запроса возврата прихода (type = refund
). В случае, если параметрref_uuid
задан, система попытается найти документ прихода и, если он будет найден и сумма возвратов не превышает суммы прихода, создаст документ возврата прихода. Если осуществляется возврат прихода с параметром pos (perform = 1
),ref_uuid
является обязательным для заполнения для поиска RRN платежа в документе прихода.Признак агента на чек передается только в случае если все позиции чека содержат признак агента по позиции -
agent_item_type
, иначе этот реквизит будет проигнорирован.Параметр
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 терминалу прошла, но чек по каким-либо причинам не распечатался, транзакция откатываться не будет. В зависимости от ошибки принтера, сервер предпримет попытку повторной печати.
Если оплата осуществляется через приложение Lifepay, а в личном кабинете в разделе “Фискализация” -> “Сотрудники” разрешена для указанного логина удаленная фискализация и печать на ЧПУ, чек на ЧПУ будет отправлен на устройство с которого был принят платеж.
Список принтеров или логины пользователей, которые подключены к организации можно посмотреть в личном кабинете Lifepay.
Пример успешного ответа:
формат json
Object
(
[code] => 0
[message] =>
[data] => Object
(
[uuid] => dabe3833-43ff-5e5c-a45e-9cff664503ff
)
)
uuid
- уникальный идентификатор документа
Пример ответа при ошибке:
формат json
Object
(
[code] => 400
[message] => Ошибка данных.
[data] => Object
(
[purchase] => Array
(
[0] => Ошибка в позиции 1: Значение «Value» не должно превышать 100.
)
)
)
Возможные значения поля code
:
500
Внутренняя ошибка сервера400
Ошибка данных6000
Неверный формат данных6009
Не удалось найти пользователя по login6010
Не удалось найти пользователя по login и apikey6080
Облачная фискализация запрещена6095
Доступ запрещен
При значении поля “code” = 500 необходимо обратиться в тех поддержку, уточнить причину появления данной ошибки.
Рекомендация:
Если http-код ответа (не путать с полем code
) отличен от 200, необходимо повторять запрос с тем же ext_id через некоторые промежутки времени.
Промежутки повтора запроса могут быть, например, такими: 1 минута, 3 минуты, 5 минут, далее – один раз в 10 минут до получения http кода ответа 200.
Продажа наличными. Пример запроса на языке php.
Продажа трех позиций на общую сумму 239,45 руб. Покупатель дал 500 руб. Сдача составляет 260,55 руб.
Выставлен режим печати бумажного чека.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Ананас",
"unit": "piece",
"price": 110,
"quantity": 1,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Картофель",
"unit": "kg",
"price": 15,
"quantity": 2,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Кешью",
"unit": "kg",
"price": 1200,
"quantity": 0.1,
"tax": "vat10",
"discount": {
"type": "amount",
"value": 6.55
}
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = 500;
$data['card_amount'] = null;
$data['payment_place'] = 'Станция метро Третьяковская (центр зала)';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Возврат по безналичным. Пример запроса на языке php.
Возврат покупки. Во избежание возможных проблем с округлением, поле card_amount
заполнено значением #
.
Выставлен режим отправки электронного чека.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Пылесос SAMSUNG SC6573",
"unit": "piece",
"price": 9500.59,
"quantity": 1,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 33
}
}
]
}
';
$data['type'] = 'refund';
$data['test'] = 0;
$data['mode'] = 'email';
$data['customer_phone'] = null;
$data['customer_email'] = '{customer_email}';
$data['cash_amount'] = null;
$data['card_amount'] = '#';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа с частичной оплатой наличными. Пример запроса на языке php.
Оплата покупателем покупки с оплатой по наличным 15000 руб., и остатка по карте.
Выставлен режим печати бумажного и отправки электронного чека.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Холодильник Bosch KGV36NL1AR",
"unit": "piece",
"price": 26990,
"quantity": 1,
"tax": "vat20"
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['mode'] = 'print_email';
$data['customer_phone'] = null;
$data['customer_email'] = '{customer_email}';
$data['cash_amount'] = 15000;
$data['card_amount'] = '#';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа товара в рассрочку. Пример запроса на языке php.
Продавец продает покупателю следующие товары, находящиеся в собственности продавца:
- Монитор DELL U2412M 1 шт. на сумму 20730 руб.
- Сканер Canon CanoScan LiDE 120 1 шт. на сумму 3710 руб. Итого: 24440 руб.
Для оплаты товара продавец предоставляет покупателю рассрочку на 2 месяца на сумму 20000 руб. Заключен договор No 123 от 01.02.2017. Ежемесячные платежи составят 10000 рублей до 04.04.2017. Остальные денежные средства в размере 4440 руб. оплачены покупателем наличными 01.02.2017.
1) Покупатель оплатил товар в рассрочку. 01.02.2017 будет сформирован чек по запросу:
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Монитор DELL U2412M",
"unit": "piece",
"price": 20730.00,
"quantity": 1,
"tax": "vat20",
"type": 5
},
{
"name": "Сканер Canon CanoScan LiDE 120",
"unit": "piece",
"price": 3710.00,
"quantity": 1,
"tax": "vat20",
"type": 5
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = '#';
$data['card_amount'] = null;
$data['credit_amount'] = 20000;
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
2) Покупатель оплатил кредит картой. 01.03.2017 и 01.04.2017 чеки будут сформированы следующим запросом:
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Оплата кредита за монитор DELL U2412M",
"unit": "piece",
"price": 5000.00,
"quantity": 1,
"tax": "vat20",
"type": 7
},
{
"name": "Оплата кредита за сканер Canon CanoScan LiDE 120",
"unit": "piece",
"price": 5000.00,
"quantity": 1,
"tax": "vat20",
"type": 7
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = null;
$data['card_amount'] = '#';
$data['credit_amount'] = null;
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа товара с использованием кредитных средств. Пример запроса на языке php.
Продавец продает покупателю следующие товары, находящиеся в собственности продавца:
- Монитор DELL U2412M 1 шт. на сумму 20730 руб.
- Сканер Canon CanoScan LiDE 120 1 шт. на сумму 3710 руб. Итого: 24440 руб.
01.02.2017 между покупателем и Банком (кредитной организацией) заключен договор на предоставление потребительского кредита на покупку указанных товаров на сумму 20000 руб. Оплата за товар произведена следующим образом: • 4440 руб. оплачены клиентом наличными денежными средствами 01.02.2017; • 20000 руб. оплачены с использованием кредитных средств кредитной организации.
Запрос на формирование кассового чека будет выглядеть следующим образом:
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Монитор DELL U2412M",
"unit": "piece",
"price": 20730.00,
"quantity": 1,
"tax": "vat20",
"type": 4
},
{
"name": "Сканер Canon CanoScan LiDE 120",
"unit": "piece",
"price": 3710.00,
"quantity": 1,
"tax": "vat20",
"type": 4
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = '#';
$data['card_amount'] = null;
$data['credit_amount'] = 20000;
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа с использованием POS-терминала. Пример запроса на языке php.
Оплата покупателем покупки с оплатой по наличным 15000 руб., и остатка по карте. После успешной оплаты по POS-терминалу будут распечатаны фискальный чек и 2 слип-чека.
Выставлен режим печати бумажного и отправки электронного чека.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Холодильник Bosch KGV36NL1AR",
"unit": "piece",
"price": 26990,
"quantity": 1,
"tax": "vat20"
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['mode'] = 'print_email';
$data['customer_phone'] = null;
$data['customer_email'] = '{customer_email}';
$data['cash_amount'] = 15000;
$data['card_amount'] = '#';
$data['pos'] = [
'perform' => 1,
'slip_count' => 2,
];
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Возврат с использованием POS-терминала. Пример запроса на языке php.
Возврат покупки из предыдущего примера. После успешного возврата по POS-терминалу будут распечатаны фискальный чек и 1 слип-чек.
Выставлен режим печати бумажного и отправки электронного чека.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Холодильник Bosch KGV36NL1AR",
"unit": "piece",
"price": 26990,
"quantity": 1,
"tax": "vat20"
}
]
}
';
$data['type'] = 'refund';
$data['test'] = 0;
$data['mode'] = 'print_email';
$data['customer_phone'] = null;
$data['customer_email'] = '{customer_email}';
$data['cash_amount'] = 15000;
$data['card_amount'] = '#';
$data['ref_uuid'] = '{payment_uuid}';
$data['pos'] = [
'perform' => 1,
'slip_count' => 1,
];
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа c проставлением признака агента. Пример запроса на языке php.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Ананас",
"unit": "piece",
"price": 110,
"quantity": 1,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Картофель",
"unit": "kg",
"price": 15,
"quantity": 2,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 10
}
},
{
"name": "Кешью",
"unit": "kg",
"price": 1200,
"quantity": 0.1,
"tax": "vat10",
"discount": {
"type": "amount",
"value": 6.55
}
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = 500;
$data['card_amount'] = null;
$data['agent'] = [
'bankPaymentAgent' => 1,
];
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Продажа c проставлением данных агента и поставщика для позиций. Пример запроса на языке php.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Конструктор LEGO Super Heroes 76107",
"price": 4990,
"quantity": 1,
"tax": "vat20",
"discount": {
"type": "percent",
"value": 5
},
"agent_data": {
"tag1005": "Ленинская Слобода, 19",
"tag1016": "123456789047",
"tag1026": "Оператор 1",
"tag1044": "Оплата",
"tag1073": ["+75555555555", "8 (495) 123-23-23"],
"tag1074": ["+71234567890"],
"tag1075": []
},
"supplier_inn": "1234567894",
"supplier_data": {
"tag1171": ["+75555555555", "8 (495) 123-23-23"],
"tag1225": "ООО Поставщик"
},
"agent_item_type": {
"agent": 1
}
},
{
"name": "Доставка",
"price": 300,
"quantity": 1,
"tax": "none"
}
]
}
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['customer_phone'] = null;
$data['customer_email'] = null;
$data['cash_amount'] = '#';
$data['card_amount'] = null;
$data['tax_system'] = 'usn15';
$data['agent'] = [
'agent' => 1,
];
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));
Фискализация с заданием кастомного заголовка чека. Пример запроса на языке php.
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['purchase'] = '
{
"products": [
{
"name": "Конструктор LEGO Super Heroes 76107",
"price": 4990,
"quantity": 1,
"tax": "vat20"
},
{
"name": "Доставка",
"price": 300,
"quantity": 1,
"tax": "none"
}
]
}
';
$data['receipt_header_lines'] = [
[
'text' => 'Заказ 23893',
'char_size_multiply' => 2,
],
[
'text' => 'Для возврата товара обращайтесь по телефону 75555555555',
'align' => 'center',
'text_wrap' => 'words',
]
];
$data['type'] = 'payment';
$data['test'] = 0;
$data['cash_amount'] = '#';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-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));