Разработка реферальной программы крипто-казино
Реферальная программа превращает существующих игроков в канал привлечения новых. В крипто-казино это особенно эффективно: крипто-сообщество активно в социальных сетях и мессенджерах, а доверие рекомендациям от реальных пользователей выше рекламы.
Модели реферальных программ
CPA (Cost per Acquisition) — фиксированная выплата за каждого приведённого игрока, совершившего депозит. Просто для пользователя, понятен результат.
Revenue Share — % от потерь (GGR) приведённых игроков. Пассивный доход, стимулирует приводить качественных активных игроков.
Hybrid — комбинация CPA + Rev Share. CPA выплачивается сразу, rev share — постоянно.
Tier-based — если привлечённый игрок сам кого-то приводит, верхний уровень тоже получает %.
Техническая реализация
class ReferralService:
async def generate_referral_code(self, user_id: str) -> str:
"""Генерируем уникальный реферальный код"""
# Короткий код на основе user_id + случайного суффикса
code = base62_encode(int(user_id.replace('-', ''), 16) % 1_000_000_000)
code = code[:8].upper()
# Проверяем уникальность
while await self.ref_repo.code_exists(code):
code = generate_random_code(8)
await self.ref_repo.save_code(user_id, code)
return code
async def register_referral(self, new_user_id: str, referral_code: str):
"""Привязываем нового пользователя к реферреру"""
referrer = await self.ref_repo.get_by_code(referral_code)
if not referrer:
return # Невалидный код, молча игнорируем
if referrer.user_id == new_user_id:
return # Нельзя реферировать самого себя
# Проверяем self-referral через device fingerprint / IP
if await self.is_same_user_likely(referrer.user_id, new_user_id):
await self.flag_suspicious(referrer.user_id, new_user_id, "POSSIBLE_SELF_REFERRAL")
return
await self.ref_repo.save_referral(
referrer_id=referrer.user_id,
referred_id=new_user_id,
code_used=referral_code,
)
async def on_qualifying_deposit(self, user_id: str, deposit_amount: Decimal):
"""Вызывается когда реферрал совершает первый депозит"""
referral = await self.ref_repo.get_referral(referred_id=user_id)
if not referral or referral.cpa_paid:
return
program = await self.get_active_program()
# Проверяем минимальный депозит для CPA
if deposit_amount < program.min_deposit_for_cpa:
return
# Начисляем CPA
await self.pay_cpa(
referrer_id=referral.referrer_id,
referred_id=user_id,
amount=program.cpa_amount,
deposit_amount=deposit_amount,
)
await self.ref_repo.mark_cpa_paid(referral.id)
async def calculate_monthly_rev_share(self):
"""Ежемесячный расчёт revenue share"""
program = await self.get_active_program()
month_start = get_last_month_start()
month_end = get_last_month_end()
referrers = await self.ref_repo.get_active_referrers()
for referrer_id in referrers:
referred_users = await self.ref_repo.get_referred_users(referrer_id)
total_ggr = Decimal(0)
for referred_id in referred_users:
user_ggr = await self.bet_repo.get_ggr(
user_id=referred_id,
from_time=month_start,
to_time=month_end,
)
total_ggr += user_ggr
if total_ggr <= 0:
continue # Нет прибыли казино от этих игроков
rev_share = total_ggr * Decimal(str(program.rev_share_pct / 100))
# Применяем negative carryover (спорный момент в индустрии)
if program.negative_carryover:
# Если в прошлом месяце был отрицательный GGR — переносим убыток
prev_balance = await self.revshare_repo.get_balance(referrer_id)
if prev_balance < 0:
rev_share = rev_share + prev_balance
if rev_share < 0:
await self.revshare_repo.update_balance(referrer_id, rev_share)
continue
if rev_share > 0:
await self.pay_rev_share(referrer_id, rev_share, month_start)
Аффилиат-панель
Реферреры нуждаются в дашборде:
Мои рефералы: 47 игроков
Конверсия: 23% (из 204 кликов → 47 депозитов)
Заработано всего: 0.85 BTC
Этот месяц:
Новые игроки: 8
CPA: 0.04 BTC
Revenue Share: 0.023 BTC
Итого: 0.063 BTC
Топ игроки (анонимно):
Игрок #A1: 0.008 BTC GGR
Игрок #B3: 0.006 BTC GGR
...
Детали активности конкретных игроков скрыты (конфиденциальность), но аффилиат видит агрегированные данные.
Fraud Prevention
Рефeral fraud — распространённая проблема: создание фиктивных аккаунтов для CPA выплат.
- Device fingerprint — один девайс, несколько аккаунтов
- IP restrictions — лимит новых аккаунтов с одного IP
- Wagering threshold — CPA выплачивается не за депозит, а за достижение WR
- Delayed payouts — выплата через 30 дней после депозита
- Manual review — аномально высокая конверсия (> 50%) требует проверки







