导轨,条纹和订阅 - 模型

时间:2012-04-17 03:58:04

标签: ruby-on-rails stripe-payments

在我的网站中,我将所有Stripe集成工作,但我仍然试图了解如何确定订阅是否有效。我考虑过将所有内容保存在本地数据库中,但是后来我有来自Stripe的重复数据。但是,如果Stripe是主记录,那么如果它们已关闭并且我无法确定用户是否具有有效订阅该怎么办?在我看来应该有一种方法可以将所有内容同步到一起。我应该与帐户/用户保持当前订阅到期的某种日期吗?

哪些订阅信息应与模型一起存储?这应该是用户模型的一部分还是作为单独的“订阅”模型的一部分?

3 个答案:

答案 0 :(得分:28)

只需存储一个标志,指示订阅是否有效,订阅时默认设置为true。

然后设置条带回调挂钩,以通知您的应用程序订阅是否已过期/取消/等等。听取customer.subscription.updated并查看状态字段,该字段可以是active,past_due,cancelled或unpaid。

您将立即通过条带通知您,因此无需承担不断检查的开销。如果由于某种原因条纹无法进行回调,它将使用指数退避重试几次,因此它非常健壮。

不要自己实现订阅,也不要定期运行作业以与stripe同步。使用条带回调钩子这两种策略都是完全没必要的。

答案 1 :(得分:1)

  

“哪些订阅信息应与模型一起存储?应该   这是用户模型的一部分或作为单独的一部分   “订阅”模式?“

将所有信息存储在订阅模型中,并将该模型与用户关联。由于订阅具有自己的元数据,并且它们实际上是不同的实体,因此将它们分开存储是有意义的。

  

“但是,如果Stripe是主记录,那么如果他们失败了我会怎么样   无法确定用户是否有有效订阅?在我看来似乎   应该有办法将所有东西同步在一起。我应该保留一些吗?   当前订阅到期的日期与   帐户/用户?“

如果您在每次请求或登录时检查订阅,那么每次点击条带api可能没有意义......这有很多开销。这一切都取决于您的使用案例,但运行每天(或每小时)的cron作业可能是有意义的,该作业访问条带api以检查订阅到期,然后更新本地订阅商店。

答案 2 :(得分:1)

我使用SaaS Rails Kit处理它的方法是保留订阅模型中的信息,包括next_renewal_at字段,将其留给Stripe进行计费。相反,我有一个每日cron作业,它会对所有具有new_renewal_at =今天的订阅进行收费,因此您可以立即知道收费是否失败。