Налаштування нарахування кешбеку за покупки 1С-Бітрікс
Нарахування кешбеку — це один із компонентів кешбек-системи, який можна налаштувати навіть без повноцінної кастомної розробки. 1С-Бітрікс має вбудований механізм бонусних балів через модуль sale. Якщо вимоги прості (фіксований відсоток на всі покупки, без категорійних правил), це можна запустити через стандартний інструментарій.
Вбудований механізм бонусів 1С-Бітрікс
1С-Бітрікс зберігає бонусні бали в таблицях:
-
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 робочі дні.







