Отделите приём платежных событий, учёт денег, начисление внутренней валюты и доступ к тарифам. Повтор webhook не должен повторно начислять баланс.
Проектирование платформы обработки платежей
Отделите приём платежных событий, учёт денег, начисление внутренней валюты и доступ к тарифам. Повтор webhook не должен повторно начислять баланс.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется спроектировать архитектуру системы, способной принимать платежи из множества источников, вести их учёт и собирать аналитические данные по каждому потоку. Система должна начислять внутреннюю валюту пользователям в зависимости от полученных средств. Кроме того, необходимо создать API, позволяющий по ID пользователя получать сведения о подключённом тарифном плане.
Ответ
Отделите приём платежных событий, учёт денег, начисление внутренней валюты и доступ к тарифам. Повтор webhook не должен повторно начислять баланс.
Адаптеры источников проверяют подлинность события и сохраняют его уникальный provider/event ID. Обработка в транзакции создаёт неизменяемую запись учёта, фиксирует статус платежа и начисление по сохранённому правилу конвертации. Деньги — целые минимальные единицы; возвраты и chargeback оформляют компенсационными проводками, не удалением истории.
Outbox доставляет события в аналитику и сервис тарифов. API пользователя проверяет полномочия и возвращает план, статус, начало и конец доступа. Нужны reconciliation с источниками, идемпотентность и аудит; пользовательский redirect не подтверждает платёж. Детали валют, комиссий и требований хранения согласуются отдельно.