+7 495 008 8452 пн.-пт. 10:00 – 17:00

Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!


В статье будет показано, как интегрировать модуль бонусов (с версии 3.1.31) в не-типовой компонент оформления заказа (т.е. в любой сторонний компонент, создающий заказ в модуле интернет-магазина)

Важно! Для работы через стандартный компонент заказа bitrix:sale.order.ajax - мы настоятельно рекомендуем использовать автоинтеграцию в шаблон.

Рассмотрим решение задачи на примере компонента Opensource-Компонент Заказа Bitrix от Александра Шубина.

Замечание:
Мы не призываем использовать этот компонент для решения ваших задач, тем не менее он нагляден при изучения API для работы с интернет магазином битрикс.
Статья предполагает владение навыками программирования.

Предположим, что у вас уже установлен компонент opensource:order версии 1.0.3 с шаблоном .default. Он размещен на публичной странице сайта и успешно добавляет заказы в магазин битиркс.

Нам необходимо в данный сторонний компонент оформления заказа добавить логику модуля бонусов:
1. Чтобы отображалось кол-во бонусов, которые пользователь получит за данный заказ
2. Чтобы была возможность оплатить заказ бонусами и бонусы были зачтены в заказе как оплаченная сумма.

Для других "самописных" компонентов процедуры оформления заказа операцию интеграции в шаблон можно провести по аналогии.

Сперва реализуем визуальную часть

Представлены куски кода в шаблоне .default компонента opensource:order
(файл bitrix/templates/eshop_bootstrap_v4/components/opensource/order/.default/form.php)

Наглядно точки правок в шаблоне можно посмотреть на картинке:

opensourse_order_steps.png

1/ Убираем отображение служебной платежной системы оплаты бонусами

2023-01-19_19-44-50.png

2/ формируем данные для оплаты, в runPayProfiles() заполняется массив $arResultEx['BONUSPAY']
3/ Выводим html-блок оплаты (можете его взять за основу и изменить)
4/ Получение бонусов за этот заказ (с учетом фильтров в профиле начисления бонусов за заказ):

2023-01-19_19-45-19.png

5/ Выводим бонус за заказ
6/ Вывели кол-во оплаченных и пересчитали сумму
7/ проставили классы у флага и кнопки-отправки, чтобы к ним обращаться в скрипте из пункта 3

2023-01-19_19-45-36.png

Исходный код данного шаблона доступен для скачивания.

После этих действий визуальная часть готова.

Теперь использованные бонусы должны подхватываться в оплату к заказу

Для этого воспользуемся событием OnSaleOrderSaved. Данный код можно разместить как в файле init.php (глобально повесить обработчик), так и в публичной части сайта перед подключением компонента заказа, т.е. напр. в файле personal/order/make.open/index.php перед подключением компонента $APPLICATION->IncludeComponent("opensource:order", ...)
class AcritBonusInOrderOpensourceIntegration
{
	public static function init(): void
	{
		$eventManager = Bitrix\Main\EventManager::getInstance();
		$eventManager->addEventHandler('sale', 'OnSaleOrderSaved',
			static function (Bitrix\Main\Event $event) {
				/** @var \Bitrix\Sale\Order $order */
				$order = $event->getParameter("ENTITY");
				$isNew = $event->getParameter("IS_NEW");

				if (\Bitrix\Main\Loader::includeModule('acrit.bonus') && $isNew) {
					$params = [];
					// if bonus-fields outside main order form-tag
					if ((int)$_SESSION['BONUS_PAY_USER_VALUE'] > 0) {
						$params['PAY_BONUS_ACCOUNT'] = 'Y';
					}
					\Acrit\Bonus\Core::OnSaleComponentOrderOneStepComplete($order->getId(), $order->getFieldValues(), $params);
				}
			}
		);
	}
}
AcritBonusInOrderOpensourceIntegration::init();

После отправки заказа в административном интерфейсе видим оплаченную часть заказа бонусами:

2023-01-19_20-02-56.png

По такому же принципу можно провести интеграцию в любой не-типовой компонент оформления заказа.



Назад в раздел



Часто задаваемые вопросы по модулям экспорта

Видео плейлист по настройке модулей экспорта