在付款失败后阻止用户使用SaaS应用的最佳方法是什么?

时间:2013-08-06 16:37:54

标签: ruby-on-rails paypal saas stripe-payments recurring-billing

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

完成

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

顺便说一句,我在Rails上看到了许多SaaS示例,例如https://github.com/RailsApps/rails-stripe-membership-saashttps://github.com/railscasts/289-paypal-recurring-billing,但似乎每当发生故障时它们都不处理来自提供程序(Stripe或Paypal)的回发

请告诉我您的想法以及您在类似项目中如何处理此问题。

提前致谢,

2 个答案:

答案 0 :(得分:4)

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

来自 the docs

  

Stripe可以轻松处理失败的付款。 Stripe可以在失败后自动重试定期付款,并且如果重复失败,可以自动取消客户的订阅。您可以在帐户设置中轻松设置等待时间和重试次数。

我可能会在:subscription_active模型上跟踪User布尔值或类似内容。当用户登录时,您可以检查API以查看用户订阅的状态。 API docs 可以在回复(强调我自己的)中对此订阅的status进行说明:

  

可能的值包括trialingactive past_due canceled {{ 1}} 即可。仍处于试用期的订阅为unpaid,并在试用期结束后移至trialing续订订阅的付款失败时,订阅将变为active。在Stripe已用尽所有付款重试尝试后,订阅的状态为past_duecanceled,具体取决于您的重试设置。请注意,当订阅状态为未付款时,在客户的卡详细信息更新之前,不会尝试任何未来的发票。

如果响应以上述加粗状态之一返回,请为用户标记unpaid:subscription_active。检查false,以便有条件地为用户启用应用程序功能。

答案 1 :(得分:1)

我认为你应该以类似于Devise的工作方式处理这个问题。 要强制使用有效的登录用户,您需要将before_action authenticate_user!放入控制器中。

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

before_action verify_payment!

def verify_payment!
  redirect_to user_payments_path unless current_user.has_valid_payment?
end
protected :verify_payment!

然后在User#has_valid_payment?中进行逻辑检查是否有帐户有效(我没有看过那些截屏视频,但我想这会像检查上次付款是否超过30天等)

编辑:

检查优秀的Deefour答案,了解Stripe的具体细节!