Skip to content

Платёжная система за десять минут

Если вы только пришли в команду, прочитайте сначала эту страницу и словарь. Остального пока не нужно.

Что мы делаем

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

Банк-эмитент выпустил карту плательщика. Банк-эквайер умеет принимать платежи и имеет договор с платёжной системой. Мы не храним деньги мерчанта в банковском смысле, но ведём его счёт у себя: сколько принято, сколько удержано, сколько можно вывести.

Почему это сложнее, чем кажется

Три обстоятельства определяют почти всю архитектуру продукта.

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

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

Карточные данные — радиоактивный материал. Номер карты и CVV нельзя просто так передавать между сервисами и класть в логи: это регулируется стандартом PCI DSS. Поэтому у нас есть отдельный изолированный контур, куда карта попадает, и отдельный сервис, который меняет её на токен. Дальше по системе ходит токен.

Как выглядит типичный платёж

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

Это и есть базовый платёжный флоу — подробно расписанный по шагам. Остальные сценарии продукта (оплата через нашу форму, выплаты, крипта, региональные способы) — надстройки над ним.

Что читать дальше

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

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