Проект · Урок 89

Проект: подписки и кабинет

Регулярные платежи — формат продуктов, который продаётся дороже разовой покупки. Продолжаем урок 72: подписочная модель, пробный период и личный кабинет пользователя.

План и сессия подписки

// Продукт, цена и периодичность: price_recurring = month
await stripe.subscriptions.create({
  customer: user.stripeId,
  items: [{ price: "price_monthly_pro" }],
  trial_period_days: 7,               // пробные 7 дней
  success_url: "https://app.ru/cabinet"
});

Кабинет пользователя

app.post("/webhooks/stripe", raw, async (req) => {
  const ev = stripe.webhooks.constructEvent(req.body, sig, SECRET);
  const map = {
    "customer.subscription.updated": syncStatus,
    "invoice.paid":                  grantAccess,
    "invoice.payment_failed":        flagPastDue
  };
  if (map[ev.type]) await map[ev.type](ev.data.object);
});
💡
Доступ должен расти из статуса в БД (актуального по webhook), а не из клиента. Юзер мог «отменить по-тайком» — сервер проверит уведомление и выключит доступ.
ℹ️
Финальный продукт уроков 72+89 — регулярный доход-бизнес из кода: платёжный цикл, кабинет, статусы. В портфолио эта пара «платежи + подписки» смотрится лучше пары лендингов.