Платежи принимались через нескольких провайдеров, у каждого из которых был свой формат данных и свои статусы. Бухгалтерия сверяла операции вручную, а о сбоях команда узнавала от клиентов. Требовалась единая платёжная система: одна точка интеграции, прозрачные статусы и автоматическая сверка.
Мы подключили провайдеров через единый слой и описали полный жизненный цикл операции: создание платежа, подтверждение, обработка webhook-событий, возвраты и повторные списания. Добавили подписки и регулярные счета, а для финансовой команды — раздел «Счета» с фильтрами, статусами, массовой отправкой и выгрузками. Сверка с банковскими выписками проходит автоматически, расхождения выделяются отдельно, поэтому ошибку видно в день её появления.
Проект занял пять месяцев: две недели на аудит текущих платежей, три на проектирование схемы операций, семь на шлюз и обработку webhook-событий, пять на подписки и биллинг и четыре на сверку и запуск. Основа системы — Node.js и PostgreSQL, события обрабатываются через RabbitMQ, интерфейс написан на React, а за состоянием сервисов следит мониторинг на Grafana.