В статье будет показано, как интегрировать модуль бонусов (с версии 3.1.31) в не-типовой компонент оформления заказа (т.е. в любой сторонний компонент, создающий заказ в модуле интернет-магазина)
Важно! Для работы через стандартный компонент заказа bitrix:sale.order.ajax
- мы настоятельно рекомендуем использовать автоинтеграцию в шаблон.
Замечание:
Мы не призываем использовать этот компонент для решения ваших задач, тем не менее он нагляден при изучения 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();
После отправки заказа в административном интерфейсе видим оплаченную часть заказа бонусами:
По такому же принципу можно провести интеграцию в любой не-типовой компонент оформления заказа.
Назад в раздел