【问题标题】:Rails + Stripe: where to store what type of subscription a user has?Rails + Stripe:在哪里存储用户的订阅类型?
【发布时间】:2012-11-11 13:25:22
【问题描述】:

Rails newb 在这里,所以在答案中添加尽可能多的细节,并随时告诉我我做错了。

背景:我正在构建一个 SaaS rails 应用程序并计划很快添加条带(支付)集成。我想在集成条带之前构建区分各种帐户类型(订阅计划)的功能。

我在整个应用程序中使用了许多 if / else 语句,具体取决于帐户类型(例如,免费、1 级、2 级)来向用户显示/隐藏适当的功能。我的基本陈述如下:

<% if current_user.account_level == "1" %>
    your account level is 1
<% elsif current_user.account_level == "2" %>
    your account level is 2
<% else %>

<% end %>

这假设我正在记录用户在用户模型(或其他模型)中的“帐户级别”。这是合适的地方吗?从技术上讲,Stripe 拥有最新的数据(即,如果卡取消,帐户级别会有所不同)。我应该直接使用 Stripe api 来确定帐户级别吗?看来我应该在我的数据中的某个地方记录下来。

在知道我将来会集成 Stripe 的情况下,我在开发过程中是否应该牢记任何其他最佳做法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 architecture stripe-payments


    【解决方案1】:

    虽然您是对的,Stripe 将存储最新数据,但我建议您为您经常使用的任何内容(如订阅状态)维护一个本地缓存。

    您可以使用两种主要方法来确保您的数据库具有最新状态:

    • 在您对 Stripe 进行 API 调用的代码中,请确保您还更新了本地副本,或者

    • 使用我们的 webhooks 来监听与您的客户相关的事件(例如,customer.subscription.updated)。通过这样做,您可以确保您的本地数据库始终与 Stripe 匹配——即使您通过仪表板更改客户的计划,您的 webhook 端点也会收到更新。

    在本地存储这些数据的主要好处是速度:您很可能不希望您的客户为访问此数据的每个请求等待 API 调用,尤其是因为您似乎在整个网站都需要它。

    您需要确保将 customer ID 存储在数据库中,以便将 Stripe 客户与本地用户进行匹配。

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 2017-08-22
      • 2020-10-19
      • 2016-10-18
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 2019-01-03
      • 2018-02-18
      相关资源
      最近更新 更多