Удаленная фискализация

LifePay позволяет удаленно фискализировать продажи без необходимости во взаимодействии с принтером на месте продажи, либо агрегировать продажи из нескольких источников для печати на одном принтере

Пример распечатанного чека по запросу:

Отправка чека на печать

Тип запроса:

POST

Формат данных:

Данные в теле запроса предварительно сериализуются в json-формат

Адрес URL:

https://sapi.life-pay.ru/cloud-print/create-receipt

Описание полей

Параметр Тип Описание Обязательный
apikey Строка АПИ-ключ компании в системе Lifepay. Узнать свой АПИ-ключ можно в личном кабинете Lifepay. Да
login Строка Логин в системе Lifepay. Как правило, это номер телефона в формате 7xxxxxxxxxx. Да
purchase json Позиции в чеке. Да
test Целое Тестовый режим отправки запроса без фискализации. Может принимать значения 0, 1, или отсутствовать (фискализировать по умолчанию). В тестовом режиме uuid сгенерирован не будет, оповещения о результате фискализации отправляться не будут. Нет
mode Строка Режим печати/отправки чека. Возможные значения:
print - распечатать чек (по умолчанию),
email - отправить электронный чек по email и/или смс,
print_email - распечатать чек и отправить по email и/или смс.
Нет
type Строка Тип транзакции. Возможные значения:
payment - платеж (по умолчанию),
refund - возврат.
Нет
customer_phone Строка Номер телефона клиента в формате 7xxxxxxxxxx для отправки чека. Нет
customer_email Строка Электронный адрес клиента для отправки чека. Нет
card_amount Вещественное | Строка Сумма, оплаченная клиентом по карте. Особое значение - #. Нет
cash_amount Вещественное | Строка Сумма, оплаченная клиентом наличными. Особое значение - #. Нет
mc_amount Вещественное | Строка Сумма, оплаченная клиентом по мобильной коммерции. Особое значение - #. Нет
cashier_name Строка Имя кассира. По умолчанию - “Кассир”. Нет
target_serial Строка Серийный номер принтера, на котором надо распечатать фискальный чек. Если не задан, чек будет фискализирован на одном из фискальных принтеров. Нет
chpu_login Строка Логин, на который необходимо направить чек после печати фискального. Нет
ext_id Строка Идентификатор в сторонней системе. В случае, если в систему повторно передан запрос с одинаковым ext_id, документ создан не будет, сервер вернет uuid первого документа. Нет
callback_url Строка URL для отправки уведомления об обработке документа. Уведомление будет сформировано при смене статуса обработки документа на “обработан”, “ожидает повтора”, “ошибка”. Нет
callback_data Строка | Объект | Массив Пользовательские данные, которые будут отправлены обратно на URL, указанный в параметре callback_url. Нет
agent_sum Вещественное Вознаграждение агента. Нет
agent_phone Строка Телефон агента (произвольный формат). Нет
supplier_name Строка Наименование поставщика. Нет
supplier_address Строка Адрес поставщика. Нет
supplier_inn Строка ИНН поставщика. Нет
supplier_phone Строка Телефон поставщика (произвольный формат). Нет

Пример содержимого поля purchase:


{ "products": [ { "name": "Ананас", "price": 110, "quantity": 1, "tax": "vat18", "unit": "piece", "discount": { "type": "percent", "value": 10 } }, { "name": "Картофель", "price": 15, "quantity": 2, "tax": "vat18", "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 Строка Наименование позиции. Да
price Строка Цена за единицу. Да
quantity Вещественное Количество товаров в позиции. В случае с весовыми товарами данное значение может быть дробным (до четырех знаков после запятой, разделитель - точка). Да
tax Строка Налог на позицию. Возможные значения:
none - НДС не облагается;
vat0 - НДС по ставке 0%;
vat10 - НДС чека по ставке 10%;
vat18 - НДС чека по ставке 18%;
Нет
unit Строка Единица измерения. Доступные значения: piece - штуки (по умолчанию), kg - килограммы, g - граммы, l - литры, ml - миллилитры. Нет
discount json Скидка на позицию. Нет

Описание поля discount объекта products

Параметр Тип Описание Обязательный
type Строка Тип скидки. Возможные значения:
amount - абсолютное значение,
percent процентное значение.
Да
value Вещественное Значение скидки. Да

Замечание

  1. Ни одно из полей 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 может принимать значение #, которое будет сообщать системе, что значение является вычисляемым: # = {сумма всех позиций из products} - (card_amount + cash_amount + mc_amount). Данное значение может быть полезно для того, чтобы не вычислять сумму, которую заплатил покупатель по products и не беспокоиться о проблемах с округлением в подсчетах.

В самом простом варианте, если покупка была оплачена, например, по карте, то необходимо заполнить только card_amount = #.

В примере выше, если оплата была по карте на 100, а остальное клиент оплатил наличными, то значения полей можно заполнить как: card_amount = 100, cash_amount = #. В результате cash_amount будет вычислен автоматически и в примере выше будет равен 139.45.

  1. Параметр mode актуален для принтеров, соответствующих 54-ФЗ. Если этот параметр равен email или print_email, электронный чек будет отправлен покупателю по смс или email (в зависимости от заполненности полей customer_phone и customer_email).

  2. Параметры chpu_serial и chpu_login являются взаимозаменяемыми. Для печати на ЧПУ достаточно задать один из них.

Если оплата осуществляется через приложение 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.
                )

        )

)

Пример запроса на языке php:


$data = []; $data['apikey'] = '{your_apikey}'; $data['login'] = '{your_login}'; $data['purchase'] = ' { "products": [ { "name": "Ананас", "unit": "piece", "price": 110, "quantity": 1, "tax": "vat18", "discount": { "type": "percent", "value": 10 } }, { "name": "Картофель", "unit": "kg", "price": 15, "quantity": 2, "tax": "vat18", "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['mode'] = 'print'; $data['customer_phone'] = null; $data['customer_email'] = null; $data['cash_amount'] = 500; $data['card_amount'] = null; $data['mc_amount'] = null; $data['cashier_name'] = null; $data['target_serial'] = null; $data['chpu_serial'] = null; $data['chpu_login'] = 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));