Перейти к содержанию

Биллинг (ЮKassa / Stripe)

Разовая годовая оплата тарифов Pro и Business. Enterprise — без онлайн-checkout (только контакт).

Включение

В .env:

BILLING_ENABLED=true
BILLING_PROVIDER=yookassa   # или stripe
BILLING_SUCCESS_URL=https://agentops.com.ru/settings?billing=success
BILLING_CANCEL_URL=https://agentops.com.ru/settings?billing=cancel
PLAN_PRO_PRICE_YEARLY=29900
PLAN_BUSINESS_PRICE_YEARLY=99900

ЮKassa

YOOKASSA_SHOP_ID=...
YOOKASSA_SECRET_KEY=...

URL уведомлений в кабинете ЮKassa:

https://<ваш-домен>/api/v1/billing/webhooks/yookassa

События: payment.succeeded, payment.canceled.

Stripe

BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=sk_...
STRIPE_WEBHOOK_SECRET=whsec_...
PLAN_PRO_PRICE_YEARLY_USD=299
PLAN_BUSINESS_PRICE_YEARLY_USD=999

Webhook:

https://<ваш-домен>/api/v1/billing/webhooks/stripe

Подписка на checkout.session.completed (опционально checkout.session.expired).

Поток

  1. Admin открывает Settings → Подписка и нажимает Upgrade.
  2. API создаёт запись payments (pending) и сессию оплаты у провайдера.
  3. Пользователь оплачивает на стороне провайдера.
  4. Webhook помечает платёж succeeded и пишет в tenant.settings:
{
  "plan": "pro",
  "plan_expires_at": "2027-08-11T12:00:00Z",
  "billing_last_payment_id": "..."
}
  1. Через 365 дней resolve_plan считает tenant free, пока не будет нового платежа.

API

Метод Путь Заметки
GET /api/v1/billing/plans Каталог + флаг enabled
GET /api/v1/billing/status Текущий план / опционально payment_id
POST /api/v1/billing/checkout Body { "plan": "pro" } — Admin+
POST /api/v1/billing/webhooks/yookassa Публичный
POST /api/v1/billing/webhooks/stripe Публичный + подпись

Чеклист

  • Миграция 018_billing_payments.
  • Держите BILLING_ENABLED=false, пока не настроены ключи и webhooks.
  • Сначала sandbox / Stripe test mode.
  • После деплоя: GET /api/v1/billing/plans (с авторизацией).