Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!
В статье будет показано, как интегрировать модуль бонусов (с версии 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
)
Наглядно точки правок в шаблоне можно посмотреть на картинке:
1/ Убираем отображение служебной платежной системы оплаты бонусами
2/ формируем данные для оплаты, в
runPayProfiles()
заполняется массив $arResultEx['BONUSPAY']
3/ Выводим html-блок оплаты (можете его взять за основу и изменить)
4/ Получение бонусов за этот заказ (с учетом фильтров в профиле начисления бонусов за заказ):
5/ Выводим бонус за заказ
6/ Вывели кол-во оплаченных и пересчитали сумму
7/ проставили классы у флага и кнопки-отправки, чтобы к ним обращаться в скрипте из пункта 3
Исходный код данного шаблона доступен для скачивания.
После этих действий визуальная часть готова.
Теперь использованные бонусы должны подхватываться в оплату к заказу
Для этого воспользуемся событием
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();
После отправки заказа в административном интерфейсе видим оплаченную часть заказа бонусами:
По такому же принципу можно провести интеграцию в любой не-типовой компонент оформления заказа.
Назад в раздел