Ruby on rails 在支付失败后,防止用户使用SaaS应用程序的最佳方法是什么

Ruby on rails 在支付失败后,防止用户使用SaaS应用程序的最佳方法是什么,ruby-on-rails,paypal,saas,stripe-payments,recurring-billing,Ruby On Rails,Paypal,Saas,Stripe Payments,Recurring Billing,我正在使用RubyonRails开发一个SaaS应用程序。每个用户都必须订阅特定的计划才能开始使用该应用程序。此步骤已使用Stripe完成 问题是,如果自动支付订阅失败(他更改了信用卡等),我不知道如何阻止该用户使用我的应用程序。我正在考虑使用用户模型中的一列将此用户标记为非活动用户并阻止其登录。但它没有像我预期的那样工作,因为我希望该用户能够登录,但他必须更新订阅才能继续 顺便说一句,我在Rails上看到了许多SaaS示例,例如或,但似乎每当出现故障时,他们都不会处理提供商(Stripe或Pa

我正在使用RubyonRails开发一个SaaS应用程序。每个用户都必须订阅特定的计划才能开始使用该应用程序。此步骤已使用Stripe完成

问题是,如果自动支付订阅失败(他更改了信用卡等),我不知道如何阻止该用户使用我的应用程序。我正在考虑使用用户模型中的一列将此用户标记为非活动用户并阻止其登录。但它没有像我预期的那样工作,因为我希望该用户能够登录,但他必须更新订阅才能继续

顺便说一句,我在Rails上看到了许多SaaS示例,例如或,但似乎每当出现故障时,他们都不会处理提供商(Stripe或Paypal)的回发

请让我知道你们的想法,以及你们在类似项目中如何处理这个问题


提前感谢,

Stripe会定期为您收取卡费。您的应用程序不负责为订阅您的服务的用户创建新的费用

Stripe使处理失败的付款变得容易。Stripe可以在定期付款失败后自动重试,如果客户的订阅一再失败,则可以自动取消订阅。等待多长时间以及重试多少次可以在您的帐户设置中轻松设置

我可能会在我的
用户
模型上跟踪
:订阅活动
布尔值或类似值。当用户登录时,您可以对照API查看用户订阅的状态。在回复中说明订阅的
状态(强调我自己):

可能的值有
试用
激活
过期
取消
,或
未付
。仍处于试用期的订阅将进行
试用
,并在试用期结束后移动到
活动
当续订付款失败时,订阅将变为过期
。Stripe已用尽所有付款重试尝试后,订阅的状态为
已取消
未支付
,具体取决于您的重试设置。
请注意,当订阅的状态为未支付时,在更新客户的卡详细信息之前,不会尝试任何未来的发票


如果响应返回为上述粗体状态之一,请将用户的
:subscription\u active
标记为
false
。在需要为用户有条件地启用应用程序功能的任何地方,请选中“用户订阅”\u active?。

Stripe会定期为您的卡收费。您的应用程序不负责为订阅您的服务的用户创建新的费用

Stripe使处理失败的付款变得容易。Stripe可以在定期付款失败后自动重试,如果客户的订阅一再失败,则可以自动取消订阅。等待多长时间以及重试多少次可以在您的帐户设置中轻松设置

我可能会在我的
用户
模型上跟踪
:订阅活动
布尔值或类似值。当用户登录时,您可以对照API查看用户订阅的状态。在回复中说明订阅的
状态(强调我自己):

可能的值有
试用
激活
过期
取消
,或
未付
。仍处于试用期的订阅将进行
试用
,并在试用期结束后移动到
活动
当续订付款失败时,订阅将变为过期
。Stripe已用尽所有付款重试尝试后,订阅的状态为
已取消
未支付
,具体取决于您的重试设置。
请注意,当订阅的状态为未支付时,在更新客户的卡详细信息之前,不会尝试任何未来的发票


如果响应返回为上述粗体状态之一,请将用户的
:subscription\u active
标记为
false
。在需要为用户有条件地启用应用程序的功能时,请选中“user.subscription\u active?”。

我认为您应该以类似于Desive的方式处理此问题。 要强制使用有效的登录用户,您将在\u操作\u用户身份验证\u用户之前放置
在您的控制器中

例如,如果我必须解决您的问题,我会创建类似的方法

before_action verify_payment!

def verify_payment!
  redirect_to user_payments_path unless current_user.has_valid_payment?
end
protected :verify_payment!
然后在
User#has#u valid_payment?
中,将逻辑放在检查帐户是否有效的位置(我没有看那些屏幕广播,但我想这类似于检查上次付款是否超过30天,等等)

编辑:


请查看您的答案,了解特定于条带的详细信息

我认为您应该以类似于Desive的方式处理此问题。 要强制使用有效的登录用户,您将在\u操作\u用户身份验证\u用户之前放置
在您的控制器中

例如,如果我必须解决您的问题,我会创建类似的方法

before_action verify_payment!

def verify_payment!
  redirect_to user_payments_path unless current_user.has_valid_payment?
end
protected :verify_payment!
然后在
User#has#u valid_payment?
中,将逻辑放在检查帐户是否有效的位置(我没有看那些屏幕广播,但我想这类似于检查上次付款是否超过30天,等等)

编辑:


请查看您的答案,了解特定于条带的详细信息

谢谢你的详细解释。根据您的描述,我必须检索存储在Stripe上的客户(我保留客户