从 Stripe 检索客户的订阅 ID

问题描述 投票:0回答:3

在 Rails 中,我正在尝试实现一个控制器操作,该操作将允许客户更改他们订阅的计划。根据 Stripe 文档,可以按如下方式完成此操作:

customer = Stripe::Customer.retrieve("CUSTOMER_ID")
subscription = customer.subscriptions.retrieve("SUBSCRIPTION_ID")
subscription.plan = "premium_monthly"
subscription.save

我将每个客户的 ID 保存在数据库的用户表中,但我不知道如何在给定客户 ID 的情况下检索客户的订阅 ID。该项目中的每个客户只有一个订阅,鉴于他们的客户 ID,我如何才能提取该订阅?

ruby-on-rails stripe-payments
3个回答
17
投票

Stripe API 参考的相关部分表明,在检索客户后,您将可以访问包含可访问订阅列表的 URL 的订阅属性。

但是,创建订阅时,Stripe 会将订阅连同订阅 ID 返回给您。我建议将其存储在您的数据库中作为客户模型的一个属性(如果他们只有一个订阅),或者,我使用的方法是在我的数据库中拥有一个订阅模型,该模型存储一些经常访问的数据和避免过多 ping Stripe API。


10
投票

“检索客户后您将有权访问订阅”

2019 年的 API 就是这种情况。

自 API 版本 2019-08-14 → 2020-08-27 以来的更改 默认情况下不再包含客户的订阅属性。您可以扩展列表,但出于性能原因,我们建议除非需要,否则不要这样做。

参见 https://stripe.com/docs/api/expanding_objects

示例代码(PHP):

$stripe = new \Stripe\StripeClient(YOURSTRIPE_SECRETKEY);
$stripe_customer = $stripe->customers->retrieve($payerid, [ 'expand' => ['subscriptions'] ]);
$stripe_status = $stripe_customer->subscriptions->data[0]->status;

我仍在努力找出“推荐的方式”,并希望能报告回来。


0
投票

您不需要获取客户对象来检索订阅。只需使用静态 Subscription.search API,如下所示:

final SubscriptionSearchResult searchResult 
    = Subscription.search(SubscriptionSearchParams.builder()
                            .setQuery("customer:'PUT_CUSTOMER_ID_HERE'")
                            .build());
...

final List<Subscription> subscriptions = searchResult.getData();
© www.soinside.com 2019 - 2024. All rights reserved.