Документация BILLmanager 6

Как работает реферальная программа

Реферальная программа — вид сотрудничества между клиентом и провайдером, при котором клиент получает реферальную ссылку или промокод. Такой клиент считается партнёром или реферером, а новые клиенты, которые зарегистрировались по этой ссылке (промокоду), — рефералами. Партнёр получает процент от расходов своих рефералов.

По промокоду можно привязать только нового клиента, у которого нет услуг.

Результаты реферальной программы:

  • партнёр получает прибыль за счёт привлечённых клиентов;
  • провайдер получает новых клиентов и рекламу силами партнёра.

О том, как создать реферальную программу см. в статье Реферальная программа. Общая информация.

Информация в данной статье актуальна для версии BILLmanager выше 6.135. Информация о том, как работает реферальная программа в версиях ниже, см. в статье Как работает реферальная программа (для версий 6.134 и ниже)

Настройка интеграции с сайтом

Чтобы настроить интеграцию реферальной программы с сайтом, при создании реферальной программы укажите URL сайта в настройках. 

Если URL сайта — это адрес BILLmanager, дополнительных действий не требуется. Платформа будет автоматически извлекать значение параметра из запроса и регистрировать переход по реферальной ссылке.

Если URL — сторонний сайт, выполните дополнительные действия:

  1. Со стороны сайта выполните запрос к платформе следующего вида:

    https://bill_address?func=referralprogram.registerclick&p=https%3A%2F%2Fsite.com%2F%3Ffrom%3D2&out=xjson

    Где:

    • bill_address — IP-адрес сервера с платформой;
    • func=referralprogram.registerclick — функция, регистрирующая переход по реферальной ссылке;
    • &p=адрес_сайта — URL-кодированная ссылка, по которой перешёл клиент. Специальные символы должны быть заменены на коды в соответствии с процентным кодированием. Процентное кодирование (или URL-кодирование) — способ безопасно передавать специальные символы в ссылках (URL). Например, для URL  https://site.com/?from=2 укажите &p=https%3A%2F%2Fsite.com%2F%3Ffrom%3D2. Этот адрес указан в личном кабинете реферера и предоставляется им потенциальным рефералам;
    • out=xjson — формат ответа.

    Платформа регистрирует переход и возвращает уникальный идентификатор в поле doc["cntid"]["$"] JSON-ответа. Полученный идентификатор сохраняется на стороне сайта и передаётся параметром при последующем редиректе в BILLmanager.

    Пример HTML-страницы с интеграцией реферальной программы и кнопкой перехода в BILLmanager:
    <html>
    <head>
        <script type="text/javascript">
            function getBillCntid() {
                var req = new XMLHttpRequest();
                req.responseType = 'json';
                req.onload = function() {
                    if (req.status == 200) {
                        var json = req.response;
                        var doc = json.doc;
                        if (doc["cntid"]) {
                            // Если от платформы вернулся cntid, сохраняем его в localStorage
                            localStorage.setItem("bill_cntid", doc["cntid"]["$"])
                        }
                    }
                }
                // Запрос к платформе, параметр p передаёт текущий URL, который может содержать параметр с реферером.
                req.open("GET", "https://billmgr_addr/?func=referralprogram.registerclick&p=" + encodeURIComponent(window.location.href) + "&out=xjson", true);
                req.send(null);
            }
            if (!localStorage.hasOwnProperty("bill_cntid")) {
                getBillCntid();
            }
        </script>
    
    </head>
    <body>
        <script type="text/javascript">
            function gotoBillManager() {
                var url = "https://billmgr_addr";
                // Если нашли идентификатор подключения к реферальной программе (bill_cntid) в localStorage, то добавляем параметром:
                if (localStorage.getItem("bill_cntid") !== null) {
                    url += "?cntid=" + localStorage.getItem('bill_cntid');
                }
                window.location.href=url
            }
        </script>
        <input type="button" onclick="gotoBillManager();" value="Go to BILLmanager">
    </body>
    </html>
    Пояснения к HTML-коду

Таблицы БД

Таблица referralprogram содержит информацию о реферальных программах:

nameprojecturlpromocodeaccount_groupaccount_group_restrictassign_by_defaultstart_dateend_date
Referral Program1https://example.com/refPROMO202551012025-01-012025-12-31
Пояснения к таблице БД

Таблица referralprogram_rule содержит правила реферальных программ, задаваемые для конкретной реферальной программы:

referralprogramreward_value_fixedreward_value_percentreward_max_amountreward_months_afterreward_expense_periodreward_periodreward_payment_intervalstatus
10.0010.005000.00111210
Пояснения к таблице БД

Таблица referralprogram_condition содержит условия, задаваемые для конкретного правила реферальной программы:

referralprogram_rulectypecgroupcomparisonamountorderperiodsitem_countreferral_countproduct_treestatus
110ge10000.003NULLNULLNULL0
Пояснения к таблице БД

Таблица referralprogram_click фиксирует переходы к реферальной программе:

referer_accountreferral_accountipsesidsitecdateproject
101205192.168.1.100a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8https://example.com/ref?ref=1012025-11-01 14:30:001
Пояснения к таблице БД

Таблица referralprogram_referer устанавливает связь реферера с реферальной программой:

accountprojectreferralprogram
10113
Пояснения к таблице БД

Таблица referralprogram_link устанавливает связь реферера, реферала и реферальной программы:

referer_accountreferral_accountreferralprogram
1012053
Пояснения к таблице БД

Таблица referralprogram_reward содержит информацию о вознаграждениях по реферальной программе:

referralprogramreferralprogram_rulereferral_accountreferer_accountamountcurrencyexpensepaymentcdate
312051011250.00RUB500178902025-11-05 10:15:00
Пояснения к таблице БД

Переход клиента по реферальной ссылке

Учёт переходов по ссылке

При переходе по реферальной ссылке BILLmanager делает запись в базу:

Запись в таблицу БД
INSERT INTO referralprogram_click (cdate, ip, method, project, referer_account, referralprogram, sesid, site) VALUES('2025-11-10 03:28:25', '10.4.202.1', '2', '2', '2', '7', '1762745305.hvtgBc', 'http://localhost:8080/?from=2')
Пояснения к записи в базу

Если у клиента в браузере не было сессии, реферал будет привязан, но запись в таблице не будет создана. Такое может быть, например, при режиме инкогнито или при использовании прокси.

Логи переходов по реферальной ссылке находятся в файле /usr/local/mgr5/var/counter.log.

Регистрация нового клиента по реферальной ссылке

  1. Добавление нового пользователя в качестве потенциального реферера:

    Запись в таблицу БД
    INSERT INTO referralprogram_referer (account, project, referralprogram) VALUES('44', '2', '5')
    Пояснения к записи
  2. Добавление связи зарегистрированного клиента-реферала с реферером и реферальной программой:

    Запись в таблицу БД
    INSERT INTO referralprogram_link (cdate, referer_account, referral_account, referralprogram) VALUES('2025-11-10', '2', '43', '1')
    Пояснения к записи в базу
  3. Добавление ID реферала в referralprogram_click:

    Запись в таблицу БД
    SELECT * FROM referralprogram_click WHERE referer_account = 2 AND sesid = '1762745305.hvtgBc' FOR UPDATE
    UPDATE referralprogram_click SET referral_account='44', referralprogram='1' WHERE referer_account='2' AND sesid='1762745305.hvtgBc'

Начисление вознаграждения

По умолчанию вознаграждения за реферальную программу начисляются по заданию в cron первого числа каждого месяца в 03:10 по времени сервера:

Задание в cron
10 3 1 * *      /usr/local/mgr5/sbin/billmaintain --command affiliatemonthly >/dev/null 2>&1

При начислении вознаграждения за реферальную программу BILLmanager:

  1. Обнаруживает новое вознаграждение и выполняет запрос:

    Пример запроса
    Aug  1 12:00:47 [134624:19] core_module INFO Request [billmaintain][root] 'func=referralprogram.createreward&out=xml&referer_account=49&referral_expense=538&referralprogram_rule=11&reward_amount=100.00&reward_cdate=2025%2D08%2D01'
  2. Отправляет SQL-запрос на создание записи о вознаграждении в базу данных:

    Запись в таблицу БД
    INSERT INTO referralprogram_reward (amount, cdate, currency, expense, id, referer_account, referral_account, referralprogram, referralprogram_rule) VALUES('100.0000', '2025-08-01', '126', '538', '308', '49', '50', '9', '11')
    Пояснения к записи в базу
  3. Если дата зачисления вознаграждения совпадает с текущей датой, создаётся платёж:

    Пример запроса
    Aug  1 12:00:47 [134624:20] core_module INFO Request [billmaintain][root] 'func=referralprogram.createpayment&out=xml&referer_account=49&referralprogram=9&reward_date=2025%2D08%2D01'
  4. Выполняется SQL-запрос на создание платежа:

    Пример записей в БД
    INSERT INTO payment (createdate, currency, id, paymethodamount, randomnumber, status, subaccount, subaccountamount, usedamount) VALUES('2025-08-01 12:00:47', '126', '585', '100.0000', 'mRj2cTHawIeA', '1', '46', '100.0000', '0.0000')
    Пояснения к записи в базу

Логирование

Дополнительная информация для диагностики содержится в логах файла /usr/local/mgr5/var/ billmaintain.log. Чтобы включить печать отладочной информации по формированию вознаграждений по реферальной программе в лог billmaintain.log, повысьте уровень логирования:

Настройка уровня логирования
billmaintain.referral 9
Может быть полезно
Дата последнего обновления статьи: 11.11.2025. Статья подготовлена техническими писателями ISPsystem