3

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 的情况下,我在开发过程中是否应该牢记任何其他最佳实践?

4

1 回答 1

10

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

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

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

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

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

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

于 2013-01-01T19:39:22.390 回答