0

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

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

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

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

提前致谢,

4

2 回答 2

4

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

文档

Stripe 让处理失败的付款变得容易。Stripe 可以在失败后自动重试循环支付,如果反复失败可以自动取消客户的订阅。可以在您的帐户设置中轻松设置等待多长时间以及重试多少次。

我可能会在我的模型上跟踪:subscription_active布尔值或类似值。User当用户登录时,您可以检查 API 以查看用户订阅的状态。API 文档status对响应中的订阅有这样的说法(强调我自己的)

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

如果响应返回为上述粗体状态之一,请为用户标记:subscription_activeto false。检查user.subscription_active?您需要有条件地为用户启用应用程序功能的位置。

于 2013-08-06T16:51:19.087 回答
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 的具体细节!

于 2013-08-06T16:52:02.597 回答