Рекуррентные платежи
Поддержка платежей
В настоящее время рекуррентные платежи Рекуррентные платежи – это возможность выполнять регулярные списания денег с банковской карты покупателя или электронного кошелька без повторного ввода реквизитов карты и без участия плательщика для инициации очередного платежа. в продукте не используются. Данный функционал реализован в рамках модуля sale для дальнейшего использования в модуле crm: CRM-форма рекуррентно обновляется, создаёт заказ, оплату, берёт токен из предыдущей оплаты, заполняет токеном новую оплату и вызывает api модуля sale для выполнения платежа.
Чтобы ваш обработчик поддерживал рекуррентные платежи, необходимо реализовать интерфейс \Bitrix\Sale\PaySystem\IRecurring
.
После выполнения успешной оплаты необходимо сохранить токен в поле оплаты PS_RECURRING_TOKEN
.
При следующей оплате нужно скопировать этот токен в новую оплату и вызывать метод по выполнению рекуррентного платежа, используя полученный токен в запросе на новый платёж.
На текущий момент рекуррентные платежи поддерживаются только ЮKassa.
Внимание! Рекуррентные платежи не поддерживаются ЮKassa при OAuth-авторизации.
Использование рекуррентных платежей доступно в облачной версии продукта или в коробочных версиях Битрикс24 (если установлен модуль crm), и такие платежи будут доступны только в CRM-формах.
Рекуррентный платёж поддерживается при следующих видах оплаты: банковская карта, ЮМоney и через виджет.
При настройке обработчика ЮKassa в форме настроек платежной системы (Магазин > Настройки > Платежные системы) появится чекбокс для установки "Автоплатежей". При включении этой настройки будет выполнен запрос на сохранение способа оплаты
Если ЮKassa подтвердит сохранение способа оплаты, то токен сохранится в поле PS_RECURRING_TOKEN
.
Чтобы выполнить автоплатёж без подтверждения со стороны пользователя, необходимо скопировать значение токена в новую оплату заказа (поле PS_RECURRING_TOKEN
).
Примечание: В дальнейшем данный функционал будет выполняться в модуле crm при использовании рекуррентных CRM-форм.
Пример
$order = \Bitrix\Sale\Order::load($id); /** @var \Bitrix\Sale\Payment $payment */ $payment = null; /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); if ($paymentCollection) { /** @var \Bitrix\Sale\Payment $value */ foreach ($paymentCollection as $value) { if (!$value->isInner()) { $payment = $value; } } } if ($payment) { $service = \Bitrix\Sale\PaySystem\Manager::getObjectById($payment->getPaymentSystemId()); $result = $service->repeatRecurringPayment($payment); if ($result->isSuccess()) { // всё хорошо, оплата выполнена, данные можно получить из $result->getData() } else { // возникли ошибки. Список ошибок можно получить из $result->getErrorMessages() } }