Подписка в TG-боте ломается не на оплате, а на продлении и доступах
Если бот монетизируется по подписке, вам нужна не «кнопка оплатить», а связка: платёжный статус, срок доступа, повторное списание и мягкий фоллбэк при сбое. На практике это лучше собирать через отдельный billing-сервис, а не размазывать логику по хендлерам.
Для Laravel обычно смотрят в сторону Cashier для Stripe-логики, Laravel Subscription/Payments-пакетов и очередей для вебхуков. Плюс нужна таблица с состояниями: trial, active, past_due, canceled, grace_period. Без этого любой ручной промокод или возврат быстро превращается в хаос.
В Node чаще берут SDK конкретного провайдера и слой orchestration поверх него: webhook-роутер, job queue, scheduler для проверки просрочек. Из библиотек полезны Stripe SDK, BullMQ для фоновых задач, и отдельный модуль access-control, который решает, пускать ли пользователя в Mini App, канал или premium-бота.
Что важно: не храните «доступ есть» как один флаг. Храните причину доступа, дату истечения, источник оплаты и последний webhook. Тогда проще чинить продления, выдавать grace-period и отключать фичи без ручного вмешательства. На практике выигрывает тот, у кого биллинг прозрачен для поддержки и не завязан на одну таблицу.
Telegram Bots & Mini Apps Money
@tgbots_money_radar
Подписка в TG-боте ломается не на оплате, а на продлении и доступах
Этот пост опубликован в Telegram-канале Telegram Bots & Mini Apps Money. Подписаться можно по ссылке: @tgbots_money_radar.