Как пройти в метро за 1 рубль
Приложил карту к турникету – списался 1₽. Через минуту пришло второе уведомление – 83₽.
С самокатом похожая история: при привязке карты списался 1₽, а после поездки – 189₽ за 20 минут.
Снаружи выглядит одинаково. Два списания, задержка между ними. Если вы хоть раз видели в выписке транзакцию на 1₽ и не понимали откуда она – сейчас разберёмся.
Внутри – два совершенно разных паттерна.
Самокат: авторизация + списание
Когда вы сканируете QR на самокате, приложение не знает, сколько вы накатаете. 5 минут? Час? Итоговая сумма неизвестна. Поэтому:
🔸 Шаг 1 – авторизация. Приложение просит банк проверить карту и заморозить 1₽. Банк отвечает: «Карта живая, деньги есть». Самокат разблокирован.
🔸 Шаг 2 – списание. Поездка окончена. Сервис посчитал сумму – 189₽ за 20 минут. Отправляет в банк: «Списывай». Холд снимается, реальная сумма уходит со счёта.
Между этими фазами – время. Потому что бизнес-логика требует подождать: сумма определится только когда вы закончите поездку.
Тот же паттерн в каршеринге, такси, аренде – везде, где итоговая сумма неизвестна на старте.
Причина двух фаз – бизнесовая. Мы не можем списать сразу, потому что не знаем сколько.
Ладно, с самокатом разобрались. А теперь – метро. И тут всё наоборот.
Метро: отложенная авторизация
В метро всё иначе. Сумма известна заранее – 83₽ по банковской карте. Казалось бы, списывай сразу. Но нет.
Через турникеты загруженной станции в час пик проходят тысячи людей в минуту. Турникет должен открыться за доли секунды. А полный цикл банковской транзакции – это цепочка: терминал → банк-эквайер → платёжная система → банк-эмитент → ответ обратно. Это секунды. В час пик такая задержка приведет к очереди до входа в вестибюль.
Поэтому турникет делает минимум: проверил карту, если не в стоп-листе – открылся. А полная транзакция уходит в фоновую очередь и обрабатывается позже. Сначала пропусти, потом разберись.
Это отложенная авторизация – система не ждёт подтверждения, а обрабатывает транзакцию в фоне. Данные «догонят» реальность чуть позже. Зато пропускная способность – тысячи человек в минуту.
Причина двух фаз – техническая. Мы знаем сколько, но не можем себе позволить ждать.
Почему аналитику важно это различать?
Потому что решения – разные.
Если причина бизнесовая (сумма неизвестна) – закладывайте два шага: заморозить и списать. Предусматривайте таймаут на холд (до 30 дней, потом деньги размораживаются) и сценарий отката. Нарисовали одно действие «оплатить» – потеряли половину логики. Видел кейс: аналитик описал оплату подписки одним действием «списать». Без авторизации, без проверки карты. В прод ушло как есть. Первый баг прилетел, когда у пользователя сменилась карта – система молча списала сумму с несуществующего счёта и неделю показывала «подписка активна».
Если причина техническая (нагрузка) – закладывайте фоновую обработку: очередь, отложенное списание, повторные попытки при сбоях. Заложили синхронный ответ на каждый запрос – система ляжет под нагрузкой.
Когда видите задержку между операциями, первый вопрос: это бизнес не знает итоговое значение, или система не тянет синхронно?
Ответ на этот вопрос определяет архитектуру.
Теперь вы знаете, откуда берётся этот загадочный рубль в выписке. Перешлите тому, кто каждый раз дёргается, когда видит списание на 1₽.
А в следующем посте – разберём сам турникет. Одна железка, три способа оплаты: Тройка, банковская карта, Face Pay. Три совершенно разных архитектуры внутри одного устройства.
p.s. покатался на метро называется...
@analyst_exe
Post #598
340

- ❤ 10
- 👍 6
- 🔥 2
- 🥰 1
- 😁 1