Тема
Как выбирается банк
Между «мерчант прислал платёж» и «драйвер пошёл в банк» есть шаг, который влияет на деньги сильнее остальных: выбор подключения, через которое операция уйдёт наружу. Его называют балансировкой гейтов, и он чаще всего виноват, когда платёж отклонён мгновенно, а в банке его никто не видел.
Гейт — это не банк
Банк в нашей модели — эквайер или провайдер целиком: имя, признак активности, общие лимиты, списки, задержки между операциями по одной карте. Гейт — конкретное настроенное подключение к нему: валюта, собственные лимиты, разрешённые бренды карт и способы оплаты, ссылка на секреты и имя драйвера. У одного банка бывает несколько гейтов, поэтому «платёж ушёл в такой-то банк» при разборе недостаточно.
Почему у счёта мерчанта бывает каскад
К счёту привязан либо один гейт, либо балансировщик — именованный набор гейтов с правилами перебора. Каскад нужен по двум причинам. Техническая: банк бывает недоступен, стоит на техработах или отказывает по внутренней причине, и единственный способ не потерять платёж — попробовать следующее подключение. Коммерческая: гейты дают разную конверсию и стоимость, и трафик между ними распределяют осознанно.
Порядок перебора задаёт стратегия балансировщика: по приоритету, случайно или скриптом. Скриптовая — основная: она сначала решает, какой набор гейтов брать, и только потом его сортирует. Набор зависит от того, знаком нам плательщик или нет. У записи гейта в каскаде есть режим, требующий, чтобы карта, отпечаток браузера, почта или их сочетание уже встречались в прошлых успешных платежах: такой гейт не достанется незнакомому плательщику, а гейт с обратным режимом достанется только ему. Бывают и условные маршруты, подменяющие весь набор, — например, когда по этой карте недавно был успех на конкретном гейте. Порядок внутри набора по умолчанию строится по накопленной статистике конверсии с намеренной примесью случайности: часть трафика уходит на наполнение статистики по незнакомым гейтам.
Как устроен перебор и что его останавливает
Система берёт очередного кандидата, прогоняет по нему проверки и, если он подходит, отдаёт операцию драйверу. Дальше возможны три исхода. Драйвер вернул успех или «в обработке» — перебор закончен, платёж живёт дальше своим чередом. Гейт не подошёл или банк отказал — балансировщик записывает причину и берёт следующего. Либо перебор обрывается досрочно, потому что пробовать дальше бессмысленно: на счёте не хватает средств, ошибка оказалась нашей, а не банковской, либо отказ помечен как останавливающий каскад.
Что отсеивает гейт
Проверки идут двумя слоями: сначала правила самой записи в каскаде (режим доверия, бренды карт и операторы, страна плательщика, границы суммы для этой строки), затем валидаторы гейта целиком — дешёвая проверка техработ банка и следом полная проверка ограничений.
| Что проверяется | Когда гейт отсеивается |
|---|---|
| Активность | Банк или гейт выключены |
| Техработы | Момент операции попадает в запланированное окно техработ банка |
| Списки | Плательщик или карта в чёрном списке либо отсутствуют в белом |
| Лимиты гейта, банка и счёта | Сумма вне диапазона или выбран лимит за сутки, неделю, месяц |
| Лимиты и блокировки по карте | Превышены сумма или число операций этой картой на гейте, не выдержан интервал между ними |
| Свойства операции | Гейт не поддерживает бренд карты, местный метод оплаты, рекуррент или сумму с копейками |
Техработы заводятся окном с датами и относятся к банку целиком: пока окно активно, из каскада выпадают все его гейты; если сама эта проверка упала, платёж она не блокирует. Антифрод здесь отвечает не на вопрос «мошенник ли это вообще», а на вопрос «подходит ли конкретный гейт конкретной транзакции» — см. Антифрод в платёжном флоу.
Эксперименты над гейтами
Поверх обычного каскада работает механизм экспериментов. К балансировщику привязывают гейты, которым нужно набрать реальный трафик, и эксперимент подставляет их перед обычными кандидатами. У него есть условия отбора транзакций — страна карты и потолок суммы — и ограничение на число попыток по каждому гейту; пока по гейту идёт незавершённая попытка, следующую транзакцию на него не пустят. Гейт выбывает, когда получил первый успех или исчерпал лимит попыток, а когда выбыли все, эксперимент завершается. Для транзакции это обычная строка каскада: если такой гейт не подошёл, перебор продолжится по основному набору.
Проверочные платежи
Иногда мы не готовы отправить в банк полную сумму, ничего не зная о карте. Для этого существует FTD-probe — отдельная небольшая транзакция, которая проводится до основной, по своему счёту и своему набору гейтов. Прошла — карта считается проверенной и основной платёж продолжается; не прошла — основной платёж отклоняется, а карта попадает в чёрный список проверок. Исключение — отказ по нехватке средств: он говорит о состоянии счёта.
Сумма проверки либо фиксированная, либо равна сумме основного платежа, и проверка может потребовать 3DS: тогда плательщик подтверждает именно её, а основная транзакция ждёт на промежуточной странице. Карту, уже прошедшую проверку, второй раз не проверяют; исключения по BIN, стране, банку и бренду избавляют от неё там, где она не нужна.
Что видит мерчант, когда гейт не нашёлся
Если каскад закончился, а провести платёж не удалось, транзакция отклоняется, так и не дойдя до банка, с категорией ошибки «гейт не найден». Но часть причин считается важнее общей: временные блокировки карты и отказы по спискам запоминаются отдельно и, если встретились хотя бы раз, уходят мерчанту вместо неё — «карта заблокирована» это ответ, с которым можно что-то сделать. Если же до банка мы дошли и он отказал, наружу уходит ошибка банка, а не ошибка балансировки.
Как это выглядит при разборе инцидента
Признак проблемы с выбором гейта — мгновенный отказ без единого обращения к банку. Перед первым походом в банк каскад прогоняется целиком, и список кандидатов сохраняется в самой транзакции: по каждому гейту записано, почему он попал в каскад, прошёл ли проверки, какой была ошибка и её категория, дошло ли до попытки провести операцию. Этого хватает, чтобы различить три случая: каскад пуст или настроен не так, все гейты отсеялись проверками, банки отказали по очереди. Если в списке остались неиспользованные гейты, перебор оборвался досрочно — ищите останавливающую ошибку на последнем использованном.
Куда дальше
- Платёж картой server-to-server — место этого шага в пути платежа.
- Слой драйверов — что происходит после того, как гейт выбран.
- Статусы и стадии — как читать отклонённую транзакцию.
- Антифрод в платёжном флоу — проверки, часть которых работает здесь.