【问题标题】:How to iterate over Stripe subscription collection如何迭代 Stripe 订阅集合
【发布时间】:2016-06-17 13:02:51
【问题描述】:

我目前正在与 Stripe 集成,在更新现有订阅之前,我需要检索所有现有订阅以找到正确的订阅 ID。

但是,当我使用 Stripe PHP 库时,我似乎无法遍历实际的订阅集合。

这是我检索订阅集合的方式:

$subscriptions = $customer->subscriptions->all();

这个我也试过了,应该是一样的,对最终结果似乎没有什么影响:

$subscriptions = \Stripe\Customer::retrieve( $customer->id )->subscriptions->all();

为了理智,在获得订阅集合后,我在上面echo count() 看看它包含多少元素:

echo count( $subscriptions );  // echos '1' which is what I expect.

当我 print_r() 整个 $subscriptions 对象时,我确实看到了一个现有的订阅,所以我已经验证它已被检索到。

然后我想用foreach 简单地遍历集合。这应该是可能的,因为StripeObject(返回集合的基类)实现了ArrayAccess

foreach( $subscriptions as $subscription )
{
   print_r( $subscription );
}

但是,这不会产生任何结果。

如何正确迭代 Stripe 订阅集合?

【问题讨论】:

  • $subscriptions 是 StripeList 对象,$subscriptions->data 是实际数组
  • 不,不是。这是一个Collection -> ApiResource -> StripeObject,它实现了ArrayAccess。除此之外,dataprotected
  • 测试迭代 $subscriptions->data 当你 print_r 它会显示为受保护但仍然可以访问。
  • 嗯。这似乎行得通。很混乱。他们确实需要在他们的 API 文档中提供示例,而不仅仅是列出那些 JSON 转储。谢谢你把你的大脑借给我。如果您将其添加为答案,我会认为它是正确的。

标签: php stripe-payments


【解决方案1】:

条带化“列表”API 调用返回“列表对象”或“集合”。这些对象在其data 属性中包含一个实际列表。

在 PHP 中,您可以像这样遍历集合:

$subscriptions = $customer->subscriptions->all();

echo count($subscriptions->data); // Number of resources returned

foreach ($subscriptions->data as $subscription) {
    // Do something with $subscription
}

【讨论】:

  • 感谢您在这里闲逛。您认为有可能在 Stripe 参考文档中反映这种情况吗?它目前只显示非常基本的交互(即检索信息),但并没有真正显示一旦检索到如何处理数据。为每种方法显示的 JSON blob 很不错,但最终,如果您使用其中一个几乎所有内容都被抽象的库,它并没有增加太多价值。
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2017-12-27
  • 2017-12-03
  • 2017-08-20
  • 2014-10-01
  • 2021-05-22
相关资源
最近更新 更多