Проектирование и разработка SaaS-платформ: Архитектурные паттерны биллинга и подписок
Как построить надежный биллинг для SaaS и не потерять деньги из-за пропущенных вебхуков
Главный источник дохода любой SaaS-платформы — это рекуррентные (автоматические) платежи. В отличие от классического интернет-магазина, где покупка происходит разово, в SaaS жизненный цикл пользователя состоит из множества состояний: триал, активная подписка, задержка платежа (dunning), заморозка и отмена. Написание такой логики «в лоб» через простые флаги в базе данных неизбежно приводит к сбоям: пользователи либо получают бесплатный доступ из-за необработанного отказа банка, либо сталкиваются с ложной блокировкой аккаунта. Мы разберем отказоустойчивую архитектуру биллинга на базе Laravel со строгой обработкой событий от платежных шлюзов.
Архитектура состояний подписки (State Pattern)
Основное правило надежного биллинга — сайт никогда не должен менять статус подписки пользователя на основе действий в интерфейсе. Все изменения должны происходить исключительно по инициативе платежного шлюза (ЮKassa, Stripe, Т-Банк) через асинхронные Webhook-уведомления. Задача бэкенда — развернуть защищенный эндпоинт, который проверяет цифровую подпись каждого входящего запроса от банка, логирует сырой JSON в историю и запускает фоновую задачу (Job) для обновления состояния аккаунта.
Шаг 1: Разработка защищенного контроллера обработки вебхуков шлюза
Пишем обработчик событий, который изолирует парсинг входящего пакета от бизнес-логики приложения и гарантирует защиту от атак типа «подмена ответа»
Шаг 2: Фоновая обработка состояний подписки в Job-классе
Внутри обработчика очереди мы разбираем тип события и безопасно мутируем даты действия тарифа пользователя, используя встроенные возможности Carbon.
Итоги и резюме
Главные правила финансовой стабильности SaaS
Построение биллинга через логирование вебхуков и фоновые очереди полностью исключает рассинхронизацию данных. Если ваш сервер кратковременно упадет в момент списания денег, платежная система повторит запрос позже, а система фоновых очередей Laravel Horizon обработает его без потери транзакции. Такой подход защищает бизнес от упущенной выгоды и обеспечивает прозрачный, автоматизированный опыт взаимодействия с платформой для ваших клиентов.
Была ли полезна статья?
Оценки помогают мне понимать, какие темы вам наиболее интересны.