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

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

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

Чтобы ваш обработчик поддерживал рекуррентные платежи, Рекуррентные платежи - это возможность выполнять регулярные списания денег с банковской карты покупателя или электронного кошелька без повторного ввода реквизитов карты и без участия плательщика для инициации очередного платежа. необходимо реализовать интерфейс \Bitrix\Sale\PaySystem\IRecurring.

После выполнения успешной оплаты необходимо сохранить токен в поле оплаты PS_RECURRING_TOKEN.

При следующей оплате нужно скопировать этот токен в новую оплату и вызывать метод по выполнению рекуррентного платежа, используя полученный токен в запросе на новый платёж.

В настоящее время рекуррентные платежи в продукте не используются. Данный функционал реализован в рамках модуля sale для дальнейшего использования в модуле crm.

На текущий момент рекуррентные платежи поддерживаются только Яндекс.Кассой.


Внимание! Рекуррентные платежи не поддерживаются Яндекс.Кассой при OAuth-авторизации.
Использование рекуррентных платежей доступно только в облачной версии продукта.

Рекуррентный платёж поддерживается при следующих видах оплаты: банковская карта, Яндекс.Деньги и через виджет.

При настройке обработчика Яндекс.Кассы в форме настроек платежной системы (Магазин > Настройки > Платежные системы) появится чекбокс для установки "Автоплатежей". При включении этой настройки будет выполнен запрос на сохранение способа оплаты

Если Яндекс.Касса подтвердит сохранение способа оплаты, то токен сохранится в поле 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-2020, «1С-Битрикс», 2020
Наверх