Тема
Транзакция как центральная сущность
В системе почти всё — транзакция. Не только платёж картой: выплата, возврат, начисление прибыли, перевод между счетами, эмиссия электронных денег. Все они хранятся в одной коллекции и отличаются полем типа. Это решение сильно упрощает учёт и одновременно объясняет, почему модель транзакции в коде такая большая.
Основные типы
| Тип | Что означает |
|---|---|
| Платёж | Приём денег от плательщика в пользу мерчанта |
| Выплата | Отправка денег получателю со счёта мерчанта |
| Возврат | Возврат ранее принятого платежа, полный или частичный |
| Прибыль | Наша комиссия, учтённая отдельной операцией |
| Электронные деньги | Эмиссия и погашение в соответствующих сценариях |
Есть и более узкие типы — части разделённых выплат, урегулирования, реверсы. Их смысл раскрывается в соответствующих флоу, и запоминать их заранее не нужно.
Не всё, что меняет судьбу платежа, выражено отдельной транзакцией. Чарджбэк — это признак на самой платёжной транзакции: отметка о том, что оспаривание получено, дата получения и флаги по программам платёжных систем. Отдельной транзакции чарджбэка не существует, искать её бессмысленно. Признак не просто информационный: пока он стоит, дальнейшие операции по платежу блокируются.
Что описывает транзакция
Транзакция связывает вместе четыре вещи, и в этом её ценность как единой модели.
Деньги: сумма, валюта, комиссия, курс конверсии, если валюта платежа и счёта различаются.
Стороны: мерчант, его счёт, плательщик с доступными нам данными, а также заказ на стороне мерчанта — его идентификатор мы возвращаем в каждом уведомлении.
Маршрут: через какой гейт и какой драйвер проводится операция, что банк ответил, какие поля обработки вернул.
Состояние: статус, стадия и время — см. статусы и стадии.
Связи между транзакциями
Транзакции часто ссылаются друг на друга, и это нормальный способ выразить сложную операцию простыми сущностями. Возврат ссылается на исходный платёж. Разделённая выплата состоит из родительской операции и частей. В крипто-онрампе платёж и выдача крипты — две связанные ноги одной продуктовой операции.
Практическое следствие: увидев транзакцию, всегда стоит проверить, нет ли у неё родителя или потомков. Половина непонятных картин в поддержке объясняется тем, что смотрят на одну ногу из двух.
Идентификаторы
Их несколько, и путаница между ними — частая причина потерянного времени. Внутренний идентификатор транзакции используем мы. Идентификатор заказа приходит от мерчанта и возвращается ему обратно. Идентификатор на стороне банка приходит от эквайера и нужен при разборе с ним. При обращении в поддержку банка нужен третий, при поиске в наших логах — первый, а мерчант в письме почти всегда пришлёт второй.