Skip to content

Как выбирается банк

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

Гейт — это не банк

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

Почему у счёта мерчанта бывает каскад

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

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

Как устроен перебор и что его останавливает

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

Что отсеивает гейт

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

Что проверяетсяКогда гейт отсеивается
АктивностьБанк или гейт выключены
ТехработыМомент операции попадает в запланированное окно техработ банка
СпискиПлательщик или карта в чёрном списке либо отсутствуют в белом
Лимиты гейта, банка и счётаСумма вне диапазона или выбран лимит за сутки, неделю, месяц
Лимиты и блокировки по картеПревышены сумма или число операций этой картой на гейте, не выдержан интервал между ними
Свойства операцииГейт не поддерживает бренд карты, местный метод оплаты, рекуррент или сумму с копейками

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

Эксперименты над гейтами

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

Проверочные платежи

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

Сумма проверки либо фиксированная, либо равна сумме основного платежа, и проверка может потребовать 3DS: тогда плательщик подтверждает именно её, а основная транзакция ждёт на промежуточной странице. Карту, уже прошедшую проверку, второй раз не проверяют; исключения по BIN, стране, банку и бренду избавляют от неё там, где она не нужна.

Что видит мерчант, когда гейт не нашёлся

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

Как это выглядит при разборе инцидента

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

Куда дальше

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