Налаштування списання кешбеку при оплаті 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування списання кешбеку при оплаті 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування списання кешбеку при оплаті 1С-Бітрікс

При оформленні замовлення покупець бачить доступний баланс кешбеку і хоче використати його частково або повністю. Стандартний модуль sale не має вбудованого механізму «оплата бонусами» — потрібно розширювати платіжну систему або кошик. Якщо зробити це неправильно, кешбек списується двічі або замовлення переходить у статус оплачено з неправильною сумою.

Де зберігається кешбек

Якщо кешбек-система реалізована на базі модуля loyalty або кастомного рішення, баланси зберігаються у власній таблиці, наприклад local_cashback_balances. Ключові поля: USER_ID, AMOUNT, LAST_UPDATED. Операції фіксуються в local_cashback_transactions — це історія нарахувань і списань.

Якщо використовується стандартний «Купон» або «Знижка», кешбек виражається через механізм знижок модуля catalog. Але це хибна модель для реального кешбеку — знижки не прив'язані до конкретного користувача через баланс.

Механізм списання

Коректна модель: кешбек — це форма оплати, а не знижка. У таблиці b_sale_payment буде два платежі на замовлення: один через платіжну систему (сума, що залишається), другий — «оплата бонусами» (сума кешбеку).

Реєструємо кастомний обробник платіжної системи в /local/php_interface/include/sale_payment/cashback/handler.php:

class CashbackPaySystemHandler extends \Bitrix\Sale\PaySystem\ServiceHandler
{
    public function initiatePay(
        \Bitrix\Sale\Payment $payment,
        \Yii\HttpRequest $request = null
    ): \Bitrix\Sale\PaySystem\ServiceResult
    {
        $result  = new \Bitrix\Sale\PaySystem\ServiceResult();
        $userId  = $payment->getOrder()->getUserId();
        $amount  = $payment->getSum();

        // Перевіряємо баланс
        $balance = CashbackBalanceTable::getBalance($userId);
        if ($balance < $amount) {
            $result->addError(new \Bitrix\Main\Error('Недостатньо кешбеку'));
            return $result;
        }

        // Резервуємо
        CashbackBalanceTable::reserve($userId, $amount, $payment->getId());
        $payment->setPaid('Y');
        $payment->save();

        return $result;
    }
}

Резервування, а не негайне списання — тому що замовлення може бути скасоване. Фактичне списання відбувається при зміні статусу замовлення на «Виконано».

Обробник події скасування

AddEventHandler('sale', 'OnSaleOrderCanceled', function(\Bitrix\Sale\Order $order) {
    foreach ($order->getPaymentCollection() as $payment) {
        if ($payment->getPaySystem()->getField('CODE') === 'cashback') {
            CashbackBalanceTable::releaseReserve(
                $order->getUserId(),
                $payment->getSum(),
                $payment->getId()
            );
        }
    }
});

Обмеження суми списання

Бізнес-правила: списувати не більше 30% суми замовлення, мінімальна оплата реальними грошима — 100 одиниць. Обмеження впроваджуються в компоненті чекауту (sale.order.ajax або кастомний) на рівні валідації форми (JS) і серверної перевірки.

$maxCashbackAllowed = min(
    $order->getPrice() * 0.30,          // 30% суми замовлення
    CashbackBalanceTable::getBalance($userId),  // фактичний баланс
    $order->getPrice() - 100            // мінімальна оплата грошима
);

Значення передається в JS через data-max-cashback на полі вводу.

Склад робіт

  • Розробка або адаптація таблиць балансу та транзакцій кешбеку
  • Кастомний обробник платіжної системи cashback
  • Логіка резервування/списання/повернення при скасуванні
  • Обмеження суми списання в чекауті
  • Відображення балансу та поля вводу у формі замовлення

Терміни: 1–2 тижні за наявності готової кешбек-системи. 3–4 тижні якщо кешбек-система розробляється з нуля.