Документация для разработчиков
Темная тема

Рекуррентные платежи

Поддержка платежей

В настоящее время рекуррентные платежи Рекуррентные платежи – это возможность выполнять регулярные списания денег с банковской карты покупателя или электронного кошелька без повторного ввода реквизитов карты и без участия плательщика для инициации очередного платежа. в продукте не используются. Данный функционал реализован в рамках модуля 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()
	}
}



© «Битрикс», 2001-2024, «1С-Битрикс», 2024