Как разграничить пользователей тарифных планов 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 может иметь несколько подписок, поэтому эта функция будет реализована на объекте подписки.