Download PDF
Download page Как работает реферальная программа.
Как работает реферальная программа
Реферальная программа — вид сотрудничества между клиентом и провайдером, при котором клиент получает реферальную ссылку или промокод. Такой клиент считается партнёром или реферером, а новые клиенты, которые зарегистрировались по этой ссылке (промокоду), — рефералами. Партнёр получает процент от расходов своих рефералов.
По промокоду можно привязать только нового клиента, у которого нет услуг.
Результаты реферальной программы:
- партнёр получает прибыль за счёт привлечённых клиентов;
- провайдер получает новых клиентов и рекламу силами партнёра.
О том, как создать реферальную программу см. в статье Реферальная программа. Общая информация.
Информация в данной статье актуальна для версии Clouden выше 6.135. Информация о том, как работает реферальная программа в версиях ниже, см. в статье Как работает реферальная программа (для версий 6.134 и ниже)
Настройка интеграции с сайтом
Чтобы настроить интеграцию реферальной программы с сайтом, при создании реферальной программы укажите URL сайта в настройках.
Если URL сайта — это адрес Clouden, дополнительных действий не требуется. Платформа будет автоматически извлекать значение параметра из запроса и регистрировать переход по реферальной ссылке.
Если URL — сторонний сайт, выполните дополнительные действия:
Со стороны сайта выполните запрос к платформе следующего вида:
https://bill_address?func=referralprogram.registerclick&p=https%3A%2F%2Fsite.com%2F%3Ffrom%3D2&out=xjsonTEXTГде:
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-ответа. Полученный идентификатор сохраняется на стороне сайта и передаётся параметром при последующем редиректе в Clouden.Пример HTML-страницы с интеграцией реферальной программы и кнопкой перехода в Clouden:
<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 Clouden"> </body> </html>XMLgetBillCntid()— функция отправляет запрос к платформе для регистрации перехода по реферальной ссылке;encodeURIComponent(window.location.href)— функция кодирует текущий URL страницы, включая параметрfrom=ID, указывающий на реферера;localStorage.setItem("bill_cntid", ...)— функция сохраняет полученный уникальный идентификатор перехода между сессиями;gotoBillManager()— функция формирует URL для перехода в платформу с добавлением параметраcntid, если он был сохранён;cntid— параметр позволяет платформе привязать будущую регистрацию или покупку к конкретному переходу по реферальной ссылке.
Таблицы БД
Таблица referralprogram содержит информацию о реферальных программах:
| name | project | url | promocode | account_group | account_group_restrict | assign_by_default | start_date | end_date |
| Referral Program | 1 | https://example.com/ref | PROMO2025 | 5 | 10 | 1 | 2025-01-01 | 2025-12-31 |
name— наименование реферальной программы. Локализованное поле;project— провайдер;url— URL сайта, с которого осуществляется переход к реферальной программе;promocode— промокод;account_group— разрешённая группа клиентов;account_group_restrict— запрещённая группа клиентов;assign_by_default— автоматическое подключение к присоединённым к провайдеру клиентам;start_date— начало действия;end_date— окончание действия.
Таблица referralprogram_rule содержит правила реферальных программ, задаваемые для конкретной реферальной программы:
| referralprogram | reward_value_fixed | reward_value_percent | reward_max_amount | reward_months_after | reward_expense_period | reward_period | reward_payment_interval | status |
| 1 | 0.00 | 10.00 | 5000.00 | 1 | 1 | 12 | 1 | 0 |
referralprogram— ID реферальной программы;reward_value_fixed— фиксированное значение вознаграждения;reward_value_percent— процентное значение вознаграждения (процент от покупки);reward_max_amount— максимальная сумма вознаграждения (выбирается эта сумма, если полученный процент от покупки превышает её);reward_months_after— количество месяцев, по прошествии которых будет выплачено вознаграждение;reward_expense_period— определяет, какие расходы берутся для начисления вознаграждения:0— при покупке;1— за всё время;
reward_period— период вознаграждения, в месяцах;reward_payment_interval— периодичность выплат вознаграждений, в месяцах;status— статус:0— активен;1— удалён.
Таблица referralprogram_condition содержит условия, задаваемые для конкретного правила реферальной программы:
| referralprogram_rule | ctype | cgroup | comparison | amount | orderperiods | item_count | referral_count | product_tree | status |
| 1 | 1 | 0 | ge | 10000.00 | 3 | NULL | NULL | NULL | 0 |
referralprogram_rule— ID правила реферальной программы;ctype— тип условия:0— без условий;1— объём продаж реферала;2— по количеству услуг, купленных рефералом;3— по количеству приведённых рефералов;4— объём продаж всех рефералов;
cgroup— группа условий;comparison— знак сравнения; возможные значения:eq,ne,gt,ge,lt,le;amount— сумма;orderperiods— период заказа;item_count— количество услуг;referral_count— количество рефералов;product_tree— дерево продуктов;status— статус:0— активен;1— удалён.
Таблица referralprogram_click фиксирует переходы к реферальной программе:
| referer_account | referral_account | ip | sesid | site | cdate | project |
| 101 | 205 | 192.168.1.100 | a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 | https://example.com/ref?ref=101 | 2025-11-01 14:30:00 | 1 |
referer_account— ID реферера (таблицаaccount);referral_account— ID реферала (таблицаaccount);ip— IP-адрес при переходе по ссылке;sesid— уникальный идентификатор сессии;site— ссылка перехода;cdate— дата создания записи;project— провайдер.
Таблица referralprogram_referer устанавливает связь реферера с реферальной программой:
| account | project | referralprogram |
| 101 | 1 | 3 |
account— ID реферера (таблицаaccount);project— провайдер;referralprogram— реферальная программа.
Таблица referralprogram_link устанавливает связь реферера, реферала и реферальной программы:
| referer_account | referral_account | referralprogram |
| 101 | 205 | 3 |
referer_account— ID реферера (таблицаaccount);referral_account— ID реферала (таблицаaccount);referralprogram— ID реферальной программы.
Таблица referralprogram_reward содержит информацию о вознаграждениях по реферальной программе:
| referralprogram | referralprogram_rule | referral_account | referer_account | amount | currency | expense | payment | cdate |
| 3 | 1 | 205 | 101 | 1250.00 | RUB | 5001 | 7890 | 2025-11-05 10:15:00 |
referralprogram— ID реферальной программы;referralprogram_rule— ID правила реферальной программы;referral_account— ID реферала (таблицаaccount);referer_account— ID реферера (таблицаaccount);amount— сумма вознаграждения;currency— валюта;expense— ID расхода, по которому сформировано вознаграждение;payment— платёж зачисления вознаграждения;cdate— дата создания записи.
Переход клиента по реферальной ссылке
Учёт переходов по ссылке
При переходе по реферальной ссылке Clouden делает запись в базу:
Запись в таблицу БД
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')
cdate— дата и время перехода;ip— IP-адрес, с которого был осуществлён переход;method— способ перехода. Например, через витрину, регистрацию и т.д.;project— код провайдера, в рамках реферальной программы которого зарегистрирован переход;referer_account— код клиента-партнёра, чья ссылка использовалась;referralprogram— идентификатор реферальной программы;sesid— уникальный ключ сессии;site— URL-адрес страницы, с которой был произведён переход.
Если у клиента в браузере не было сессии, реферал будет привязан, но запись в таблице не будет создана. Такое может быть, например, при режиме инкогнито или при использовании прокси.
Логи переходов по реферальной ссылке находятся в файле /usr/local/mgr5/var/counter.log.
Регистрация нового клиента по реферальной ссылке
Добавление нового пользователя в качестве потенциального реферера:
Запись в таблицу БД
INSERT INTO referralprogram_referer (account, project, referralprogram) VALUES('44', '2', '5')CODEaccount— идентификатор лицевого счёта клиента, который станет реферером;project— код провайдера;referralprogram— идентификатор реферальной программы.
Добавление связи зарегистрированного клиента-реферала с реферером и реферальной программой:
Запись в таблицу БД
INSERT INTO referralprogram_link (cdate, referer_account, referral_account, referralprogram) VALUES('2025-11-10', '2', '43', '1')CODEcdate— дата регистрации реферала;referer_account— идентификатор клиента-реферера;referral_account— идентификатор реферала;referralprogram— идентификатор реферальной программы. Например, 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'CODE
Начисление вознаграждения
По умолчанию вознаграждения за реферальную программу начисляются по заданию в cron первого числа каждого месяца в 03:10 по времени сервера:
Задание в cron
10 3 1 * * /usr/local/mgr5/sbin/billmaintain --command affiliatemonthly >/dev/null 2>&1
При начислении вознаграждения за реферальную программу Clouden:
Обнаруживает новое вознаграждение и выполняет запрос:
Пример запроса
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'CODEОтправляет 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')CODEamount— сумма вознаграждения;cdate— дата начисления вознаграждения;currency— код валюты. Например, 126 соответствует евро, 810 — российскому рублю;expense— идентификатор расхода реферала, на основе которого начислено вознаграждение;id— уникальный идентификатор записи о вознаграждении;referer_account— идентификатор клиента-реферера;referral_account— идентификатор клиента-реферала;referralprogram— идентификатор реферальной программы;referralprogram_rule— правило реферальной программы, по которому применено вознаграждение.
Если дата зачисления вознаграждения совпадает с текущей датой, создаётся платёж:
Пример запроса
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'CODEВыполняется 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')CODEcreatedate— дата и время создания платежа;currency— код валюты платежа;id— уникальный идентификатор платежа;paymethodamount— сумма в валюте метода оплаты;randomnumber— уникальный внутренний номер платежа;status— статус платежа. Например, 1 — новый, 4 — зачислен и т.д.;subaccount— лицевой счёт реферера, на который зачисляется вознаграждение;subaccountamount— сумма в валюте лицевого счёта;usedamount— израсходованная часть платежа.
Логирование
Дополнительная информация для диагностики содержится в логах файла /usr/local/mgr5/var/ billmaintain.log. Чтобы включить печать отладочной информации по формированию вознаграждений по реферальной программе в лог billmaintain.log, повысьте уровень логирования:
Настройка уровня логирования
billmaintain.referral 9