Реферальная программа — вид сотрудничества между клиентом и провайдером, при котором клиент получает реферальную ссылку или промокод. Такой клиент считается партнёром или реферером, а новые клиенты, которые зарегистрировались по этой ссылке (промокоду), — рефералами. Партнёр получает процент от расходов своих рефералов.
Результаты реферальной программы:
- партнёр получает прибыль за счёт привлечённых клиентов;
- провайдер получает новых клиентов и рекламу силами партнёра.
О том, как создать реферальную программу см. в статье Реферальная программа. Общая информация.
Настройка интеграции с сайтом
Чтобы настроить интеграцию реферальной программы с сайтом, при создании реферальной программы укажите URL сайта в настройках.
Если URL сайта — это адрес BILLmanager, дополнительных действий не требуется. Платформа будет автоматически извлекать значение параметра из запроса и регистрировать переход по реферальной ссылке.
Если URL — сторонний сайт, выполните дополнительные действия:
-
Со стороны сайта выполните запрос к платформе следующего вида:
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). Например, для URLhttps://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 содержит информацию о реферальных программах:
Таблица referralprogram_rule содержит правила реферальных программ, задаваемые для конкретной реферальной программы:
Таблица referralprogram_condition содержит условия, задаваемые для конкретного правила реферальной программы:
Таблица referralprogram_click фиксирует переходы к реферальной программе:
Таблица referralprogram_referer устанавливает связь реферера с реферальной программой:
Таблица referralprogram_link устанавливает связь реферера, реферала и реферальной программы:
Таблица referralprogram_reward содержит информацию о вознаграждениях по реферальной программе:
Переход клиента по реферальной ссылке
Учёт переходов по ссылке
При переходе по реферальной ссылке 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.
Регистрация нового клиента по реферальной ссылке
-
Добавление нового пользователя в качестве потенциального реферера:
Запись в таблицу БДINSERT INTO referralprogram_referer (account, project, referralprogram) VALUES('44', '2', '5')Пояснения к записи -
Добавление связи зарегистрированного клиента-реферала с реферером и реферальной программой:
Запись в таблицу БДINSERT INTO referralprogram_link (cdate, referer_account, referral_account, referralprogram) VALUES('2025-11-10', '2', '43', '1')Пояснения к записи в базу -
Добавление 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 по времени сервера:
10 3 1 * * /usr/local/mgr5/sbin/billmaintain --command affiliatemonthly >/dev/null 2>&1При начислении вознаграждения за реферальную программу BILLmanager:
-
Обнаруживает новое вознаграждение и выполняет запрос:
Пример запроса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' -
Отправляет 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')Пояснения к записи в базу -
Если дата зачисления вознаграждения совпадает с текущей датой, создаётся платёж:
Пример запроса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' -
Выполняется 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Связанные статьи: