Настройка начисления кэшбэка за покупки 1С-Битрикс
Начисление кэшбэка — это один из компонентов кэшбэк-системы, который можно настроить даже без полноценной кастомной разработки. Битрикс имеет встроенный механизм бонусных баллов через модуль sale. Если требования простые (фиксированный процент на все покупки, без категорийных правил), это можно запустить через стандартный инструментарий.
Встроенный механизм бонусов Битрикс
Битрикс хранит бонусные баллы в таблицах:
-
b_sale_user_account— счёт пользователя -
b_sale_account_user_balance— баланс по счёту
Управление через \Bitrix\Sale\PersonalBonus (D7) или CSaleUserAccount (старое API).
Настройка в административной панели: Магазин → Накопительные скидки → Бонусы.
Начисление через событие оплаты заказа
Если стандартный механизм не устраивает, программное начисление:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderPaid',
function (\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$userId = $order->getUserId();
$total = $order->getPrice();
// Процент кэшбэка из настроек
$percent = (float)\Bitrix\Main\Config\Option::get(
'local.cashback', 'base_percent', '3'
);
$cashback = round($total * $percent / 100, 2);
if ($cashback <= 0) {
return;
}
\Local\Cashback\AccountManager::earn(
$userId,
$cashback,
"Кэшбэк {$percent}% за заказ #{$order->getId()}",
$order->getId()
);
}
);
Начисление только для подтверждённых заказов
Чтобы не начислять кэшбэк за возвращённые заказы, используем двухшаговое начисление:
- При создании заказа — транзакция со статусом
pending - При переводе в статус «Выполнен» — подтверждение (статус
confirmed) - При отмене — аннулирование pending-транзакций
// Подтверждение начисления при выполнении заказа
$em->addEventHandler('sale', 'OnSaleOrderStatusChange', function ($event) {
$order = $event->getParameter('ENTITY');
if ($order->getField('STATUS_ID') === 'F') {
\Local\Cashback\AccountManager::confirmByOrderId($order->getId());
} elseif ($order->getField('STATUS_ID') === 'X') {
\Local\Cashback\AccountManager::cancelByOrderId($order->getId());
}
});
Отображение кэшбэка на карточке товара
Покупатель видит «Вы получите 45 руб. кэшбэка» до оформления заказа — это увеличивает конверсию.
// В шаблоне карточки товара
$price = \CPrice::GetBasePrice($elementId);
$percent = (float)\Bitrix\Main\Config\Option::get('local.cashback', 'base_percent', '3');
$cashbackPreview = $price ? round($price['PRICE'] * $percent / 100, 0) : 0;
<?php if ($cashbackPreview > 0): ?>
<div class="cashback-preview">
Кэшбэк: <strong><?= $cashbackPreview ?> руб.</strong>
</div>
<?php endif; ?>
Исключения из начисления
Товары, категории или бренды, на которые кэшбэк не начисляется (уже акционные позиции, товары с нулевой маржей):
function isExcludedFromCashback(int $productId): bool
{
$props = \CIBlockElement::GetProperty(
CATALOG_IBLOCK_ID, $productId,
[], ['CODE' => 'CASHBACK_EXCLUDED']
)->Fetch();
return $props && $props['VALUE'] === 'Y';
}
Свойство CASHBACK_EXCLUDED типа «Да/Нет» добавляется в каталог и выставляется менеджером вручную или при импорте из 1С.
Сроки настройки
Обработчик события оплаты с начислением, двухшаговое подтверждение, отображение кэшбэка на карточке товара, исключения — 1–2 рабочих дня.







