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

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

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

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