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

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 Вещественное | Строка Сумма, оплаченная клиентом наличными. Особое значение - #. Нет
prepayment_amount Вещественное | Строка Сумма, внесенная авансом. Особое значение - #. Нет
credit_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 - миллилитры, m2 - квадратные метры. Нет
discount json Скидка на позицию. Нет
type Строка | Целое Признак предмета расчета. Для стандартных случаев данный параметр заполнять не следует.
Возможные значения:
1 - Полная предварительная оплата до момента передачи предмета расчета;
2 - Частичная предварительная оплата до момента передачи предмета расчета;
3 - Аванс;
4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета;
5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит;
6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит;
7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита);
Нет

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

  3. Функционал аванса/кредита (в соответствии с ФФД 1.05) доступен на принтерах АТОЛ начиная с версии прошивки 3689. Версию прошивки можно посмотреть в личном кабинете Lifepay в разделе Фискализация -> Принтеры.

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

        )

)

Рекомендация:

Если 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": "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;

$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": "vat18",
              "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": "vat18"
          }
      ]
  }
';
$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.

Продавец продает покупателю следующие товары, находящиеся в собственности продавца:

  1. Монитор DELL U2412M 1 шт. на сумму 20730 руб.
  2. Сканер 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": "vat18",
              "type": 5
          },
          {
              "name": "Сканер Canon CanoScan LiDE 120",
              "unit": "piece",
              "price": 3710.00,
              "quantity": 1,
              "tax": "vat18",
              "type": 5
          }
      ]
  }
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['mode'] = 'print';
$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": "vat18",
              "type": 7
          },
          {
              "name": "Оплата кредита за сканер Canon CanoScan LiDE 120",
              "unit": "piece",
              "price": 5000.00,
              "quantity": 1,
              "tax": "vat18",
              "type": 7
          }
      ]
  }
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['mode'] = 'print';
$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.

Продавец продает покупателю следующие товары, находящиеся в собственности продавца:

  1. Монитор DELL U2412M 1 шт. на сумму 20730 руб.
  2. Сканер 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": "vat18",
              "type": 4
          },
          {
              "name": "Сканер Canon CanoScan LiDE 120",
              "unit": "piece",
              "price": 3710.00,
              "quantity": 1,
              "tax": "vat18",
              "type": 4
          }
      ]
  }
';
$data['type'] = 'payment';
$data['test'] = 0;
$data['mode'] = 'print';
$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));