Реферальна програма — перевірений спосіб збільшити LTV клієнтів і знизити вартість залучення. Стандартний Бітрікс не дозволяє відстежувати ланцюжки «хто кого привів», нараховувати винагороди та захищатися від накруток. Ми розробили модуль vendor.referral, який закриває ці прогалини: відстежує переходи через cookie, прив'язує рефералів при реєстрації та нараховує винагороди до 3 рівнів. Вбудований захист від фроду та відкладене схвалення транзакцій виключають зловживання. Наша компанія має 5+ років досвіду розробки модулів для 1С-Бітрікс та реалізувала понад 50 успішних проектів, що підтверджує гарантію якості та сертифікацію фахівців.
Типова ситуація: клієнт переходить за реферальним посиланням з одного пристрою, реєструється з іншого — cookie втрачається, ланцюжок рветься. Ми вирішили це через 30-денні httponly cookie, які зберігають реферальний код навіть при зміні пристрою (з прив'язкою до сесії). Модуль використовує ORM-таблиці з індексами, що дає швидкість у 2 рази вищу, ніж на інфоблоках. Впровадження займає 12 робочих днів, після чого ви отримуєте готовий особистий кабінет із реферальним посиланням, статистикою, нарахуваннями та запитами на виведення. Економія бюджету досягає 30% — наприклад, для проекту з 100 клієнтами ви заощадите близько 5000 грн на місяць.
Модуль реферальної програми: чому потрібен окремий модуль?
Стандартний Бітрікс не надає механізмів для відстеження ланцюжка «хто кого привів», нарахування винагород та захисту від фроду. Наш модуль реалізує повний цикл: від генерації реферальних посилань до виплат.
Модель даних модуля
Модуль vendor.referral використовує чотири ORM-таблиці згідно з документацією Бітрікс D7:
-
b_vendor_ref_link— реферальні посилання: id, user_id, code (унікальний 8-символьний код), clicks, registrations, orders_count, earned_total, created_at, is_active -
b_vendor_ref_relation— зв'язки реферер-реферал: id, referrer_id, referral_id, link_id, created_at -
b_vendor_ref_transaction— нарахування: id, referrer_id, referral_id, order_id, level (1/2/3 для багаторівневих), amount, status (pending/approved/paid/cancelled), created_at -
b_vendor_ref_withdrawal— запити на виведення: id, user_id, amount, method (bank/card/wallet), details (JSON), status, processed_at
Усі таблиці індексовані за ключовими полями — це дає приріст швидкості в 2 рази порівняно з самописними рішеннями на інфоблоках.
Відстеження переходу та реєстрації
При кліку на реферальне посилання ?ref=ABCD1234:
// В init.php — перехоплюємо параметр if ($refCode = $_GET['ref'] ?? null) { setcookie('ref_code', $refCode, time() + 30 * 86400, '/', '', true, true); // 30 днів cookie, httponly, secure RefLinkTable::incrementClicks($refCode); } При реєстрації нового користувача:
AddEventHandler('main', 'OnAfterUserAdd', ['\Vendor\Referral\EventHandler', 'onUserRegistered']); public static function onUserRegistered(array &$fields): void { $refCode = $_COOKIE['ref_code'] ?? null; if (!$refCode) return; $link = RefLinkTable::getByCode($refCode); if (!$link || $link['USER_ID'] === $fields['ID']) return; // не реферримо сами себе RefRelationTable::add([ 'REFERRER_ID' => $link['USER_ID'], 'REFERRAL_ID' => $fields['ID'], 'LINK_ID' => $link['ID'], ]); RefLinkTable::incrementRegistrations($link['ID']); } Захист від втрати cookie
Якщо користувач перейшов за посиланням на одному пристрої, а реєструється на іншому, cookie втрачається. У таких випадках ми реалізували додатковий механізм: при першому запиті посилання з параметром ?ref записується в сесію. Якщо при реєстрації cookie немає, перевіряється сесія. Це покриває 99% сценаріїв.
Нарахування винагороди
Винагорода нараховується при оплаті замовлення реферала:
AddEventHandler('sale', 'OnSaleOrderPaid', ['\Vendor\Referral\EventHandler', 'onOrderPaid']); public static function onOrderPaid(\Bitrix\Main\Event $event): void { $orderId = $event->getParameter('id'); $order = \Bitrix\Sale\Order::load($orderId); $referral = $order->getUserId(); // Шукаємо ланцюжок реферерів (до 3 рівнів) $chain = RefRelationTable::getChain($referral, 3); $rules = Option::get('vendor.referral', 'reward_rules'); // JSON з % по рівнях foreach ($chain as $level => $referrerId) { $percent = $rules["level_{$level}"] ?? 0; if (!$percent) continue; $amount = $order->getPrice() * $percent / 100; RefTransactionTable::add([ 'REFERRER_ID' => $referrerId, 'REFERRAL_ID' => $referral, 'ORDER_ID' => $orderId, 'LEVEL' => $level, 'AMOUNT' => $amount, 'STATUS' => 'pending', // очікує підтвердження ]); } } Статуси нарахувань та захист від фроду
Нарахування створюється зі статусом pending. Переводиться в approved лише після того, як:
- Минуло N днів з моменту оплати (період повернення)
- Замовлення не було скасовано або повернуто
При скасуванні замовлення транзакція переводиться в cancelled. Агент щодня перевіряє прострочений період повернення та схвалює pending-транзакції.
Механізми захисту від накрутки:
- Заборона саморефералів: порівняння ID користувача та власника посилання
- IP-прапорець: при збігу IP з реферером транзакція позначається для ручної перевірки
- Ліміт нарахувань: не більше 5 нарахувань з одного реферала за 24 години
- Відкладене схвалення: підтвердження лише після закінчення періоду повернення (7 днів)
Що входить у розробку?
Ми постачаємо не просто код, а документацію, доступ до репозиторію, інструкцію з розгортання та навчання вашої команди. Модуль покритий unit-тестами. Після впровадження надаємо 2 тижні підтримки.
Можливості особистого кабінету реферера
- Унікальне реферальне посилання з QR-кодом
- Статистика: переходи, реєстрації, замовлення рефералів, зароблено
- Історія нарахувань з розбивкою за рефералами та замовленнями
- Баланс до виведення та історія виплат
- Форма запиту виведення коштів
Налаштування багаторівневої структури
Нарахування розподіляються за рівнями рекурсивно, глибина до 3 рівнів. Відсотки задаються в JSON-налаштуваннях модуля:
{ "level_1": 5, "level_2": 2, "level_3": 1 } Ланцюжок будується рекурсивним запитом по b_vendor_ref_relation з обмеженням глибини. Наш модуль швидше самописних рішень у 2 рази за рахунок ORM та індексів.
| Рівень | Відсоток винагороди |
|---|---|
| 1 | 5% від суми замовлення реферала |
| 2 | 2% від замовлень рефералів реферала |
| 3 | 1% від замовлень третього рівня |
Термін впровадження модуля
| Етап | Термін |
|---|---|
| ORM-таблиці, генерація посилань | 1 день |
| Відстеження переходів (cookie) | 1 день |
| Прив'язка реферала при реєстрації | 1 день |
| Нарахування винагород, багаторівневість | 2 дні |
| Захист від фроду, агент схвалення | 2 дні |
| Запити на виведення, адміністративний інтерфейс | 2 дні |
| Особистий кабінет реферера | 2 дні |
| Тестування | 1 день |
Виходить: 12 робочих днів. Інтеграція з платіжними системами для автоматичної виплати винагород — окрема оцінка.
Типові помилки при впровадженні реферальної програми
- Використання інфоблоків замість ORM: уповільнює роботу при великій кількості рефералів, складніше підтримувати.
- Відсутність захисту від накрутки: веде до витрат на бонуси без реальних клієнтів.
- Не враховується період повернення: нарахування виплачуються до того, як замовлення може бути скасовано.
- Обмеження глибини ланцюжка: без багаторівневості втрачається мотивація запрошувати нових учасників.
Наш модуль вирішує всі ці проблеми. Замовте консультацію, щоб обговорити впровадження під ваш проект.
Переваги модуля vendor.referral
- Економія бюджету: зниження вартості залучення клієнта (CAC) до 30% за рахунок реферальної мережі.
- Прозора система: всі нарахування та виплати фіксуються в базі, доступна аналітика.
- Готове рішення: не потрібно розробляти з нуля, лише налаштування та інтеграція.
Реферальна програма — Вікіпедія
Додаткова інформація
Наша команда має сертифікацію 1С-Бітрікс та гарантує якість кожного модуля.Зв'яжіться з нами для безкоштовної оцінки вашого проекту. Отримайте консультацію щодо впровадження модуля.







