Товары в чеке 54-ФЗ
Корзина товаров
При покупках в интернет магазинах клиенты, чаще всего, приобретают более одного товара. В такой ситуации, для соответствия 54-ФЗ в налоговую необходимо передавать чек покупки со сведениями обо всех приобретённых товарах и услугах. Обычно, сформировать список покупок в конкретном заказе не составляет труда, поскольку при оформлении заказа, в большинстве современных решений для интернет-магазина, используется так называемая корзина товаров (по аналогии с корзинкой для товаров в супермаркетах), которую покупатель наполняет, просматривая витрину интернет магазина.
Для формирования корректного чека необходимо в процессе инициализации оплаты передать содержимое корзины заказа. Чтобы это сделать, нужно сформировать JSON-массив объектов товарных позиций и передать в параметре cart POST-запроса на создание платежа, вместе с остальными параметрами платежа.
Формат одного объекта товарной позиции следующий:
| Поле | Назначение | Обязательное | 
| name | Наименование экземпляра товара | Да | 
| price | Стоимость единичного экземпляра товара | Да | 
| quantity | Количество экземпляров товара в данной позиции | Да | 
| sum | Полная сумма к уплате по данной товарной позиции, включая НДС | Да | 
| tax | Код налога, применяющегося к данной позиции | Да | 
| tax_sum | Сумма налога к уплате по данной товарной позиции, уже должна быть учтена в поле sum. Было обязательным до 2019 года. | Нет | 
| item_type | Код признака предмета расчёта (категория товара/услуги). Значение по умолчанию – «ТОВАР» | Нет | 
| payment_type | Код признака расчёта. Значение по умолчанию – «ПРЕДОПЛАТА 100%» | Нет | 
| Таблица 12.1 Поля объекта товарной позиции | ||
Для поля tax предусмотрены следующие возможные коды:
| Код | Значение | 
| none | НДС не облагается | 
| vat0 | НДС 0% | 
| vat10 | НДС 10% | 
| vat20 | НДС 20% | 
| vat110 | НДС 10/110 | 
| vat120 | НДС 20/120 | 
| Таблица 12.2 Типы налогов | |
Все поля данного объекта должны быть в кодировке UTF-8.
Также, необходимо обратить внимание — ставки «НДС 0%» и «НДС не облагается» применяются в разных случаях. Для предприятий работающих по упрощённой схеме налогообложения нужно указывать none — «НДС не облагается».
Сумма полных стоимостей товарных позиций должна быть равна полной стоимости заказа.
ФФД 1.05
Для соответствия ФФД 1.05 для каждой товарной позиции указывать код признака предмета расчёта и код признака расчёта. Для этих целей введены два необязательных поля: item_type и payment_type соответственно.
Для поля item_type предусмотрены следующие возможные коды:
| Код | Значение | 
| goods | Товар | 
| service | Услуга | 
| work | Работа | 
| excise | Подакцизный товар | 
| ip | Интеллектуальная деятельность, права на интеллектуальную собственность | 
| payment | Аванс, задаток, предоплата, взнос или другой платёж | 
| agent | Вознаграждение агента | 
| Таблица 12.3 Типы предметов расчёта | |
Для поля payment_type предусмотрены следующие возможные коды:
| Код | Значение | 
| prepay | Предоплата 100% | 
| part_prepay | Частичная предоплата | 
| advance | Аванс | 
| full | Полная оплата в момент передачи предмета расчёта | 
| Таблица 12.4 Типы признаков расчёта | |
Корзина в счёте
Указать список товарных позиций можно, также, при выставлении счёта через наш JSON API. В этом случае на размер результирующего объекта cart накладываются некоторые ограничения — в данный момент максимальная длина текста в переменной service_name составляет 10240 символов, и, таким образом, размер объекта ограничен 10234 символами (6 символов на спец. идентификатор). Передавать объект нужно в переменной service_name внутри специального идентификатора:
;PKC|JSON_массив_объектов_товарных_позиций|
Примеры кода
Формирование корзины на PHP:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | "cart" => json_encode(   array (     array ( 	  "name" => 'Стол обеденный 2x3', 	  "price" => 10.01, "quantity" => 1, 	  "sum" => 10.01, 	  "tax" => 'vat20', 	  "tax_sum" => 1.53, 	  "item_type" => 'goods', 	  "payment_type" => 'prepay' 	), 	array ( 	  "name" => 'Книга о вкусной и здоровой пище', 	  "price" => 1.01, 	  "quantity" => 3, 	  "sum" => 3.03, 	  "tax" => 'vat10', 	  "tax_sum" => 0.28 	)   ) ) | 
Формирование корзины на PHP, с созданием счёта через JSON API:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?php # Логин и пароль любого пользователя личного кабинета   $user = "user";   $password = "password"; # имя или IP-адрес вашего сервера с PayKeeper   $server = "example.server.paykeeper.ru"; # параметры платежа. Обязательной является только сумма.   $payment_data = array (         "pay_amount" => 7.50,         "clientid" => "Иванов Иван Иванович",         "orderid" => "Заказ № 10",         "client_email" => "test@example.com", # передача корзины товаров для формирования чека по 54-ФЗ         "service_name" => ";PKC|".json_encode( array (                                                     array (                                                             "name" => 'Стол обеденный 2x3',                                                             "price" => 1.50,                                                             "quantity" => 1,                                                             "sum" => 1.50,                                                             "tax" => 'none',                                                     ),                                                     array (                                                             "name" => 'Книга о вкусной и здоровой пище',                                                             "price" => 2,                                                             "quantity" => 3,                                                             "sum" => 6,                                                             "tax" => 'none',                                                     )                                                ))."|",         "client_phone" => "8 (910) 123-45-67"       );   $auth_header =  array (               'Authorization: Basic '.base64_encode("$user:$password")             );   $context = stream_context_create(array (       'http' => array (                 'header' => $auth_header         )       )       );   $result = json_decode(file_get_contents("http://$server/info/settings/token", FALSE, $context), TRUE);   $token = $result['token'];   $request = array_merge($payment_data, array ('token'=>$token));   $request_string = http_build_query($request);   $request_headers = array_merge($auth_header, array("Content-type: application/x-www-form-urlencoded"));   $context = stream_context_create(array (       'http' => array (                 'method' => 'POST',                 'header' => $request_headers,                 'content' => $request_string         )       )       );   $result = json_decode(file_get_contents("http://$server/change/invoice/preview", FALSE, $context), TRUE);   $invoice_id = $result['invoice_id']; # в этой переменной прямая ссылка на оплату с заданными параметрами.   $link = "https://$server/bill/$invoice_id/";   echo $link; ?> | 
Рассмотренные выше примеры кода позволяют сформировать и передать товарную корзину для дальнейшего корректного формирования чека, в соответствии с 54-ФЗ, на стороне поддерживаемого PayKeeper кассового решения.