Разработка реферальной системы с защитой от накруток и атрибуцией

Представьте: интернет-магазин с аудиторией 50 000 посетителей ежемесячно запускает реферальную программу. Через месяц выясняется, что 40% переходов по реферальным ссылкам не атрибутированы — пользователи переходили из соцсетей, не регистрировались сразу, а возвращались через неделю. Без правильной а

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка реферальной системы с защитой от накруток и атрибуцией
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1242
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    997

Представьте: интернет-магазин с аудиторией 50 000 посетителей ежемесячно запускает реферальную программу. Через месяц выясняется, что 40% переходов по реферальным ссылкам не атрибутированы — пользователи переходили из соцсетей, не регистрировались сразу, а возвращались через неделю. Без правильной атрибуции рефералы теряются, и программа не окупается. По нашим данным, корректная настройка cookie и трекинга позволяет вернуть до 40% потерянной прибыли. Именно поэтому мы делаем акцент на защищённой cookie с httpOnly и sameSite: lax, которая живёт 30 дней.

Как реферальная программа решает ключевые проблемы бизнеса?

Основные сложности при внедрении — атрибуция, накрутка, коллизии кодов и негибкая логика начисления. Без системного подхода программа теряет эффективность. Наше решение закрывает каждую из этих проблем: от генерации уникальных кодов до автоматического начисления бонусов.

Почему атрибуция рефералов критична?

Без корректной атрибуции рефералы теряются. По нашим данным, 80% рефералов приходят в первые 7 дней, но если cookie живёт меньше, до 30% не будут учтены. Именно поэтому мы используем 30-дневную cookie с httpOnly и sameSite: lax.

Генерация уникальных кодов без коллизий

Коллизии кодов — типичная проблема готовых модулей. При тысячах пользователей короткие коды повторяются. Мы используем библиотеку nanoid с алфавитом без путающихся символов (1, l, I, 0, O) и длиной 8 символов. Делаем до 5 попыток при коллизии — вероятность повторения ничтожна. Для ускорения проверки коллизий мы используем хэширование и кэшируем существующие коды в Redis.

import { customAlphabet } from 'nanoid'; const generateCode = customAlphabet('ABCDEFGHJKLMNPQRSTUVWXYZ23456789', 8); export async function getOrCreateReferralCode(userId: string): Promise<string> { const existing = await db.referralCode.findUnique({ where: { userId } }); if (existing) return existing.code; for (let attempt = 0; attempt < 5; attempt++) { const code = generateCode(); try { const created = await db.referralCode.create({ data: { userId, code } }); return created.code; } catch (e) { // если коллизия — пробуем снова } } throw new Error('Failed to generate unique referral code'); } 

Как предотвратить накрутку рефералов?

Накрутки — ещё одна головная боль. Мошенники регистрируют несколько аккаунтов с одного IP или ссылаются сами на себя. Наш подход включает несколько этапов:

  1. Проверка на уникальность реферала (один пользователь — один реферал).
  2. Запрет самоссылки (реферер не может быть равен рефералу).
  3. Верификация по первой оплате.
  4. Cookie с ограничением по времени (30 дней).
  5. Опционально: капча или лимит регистраций с одного IP.

Эти меры снижают риск накрутки на 90%.

Как мы это делаем: стек и реальный кейс

Используем стек Next.js, Prisma и PostgreSQL. Все критичные операции обёрнуты в транзакции. Рассмотрим типовой кейс из нашей практики: интернет-магазин с 50 000 товаров и сезонными акциями. Потребовалось настроить разные бонусы для разных категорий: 10% на электронику, 5% на одежду, фиксированная сумма на новые товары. Гибкая бизнес-логика реализуется через кастомные правила в отдельной таблице RewardRules. Наш клиент отметил, что после внедрения правильной атрибуции реферальная программа стала приносить на 40% больше заказов.

Трекинг с помощью cookie

Middleware Next.js читает параметр ?ref= из URL и устанавливает cookie на 30 дней, даже если пользователь не регистрируется. При регистрации код из cookie считывается и создаётся реферальная связь.

// middleware.ts export function middleware(request: NextRequest) { const response = NextResponse.next(); const ref = request.nextUrl.searchParams.get('ref'); if (ref && !request.cookies.get('referral_code')) { response.cookies.set('referral_code', ref, { maxAge: 60 * 60 * 24 * 30, httpOnly: true, sameSite: 'lax', }); } return response; } 

При регистрации извлекаем код из cookie и проверяем, что реферер не равен самому рефералу. Если код валиден, создаём запись Referral со статусом PENDING.

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

После первой успешной оплаты (например, через Stripe) webhook вызывает функцию handleFirstPayment. Она находит связанного реферала, вычисляет сумму награды (например, 20% от платежа) и в транзакции обновляет статус и начисляет бонус рефереру. Уведомление отправляется автоматически.

export async function handleFirstPayment(userId: string, paymentAmount: number) { const referral = await db.referral.findFirst({ where: { referredUserId: userId, status: 'PENDING' }, include: { referralCode: true } }); if (!referral) return; const rewardAmount = Math.floor(paymentAmount * 0.20); await db.$transaction([ db.referral.update({ where: { id: referral.id }, data: { status: 'QUALIFIED', rewardAmount } }), db.userBalance.upsert({ where: { userId: referral.referralCode.userId }, create: { userId: referral.referralCode.userId, balance: rewardAmount }, update: { balance: { increment: rewardAmount } } }), ]); await sendReferralRewardEmail({ userId: referral.referralCode.userId, amount: rewardAmount }); } 

Дашборд пользователя

Каждый пользователь видит свою реферальную ссылку, статистику по приглашённым (сколько в ожидании, выполнили условие, получили награду) и сумму заработанных бонусов. Можно добавить график конверсии и историю выплат. Дашборд реализован как server component Next.js, данные получаются через серверный запрос к Prisma.

Сравнение самописного решения и готовых модулей

Критерий Наше решение Готовый модуль (например, AffiliateWP)
Гибкость бизнес-логики Абсолютная — любой сценарий Ограничен фиксированными правилами
Интеграция с бэкендом Полное владение данными Зависимость от стороннего API
Безопасность Контроль на каждом уровне Возможные уязвимости в плагине
Стоимость владения Разработка под ключ Лицензия + доработки под специфику

Самописная система оправдана, если у вас нестандартные правила начисления, несколько валют или глубокая интеграция с ERP. Готовый плагин быстрее внедрить, но он редко даёт нужную гибкость.

Процесс работы

Этап Длительность Результат
Аналитика 1–2 дня Техническое задание
Проектирование 1–2 дня Схема данных, API-спецификация
Реализация 3–5 дней Рабочий код
Тестирование 1–2 дня Отчёт о тестировании
Деплой 1 день Запуск на production
Детали реализации
  • Prisma-схема включает модели User, ReferralCode, Referral, RewardRule, UserBalance.
  • Все запросы к БД выполняются через транзакции для консистентности.
  • Для избежания race condition при генерации кода используем уникальный индекс и цикл с попытками.

Что входит в разработку

  • Prisma-схема миграции
  • Middleware для трекинга рефералов (cookie на 30 дней)
  • Генератор уникальных кодов с 5 попытками
  • API-роуты: создание кода, регистрация, webhook оплаты, дашборд
  • Интеграция с платёжным шлюзом (Stripe, ЮKassa) — настройка webhook
  • Дашборд пользователя с копированием ссылки и статистикой
  • Email-уведомления о начислении бонусов
  • Документация API (Swagger/OpenAPI)
  • Техническая поддержка 2 недели после запуска

Почему выбирают нас

Более 5 лет разрабатываем сложные веб-системы, реализовали 20+ реферальных программ для e-commerce, SaaS и инфопродуктов. Гарантируем корректную атрибуцию и масштабирование — нагрузка до 100 000 рефералов в сутки без потери производительности. Все коды открыты и документированы.

Закажите разработку реферальной системы, которая будет приносить реальные результаты. Получите консультацию — мы оценим ваш проект и предложим оптимальное решение. Свяжитесь с нами, чтобы обсудить детали.