Rails + Stripe:在哪里存储用户拥有的订阅类型?

sev*_*ens 2 architecture ruby-on-rails ruby-on-rails-3 stripe-payments

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 %>
Run Code Online (Sandbox Code Playgroud)

这假设我记录了用户在用户模型(或其他一些模型)中的"帐户级别".这是适当的地方吗?从技术上讲,Stripe拥有最新数据(即如果卡取消了帐户级别会有所不同).我应该直接使用Stripe api来确定帐户级别吗?好像我应该在我的数据中的某处记录.

知道我将来会集成Stripe,在开发过程中是否还应该记住其他最佳实践?

小智 9

虽然Stripe将存储最新数据你是对的,但我建议你保留一个你经常使用的任何东西的本地缓存(比如订阅状态).

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

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

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

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

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