当前位置: 首页 > 知识库问答 >
问题:

什么是最好的方法,以防止用户使用SaaS应用程序后失败付款

梁丘招
2023-03-14

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

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

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

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

提前感谢,

共有2个答案

苏翰学
2023-03-14

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

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

before_action verify_payment!

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

然后在用户#中#支付有效吗? 将逻辑放在检查帐户是否有效(我没有看那些屏幕广播,但我猜这可能类似于检查最后一次付款是否超过30天,等等)

编辑:

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

萧飞
2023-03-14

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

从医生那里

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

我可能会在我的用户模型上跟踪一个:subscription\u active布尔值或类似值。当用户登录时,您可以对照API查看用户订阅的状态。API文档在回复中对订阅的状态有如下说明(我自己强调):

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

如果响应返回为上述粗体状态之一,请将用户的:subscription\u active标记为false。检查用户。订阅激活了吗 需要有条件地为用户启用应用程序功能的任何地方。

 类似资料:
  • 我有一个客户端-服务器应用程序,两者都通过TCP进行通信。我们正在计划重用tcp内置的保持活动机制,以确保客户端和服务器都知道对方还活着。 几个问题: null

  • 我正在设计一个SAAS应用程序,每个用户拥有多租户数据库,每个数据库拥有唯一的订阅用户子域。当saas应用程序的订阅用户将更多用户添加到他们的仪表板或产品中时,问题就会出现,因此如何处理他们从我们的主应用程序页面的登录,因为他们的数据库条目将只在他们的管理员数据库中。或者我应该为所有用户使用一个全局数据库来处理登录? 我正在寻找任何有价值的建议,我是一个新手,刚刚开始在SAAS应用程序工作 谢谢

  • 问题内容: Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。 为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。 分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统? 问题答案: 有多种解决方案,取决于你的发行要求。 只是用一个jar。这

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?

  • 问题内容: 我必须为我的OJT公司编程一个应用程序管理系统。前端将在C#中完成,后端将在SQL中完成。 现在,我从来没有做过这样的项目。在学校里,我们只有关于SQL的基本课程。不知何故,我们的老师完全没有讨论SQL注入,而我直到现在才通过网上阅读与之接触。 所以无论如何,我的问题是:如何防止C#中的SQL注入?我模糊地认为,可以通过适当地屏蔽应用程序的文本字段来做到这一点,以使其仅接受指定格式的输

  • 我需要根据一些配置数据启动多个独立的周期性任务——总数事先不知道。例如,我想检查具有不同间隔和不同参数的不同目录的内容,其中列表和参数是从配置中读取的。 在我看来,夸克斯调度器只能调度固定的、预先已知的方法。动态/编程调度的最佳方法是什么?<代码>vertx.set周期 是正确的方法还是我应该以某种方式访问Quartz?