Как разграничить пользователей тарифных планов Basic/Premium для использования только премиум-функций в Django REST?

Я работаю над SaaS-инструментом для написания текстов на бета-стадии, который построен на NextJS, React и Django REST. По мере того, как я набираю некоторую базу пользователей, я начинаю исследовать возможность введения премиум-плана с использованием Stripe.

Как и большинство других SaaS, у меня будет премиум-план на основе подписки, который предоставляет доступ только к премиум-функциям. Однако, даже после нескольких дней исследований, я все еще не знаю, как это обычно реализуется в Django/Backend. Вот что я придумал на данный момент, но опять же, я не уверен, что это лучший/обычный способ реализовать это.

  • Модель пользователя имеет поле 'premium', которое является либо True, либо False

  • Когда пользователь нажимает на вызов API только для премиум, Django будет проверять, является ли пользователь премиум или нет, чтобы решить, делать ли фактический вызов API. В настоящее время у меня есть маршрут '/user/me/', который возвращает основную информацию о пользователе как вызов API GET.

    .
  • При успешной оплате через stripe, stripe перенаправляет пользователя на success_url. Затем, каким-то образом я буду определять, когда пользователь переходит на success_url и затем устанавливать поле premium этого пользователя в True.

Я знаю, что это не идеальный способ, потому что я уже вижу много проблем/затруднений:

Как мне установить поле 'premium' обратно в False после прекращения оплаты пользователем

  • Как я могу "обнаружить" платеж stripe, чтобы установить премиум-поле пользователя

  • Предполагается ли, что эта функция должна быть реализована с объектами клиентов Stripe вместо этого? Я буду признателен за любые указания на то, где мне следует искать решения.

Если вы используете подписку на Checkout Session (low code solution), вы можете добавить дополнительные данные пары ключ-значение, такие как premium: true в поля metadata и subscription_data.metadata при создании подписки.

После завершения оплаты эти метаданные появятся в событиях webhook checkout.session.completed и customer.subscription.updated, которые вы затем сможете установить для пользователя как премиум в вашей собственной базе данных.

Объект клиента в Stripe может иметь несколько подписок, поэтому эта функция будет реализована на объекте подписки.

Вернуться на верх