8

在我的网站中,我的所有 Stripe 集成都在工作,但我仍在努力思考如何确定订阅是否处于活动状态。我曾考虑将所有内容都保存在本地数据库中,但随后我会从 Stripe 获得重复数据。但是,如果 Stripe 是主记录,如果它们已关闭并且我无法确定用户是否有活动订阅怎么办?在我看来,应该有一种方法可以将所有内容同步在一起。我应该与帐户/用户保留某种当前订阅到期日期吗?

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

4

3 回答 3

28

只需存储一个标志,指示订阅是否处于活动状态,订阅时默认设置为 true。

然后设置条带回调挂钩,以在订阅过期/取消/其他情况下通知您的应用程序。收听 customer.subscription.updated 并查看状态字段,可以是活动、过期、取消或未付款。

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

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

于 2012-07-07T04:00:29.420 回答
1

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

于 2012-04-17T19:45:03.407 回答
1

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

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

“但是,如果 Stripe 是主记录,如果它们出现故障并且我无法确定用户是否有活动订阅怎么办?在我看来,应该有一种方法可以将所有内容同步在一起。我应该保留某种日期吗?帐户/用户的当前订阅到期时间?”

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

于 2012-04-17T04:57:45.027 回答