2016-03-03 16 views
6

Ich bin derzeit mit Stripe integrieren und bevor ich ein vorhandenes Abonnement aktualisieren Ich muss alle vorhandenen Abonnements abrufen, um die richtige Abonnement-ID zu finden.Wie iterieren über Stripe-Abonnement-Sammlung

Wenn ich jedoch die Stripe PHP-Bibliothek verwende, scheint es mir nicht möglich zu sein, über die tatsächliche Abonnement-Sammlung zu iterieren. Diese

ist, wie ich das Abonnement Sammlung abrufen:

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

Ich habe versucht, auch diese, die gleich sein sollte, und scheint nicht Unterschied im Endergebnis zu machen:

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

Aus Gründen der Vernunft, nach Erhalt der Abonnement-Sammlung I echo eine count() darauf, um zu sehen, wie viele Elemente es enthält:

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

Wenn ich print_r() die gesamte $subscriptions Objekt Ich sehe tatsächlich die eine bestehende Abonnement, so habe ich überprüft, dass es abgerufen wurde.

Ich möchte dann einfach über die Sammlung mit einer foreach iterieren. Dies sollte möglich sein, weil die StripeObject (eine Basisklasse für die Sammlung zurückgegeben) implementiert ArrayAccess:

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

Dies ist jedoch nicht in irgendetwas zur Folge hat.

Wie kann ich eine Stripe-Subskriptionssammlung korrekt durchlaufen?

+0

ist $ Abonnements ein StripeList Objekt, $ Abonnements-> Daten ist die eigentliche Array –

+0

Nein, es nicht ist. Es ist eine 'Collection' ->' ApiResource' -> 'StripeObject' welche' ArrayAccess' implementiert. Abgesehen davon sind "Daten" "geschützt". – Luke

+2

Test durchlaufen durch $ subscriptions-> Daten, wenn Sie print_r erscheint als geschützt, aber es ist immer noch zugänglich. –

Antwort

7

Stripe "Liste" API-Aufrufe geben "List-Objekte" oder "Sammlungen" zurück. Diese Objekte enthalten eine tatsächliche Liste in ihrem data Attribut.

In PHP, du so eine Sammlung iterieren kann:

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

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

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

Danke, dass du hier rumgehangen hast. Denkst du, dass es möglich wäre, Beispiele dafür in den Stripe-Referenzdokumenten zu finden? Es zeigt derzeit nur sehr grundlegende Interaktion (d. H. Informationen abrufen), aber es zeigt nicht wirklich, wie man mit einmal abgerufenen Daten arbeitet. Das JSON-Blob, das für jede Methode gezeigt wird, ist nett, aber am Ende bringt es keinen großen Mehrwert, wenn Sie mit einer der Bibliotheken arbeiten, in der so ziemlich alles abstrahiert ist. – Luke