Помимо использования модуля приёма платежей совместно с модулем интернет-магазина, вы также можете использовать его отдельно, например, для пополнения баланса пользователя сайта. Разберём подобный пример.
Создайте раздел «Личный счёт» в кабинете пользователя. Воспользуемся функционалом ведения личного счёта, который уже есть в модуле «Личный кабинет». Добавьте к созданному разделу инфоблок «Личный счёт».
Модифицируем компонент. Добавим в него форму, с помощью которой пользователь сможет выбирать платёжную систему и вводить сумму пополнения. Примерный вид отображения формы:
Код формы может выглядеть так:
<? if (!$payment_system_name):?> <form action="" method="get"> <input type="hidden" name="order_id" value="<?= time()?>"> <label>Платёжной системой: <select name="payment_system_name"> <option value="nc_payment_system_sberbank">Квитанция Сбербанка</option> <option value="nc_payment_system_qiwi">QIWI</option> <option value="nc_payment_system_webmoney">WebMoney</option> <option value="nc_payment_system_paypal">PayPal</option> </select></label> <br><br> <label>на сумму: <input name="amount" value="" placeholder="100"> руб.</label> <br><br> <input type="submit" value="Продолжить"> </form> <? endif; ?>
В ней мы передаём: номер заказа, платёжную систему и сумму. При нажатии на кнопку происходит перезагрузка страницы и данные отправляются в объект инвойса:
$invoice = null; $amount = (int)$amount; if ($payment_system_name && $amount) { echo "Пополнение на сумму $amount руб.<br><br>"; $invoice = new nc_payment_invoice(array( "amount" => $amount, "description" => "Пополнение счета", "currency" => 'RUB', "customer_id" => $AUTH_USER_ID, "customer_name" => (string)$current_user['ForumName'], "customer_email" => (string)$current_user['Email'], "customer_phone" => (string)$current_user['Phone'], "order_source" => 'auth', "order_id" => $order_id, )); $invoice->save(); }
Здесь же необходимо вызвать форму оплаты. С помощью этих двух строк будет отображена кнопка «Оплатить» открывающая окно осуществления платежа или сформированный бланк, готовый для скачивания или распечатки.
$payment_method = nc_payment_factory::create($payment_system_name); echo $payment_method->get_request_form($invoice);
По умолчанию будет показана кнопка «Оплатить», которая открывает сайт платёжной системы в новой вкладке.
Чтобы сразу перейти на сайт платёжной системы, передайте вторым аргументом false
.
Чтобы открыть сайт платёжной системы в текущей вкладке, передайте третьим аргументом false
.
// сразу перейти к сайту платёжной системы в текущей вкладке: echo $payment_method->get_request_form($invoice, false, false);
Чтобы реагировать на успешную оплату (менять статус пользователя, пополнить его счёт и т. д.) необходимо создать класс-обработчик событий. Пример такого класса приведён на странице «Обработчики событий».
Согласно закону РФ 54-ФЗ «О применении контрольно-кассовой техники» при получении средств через платёжные системы продавец обязан выдать кассовый чек, в котором перечислены продаваемые товары и услуги, их цена и ставка НДС.
Для выдачи чеков необходимо подключить один из кассовых сервисов или использовать платёжную систему с возможностью выдачи кассовых чеков.
Для передачи информации о товарах и услугах в чек необходимо передать в счёт список позиций чека при помощи метода set_items()
, затем необходимо сохранить счёт
$invoice_items = new nc_payment_invoice_item_collection(); $invoice_items->add(new nc_payment_invoice_item(array( 'name' => 'Название первой позиции чека', 'item_price' => 123.45, // цена за 1 единицу (с учётом скидок) 'qty' => 2, // количество (может быть float) 'vat_rate' => 18, // НДС в процентах (null — не облагается НДС; 0, 10 или 18) 'source_component_id' => null, // компонент исходного товара (может быть null) 'source_item_id' => null, // идентификатор исходного товара (может быть null) ))); $invoice_items->add(new nc_payment_invoice_item(array( 'name' => 'Название второй позиции чека', 'item_price' => 6789, 'qty' => 1.5, 'vat_rate' => null, ))); $invoice->set_items($invoice_items); $invoice->save();
Чеки будут отправлены в кассовый сервис после перехода счёта в статус «оплачен».