Skip to content

Транзакция как центральная сущность

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

Основные типы

ТипЧто означает
ПлатёжПриём денег от плательщика в пользу мерчанта
ВыплатаОтправка денег получателю со счёта мерчанта
ВозвратВозврат ранее принятого платежа, полный или частичный
ПрибыльНаша комиссия, учтённая отдельной операцией
Электронные деньгиЭмиссия и погашение в соответствующих сценариях

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

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

Что описывает транзакция

Транзакция связывает вместе четыре вещи, и в этом её ценность как единой модели.

Деньги: сумма, валюта, комиссия, курс конверсии, если валюта платежа и счёта различаются.

Стороны: мерчант, его счёт, плательщик с доступными нам данными, а также заказ на стороне мерчанта — его идентификатор мы возвращаем в каждом уведомлении.

Маршрут: через какой гейт и какой драйвер проводится операция, что банк ответил, какие поля обработки вернул.

Состояние: статус, стадия и время — см. статусы и стадии.

Связи между транзакциями

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

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

Идентификаторы

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

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