Владелец веб-сервиса пришёл перевести продукт с ручных продлений на подписку.
До этого клиент писал в личку, переводил деньги на карту, владелец лез в базу и ставил дату окончания руками.
На сотне активных пользователей это стало отдельной работой - кто-то не продлевался просто потому что забыл, кто-то платил дважды, чеков не выдавалось вовсе.
Выручку он считал по выписке с карты - то-есть месяц закрывался с точностью до ощущения.
Отдельно просил нормальный пробный период: раньше он раздавал его сообщениями и потом сам забывал закрыть.
Биллинг на FastAPI, данные в PostgreSQL, платежи через ЮKassa, сборка в Docker на VPS.
Тарифы заводятся в панели - цена, период, лимиты по функциям. Смена тарифа пересчитывается с остатком оплаченных дней.
Пробный период открывается проверочным списанием с карты, дальше идёт рекуррент по сохранённому платёжному методу.
Списание за сутки до конца периода, при отказе банка - три повтора с растущим интервалом, письмо клиенту после первой неудачи и за день до отключения доступа.
Чеки по 54-ФЗ уходят автоматически, состав собирается из тарифа.
Отмена в личном кабинете, доступ живёт до конца оплаченного периода.
Главная грабля здесь - вебхуки платёжного сервиса: приходят повторно, с задержкой и не по порядку. Каждое уведомление проверяется по подписи, гасится по идемпотентному ключу, статус подписки двигается только вперёд по цепочке. Так-же раз в час сервис сам опрашивает статусы платежей, которые висят в ожидании дольше десяти минут - это добирает то, что не доехало вебхуком.
Панель владельца - выручка по месяцам, активные и отменённые подписки, отток, ручное продление и возврат.
Продления идут без владельца, ручное включение доступа осталось кнопкой на редкие исключения.
За первый месяц со старой схемы переехало около 90 подписок, само продлилось 84.
Сообщения из поддержки в духе «оплатил, включите» пропали, доступ открывается по факту платежа за секунды.
Письмо о неудачном списании неожиданно стало удерживать людей: часть меняет карту и остаётся, раньше они отваливались молча.
У клиента приватный репозиторий, docker-compose, инструкция по обновлению и по возврату платежа через панель.
Позже завели промокоды на первый период и выгрузку платежей в Excel для бухгалтера.