Skip to content

Антифрод в платёжном флоу

Антифрод — отдельная система со своими правилами, списками и скорингом. Как она принимает решения, из каких шагов состоит её пайплайн и как настраиваются правила, в эту базу не входит: здесь описаны только точки встраивания — где ядро её спрашивает, что отвечает она и во что этот ответ превращается для платежа.

Точки вызова и чем они различаются

Создание транзакции. Как только платёж заведён, ядро регистрирует его в антифроде и передаёт полный состав операции: суммы, карту, плательщика, мерчанта и счёт. Смысл шага — не столько получить решение, сколько дать антифроду знать о попытке: его счётчики и списки строятся по всем обращениям, а не только по тем, что дошли до банка. Так поступают все сценарии, заводящие транзакцию: и платёж server-to-server, и платёж через нашу форму, и выплата.

Выбор гейта. Основная точка, где платёж действительно могут остановить. Проверка выполняется не один раз на транзакцию, а для каждого гейта каскада: решение зависит от банка и гейта, поэтому один и тот же платёж может быть отклонён для одного подключения и допущен для другого. Антифрод стоит в цепочке валидаторов гейта вторым — после дешёвой проверки технических работ банка и перед лимитами, блокировками карты и прочими правилами. Если антифрод сказал «нет», гейт считается непригодным, каскад идёт дальше; когда непригодными оказались все, платёж получает отказ, не дойдя до банка. Подробнее про перебор — в Как выбирается банк.

Приём карты на нашей форме. Здесь добавляется проверка, которой нет в server-to-server пути, потому что только здесь у нас есть браузер плательщика. Ядро спрашивает у антифрода, знакома ли ему эта карта — по внутренним доверенным спискам и по данным партнёров. Если карта нигде не встречалась, платёж обязан иметь собранный отпечаток браузера и не приходить через блокируемые анонимайзеры и прокси; иначе он закрывается отказом прямо на этом шаге. Проверка не работает по умолчанию, а включается настройкой на счёте или мерчанте.

Финализация. После того как результат получен, антифрод уведомляют об исходе. Это уже не проверка: повлиять на судьбу платежа ответ не может.

Какие решения возвращает внутренний антифрод

Ответ — не «да или нет», а статус операции. Платёж бывает доверенным, ожидающим решения либо заблокированным, причём блокировки различаются по источнику: сработавшие правила валидации, проверка отпечатка браузера и превышение порога скоринга. Вместе со статусом приходят категория и текст блокировки.

Ядро превращает это в свою категорию ошибки, и от неё зависит, что увидит мерчант: непригодная карта по бренду или сроку выглядит как ошибка валидации, попадание в списки — как ошибка списков, причём локальный и глобальный списки различаются, отдельно выделены чёрный список плательщика и отсутствие в белом, злоупотребление отпечатком и превышение скоринга. Доверенный платёж не порождает ошибки вовсе, и каскад продолжает работу.

Два соседних случая легко перепутать. Если антифрод ответил, но сообщил об ошибке внутри своего разбора, гейт отклоняется с общей категорией ошибки обработки. Если же он не ответил вовсе — связь не удалась или вышел таймаут, — платёж не останавливается: ядро пишет ошибку в лог и идёт дальше, как будто проверка прошла. Это сознательный выбор в пользу доступности приёма платежей, и его стоит помнить, когда разбираете, почему подозрительная операция всё-таки прошла.

Внешний скоринг

Кроме внутренних правил, есть внешний поставщик скоринга, и включается он настройкой. Его спрашивают дважды: при выборе гейта — с полным составом каскада, чтобы получить оценку по каждому подключению, и ещё раз при финализации — уже с фактическим исходом и тем гейтом, через который платёж пошёл.

Возвращает он оценку риска и рекомендацию по гейтам. Эти значения сохраняются на транзакции — и по каждому гейту каскада, и итоговое, — но сами по себе платёж не останавливают: решение об отказе принимает внутренний антифрод, а внешние оценки используются для анализа. Единственное, на что ответ влияет по ходу дела, — просьба не отправлять плательщика по адресам возврата мерчанта, и тогда ядро придерживает эти редиректы.

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

Что передаётся антифроду

При регистрации — всё, что известно об операции: сумма и валюта, способ оплаты, данные карты (токен, BIN, бренд, срок, держатель), плательщик с его именем, почтой, телефоном, адресом, городом, страной и индексом, а также мерчант и счёт. При проверке на гейте к этому добавляются банк и гейт, адрес плательщика в сети, параметры его браузера и отпечаток — он собирается отдельным сервисом на нашей форме и привязывается к транзакции.

Часть полей заполнена не всегда: в платеже server-to-server форму показывает мерчант, и браузерных данных к моменту создания транзакции у нас нет. Поэтому проверки по отпечатку для такого трафика либо не срабатывают, либо отключаются явным признаком на транзакции.

Что происходит после финализации

Успех и отказ уходят в антифрод разными уведомлениями, и отказ сопровождается причиной — так система узнаёт исход тех попыток, которые сама же пропустила. Полученный по платежу чарджбэк передаётся туда же отдельно: это самый ценный для антифрода сигнал, хотя приходит он позже всех — см. Возвраты и чарджбэки.

В обратную сторону работает пополнение доверенных списков: карты, по которым операции стабильно проходят успешно, попадают в списки, по которым потом смягчаются проверки для следующих платежей. Из-за этого поведение антифрода по одной и той же карте со временем меняется, и воспроизвести вчерашний отказ на той же карте может не получиться.

Внутренняя база знаний. Нашли неточность — поправьте страницу или заведите вопрос в разделе «Открытые вопросы».