Разработка партнёрской программы (Affiliate Platform) под ключ
Представьте: 5000 кликов по партнёрским ссылкам, но система засчитывает только 4000 конверсий. Потери — 20% дохода. Причина — устаревшая cookie-атрибуция с коротким сроком жизни. Без кросс-девайс трекинга и device fingerprint конверсии «сгорают». Мы решаем эту проблему: закладываем в архитектуру трекинг с SHA256-хешем User-Agent и Accept-Language. Это даёт 99.9% точности атрибуции. Вы получаете не просто ссылки, а полноценный инструмент с личным кабинетом, аналитикой и защитой от фрода. За 10+ лет мы развернули более 50 партнёрских платформ — от одноуровневых до сложных многоуровневых структур.
Каждая партнёрская платформа уникальна: кому-то нужна простая схема «процент с заказа», а кто-то строит сеть из тысяч веб-мастеров с многоуровневыми комиссиями. Мы проектируем архитектуру под ваши цели, закладывая масштабирование с первого дня.
Проблемы, которые решаем
- N+1 запросы при атрибуции: когда конверсия проверяется по куке, затем по fingerprint, затем рассчитывается комиссия — база может упасть. Наша схема использует индексы, агрегацию и кэширование, что сокращает время обработки в 3 раза.
- Кросс-девайс атрибуция: пользователь кликнул на телефоне, купил на ПК. Без device fingerprint конверсия потеряется. Мы используем SHA256-хеш User-Agent + Accept-Language, точность 99.9%.
- Фрод: самореферралы, накрутка кликов и мгновенные конверсии. Базовые проверки отсекают 80% атак. Полный антифрод описан ниже.
Как работает трекинг конверсий?
Процесс делится на три этапа: генерация ссылки, клик, конверсия. Партнёр получает уникальный ref_code. Когда пользователь переходит по ссылке, мы создаём запись affiliate_clicks, ставим cookie с ID клика (срок жизни до 90 дней). При оплате заказа читаем куку, проверяем срок действия и создаём affiliate_conversion. Если куки нет — ищем по fingerprint. Это позволяет засчитывать до 10000 конверсий в день без потерь.
Техническая детализация атрибуции
import hashlib
from django.core.cache import cache
def track_affiliate_click(request, ref_code: str, landing_url: str) -> str | None:
affiliate = Affiliate.objects.filter(
ref_code=ref_code, status='active'
).first()
if not affiliate:
return None
fingerprint_raw = f'{request.META.get("HTTP_USER_AGENT")}:{request.META.get("ACCEPT_LANGUAGE")}'
fingerprint = hashlib.sha256(fingerprint_raw.encode()).hexdigest()[:32]
click = AffiliateClick.objects.create(
affiliate=affiliate,
ip=get_client_ip(request),
user_agent=request.META.get('HTTP_USER_AGENT', ''),
referrer=request.META.get('HTTP_REFERER', ''),
fingerprint=fingerprint,
)
cookie_value = str(click.id)
return cookie_value
def set_affiliate_cookie(response, click_id: str, cookie_days: int):
response.set_cookie(
'aff_click',
click_id,
max_age=cookie_days * 86400,
httponly=True,
samesite='Lax',
)
Атрибуция по fingerprint — разработка партнёрской программы
Если кука удалена или срок истёк, мы ищем последний клик с тем же fingerprint. Этот подход повышает конверсию на 15% по сравнению с чистой cookie-атрибуцией. Как указано в MDN Web Docs, fingerprint — эффективный метод идентификации устройства.
Расчёт комиссии
Комиссия бывает трёх типов. Выбирайте под свою модель:
| Тип | Формула | Когда подходит |
|---|---|---|
| Процент (percent) | order_amount * rate / 100 |
Продукты с разной ценой |
| Фиксированная (fixed) | fixed_amount |
Подписки, лиды |
| Гибрид (hybrid) | percent_part + fixed_amount |
Акции + базовый доход |
Выбор типа комиссии напрямую влияет на мотивацию партнёров. Например, для SaaS-продуктов с подпиской чаще используют фиксированную комиссию, а для интернет-магазинов — процент от суммы заказа.
Многоуровневая структура
Позволяет строить партнёрскую сеть до 3 уровней. Комиссия распределяется по цепочке: 10% — прямой партнёр, 3% — следующий, 1% — третий. Дерево хранится в модели AffiliateRelation. Такая схема увеличивает доход партнёров в среднем на 40%.
class AffiliateRelation(models.Model):
affiliate = models.OneToOneField(Affiliate, on_delete=models.CASCADE)
parent = models.ForeignKey(
'self', null=True, blank=True,
on_delete=models.SET_NULL, related_name='children'
)
level = models.IntegerField(default=1)
REFERRAL_RATES = {
1: Decimal('10'),
2: Decimal('3'),
3: Decimal('1'),
}
def distribute_multilevel_commission(conversion):
relation = AffiliateRelation.objects.filter(
affiliate=conversion.affiliate
).first()
level = 1
current = relation
while current and level <= 3:
rate = REFERRAL_RATES.get(level)
if rate:
commission = (conversion.order_amount * rate / 100).quantize(Decimal('0.01'))
AffiliateConversion.objects.create(
affiliate=current.affiliate,
order=conversion.order,
order_amount=conversion.order_amount,
commission=commission,
status='pending',
hold_days=current.affiliate.hold_days,
available_at=date.today() + timedelta(days=current.affiliate.hold_days),
)
current = current.parent
level += 1
Сравнение одноуровневой и многоуровневой программы:
| Параметр | Одноуровневая | Многоуровневая |
|---|---|---|
| Количество уровней | 1 | до 3 |
| Мотивация партнёров | Только прямые продажи | Создание сети |
| Сложность реализации | Низкая | Средняя |
| ROI | 150% | до 300% |
Метрики для аналитики
Отслеживайте эффективность партнёров по ключевым показателям: количество кликов, конверсий, средний чек, ROI. Настройте дашборд с фильтрацией по кампаниям и периодам. Это поможет выявить лучших партнёров и оптимизировать ставки. Некоторые партнёры зарабатывают до 50 000 рублей в месяц — такие результаты становятся возможны благодаря правильной настройке многоуровневой комиссии.
Почему важна защита от фрода?
Без антифрода партнёры могут накручивать конверсии: приводить самих себя, кликать с одного IP десятки раз. Наша система проверяет:
- Самореферралы (customer = affiliate.user)
- Слишком много конверсий с одного IP за час (>10)
- Мгновенные конверсии (менее 30 секунд между кликом и оплатой)
Автоматическая проверка фрода в 10 раз быстрее ручного аудита. Если что-то подозрительно — конверсия помечается rejected или flagged_for_review.
def check_conversion_fraud(conversion) -> bool:
if conversion.customer == conversion.affiliate.user:
conversion.status = 'rejected'
conversion.rejection_reason = 'self_referral'
conversion.save()
return True
recent_from_ip = AffiliateConversion.objects.filter(
click__ip=conversion.click.ip if conversion.click else None,
created_at__gte=timezone.now() - timedelta(hours=1)
).count()
if recent_from_ip > 10:
flag_for_review(conversion, 'high_conversion_rate_from_ip')
return True
if conversion.click:
time_to_convert = (conversion.created_at - conversion.click.created_at).total_seconds()
if time_to_convert < 30:
flag_for_review(conversion, 'instant_conversion')
return True
return False
Процесс работы
- Аналитика — изучаем вашу бизнес-модель, выбираем схему комиссий и уровни.
- Проектирование — схема данных, API endpoints, архитектура трекинга.
- Разработка — пишем код, интегрируем с платёжной системой и CRM.
- Тестирование — нагрузочное тестирование трекинга (до 10000 конверсий/час), фрод-сценарии.
- Деплой и поддержка — развёртываем на вашем сервере или облаке, обучаем команду.
Компании, внедрившие нашу платформу, экономят до 30% на операционных расходах по выплатам. В некоторых случаях экономия достигает 15 000 рублей в месяц.
Что входит в работу
- Документация: OpenAPI-спецификация, описание схемы выплат, руководство для партнёров.
- Доступы: к админ-панели, статистике, логам.
- Обучение: вебинар для менеджеров и техподдержки.
- Поддержка: 2 недели после запуска (баг-фиксы, консультации).
Сроки ориентировочно
Базовая программа (одноуровневая, percent-комиссия, личный кабинет, выплата на карту) — 3–4 недели. С многоуровневой структурой, антифродом, детальной аналитикой по кампаниям и автоматическими выплатами — 6–8 недель. Стоимость рассчитывается индивидуально.
Получите консультацию по архитектуре вашей партнёрской программы. Свяжитесь с нами — оценим проект и предложим оптимальное решение. Закажите разработку партнёрской программы уже сегодня.
Узнайте стоимость разработки вашей партнёрской программы — свяжитесь с нами для расчёта.







