2016-03-03 9 views
6

Aktualnie integruję się z programem Stripe i zanim zaktualizuję istniejącą subskrypcję, potrzebuję pobrać wszystkie istniejące subskrypcje, aby znaleźć prawidłowy identyfikator subskrypcji.Jak iterować nad kolekcją subskrypcji Stripe

Jednak, kiedy używam biblioteki Stripe PHP, wydaje mi się, że nie jestem w stanie powtórzyć aktualnej kolekcji subskrypcji.

ten sposób odzyskać kolekcję Subskrypcja:

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

Próbowałem również ten, który powinien być taki sam i nie wydaje się, aby różnica w efekcie końcowym:

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

Dla zdrowia, po uzyskaniu kolekcji subskrypcji I echo a count() na niej, aby zobaczyć, ile elementów zawiera:

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

Kiedy I print_r() cały obiekt rzeczywiście widzę jedną istniejącą subskrypcję, więc zweryfikuję, że została ona pobrana.

Następnie chcę po prostu powtórzyć kolekcję za pomocą foreach. Powinno to być możliwe, ponieważ StripeObject (klasa bazowa dla wracającej kolekcji) realizuje ArrayAccess:

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

Jednak to nie skutkuje niczym.

Jak poprawnie wykonać iterację w kolekcji subskrypcji Stripe?

+0

$ subskrypcje jest obiektem StripeList, $ Abonament-> danych jest rzeczywista tablica –

+0

Nie, to nie jest. To 'Collection' ->' ApiResource' -> 'StripeObject', który implementuje' ArrayAccess'. Poza tym "dane" są "chronione". – Luke

+2

testowanie iteracyjne za pośrednictwem $ subscriptions-> data, gdy print_r będzie wyświetlane jako chronione, ale nadal jest dostępne. –

Odpowiedz

7

Komendy API "list" pasków zwracają "obiekty listy" lub "kolekcje". Objety te zawierają rzeczywistą listę w swoim atrybucie data.

W PHP można iteracyjne nad kolekcji tak:

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

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

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

Dzięki za spędzanie tutaj czasu. Czy sądzisz, że byłoby możliwe, aby przykłady tego znalazły odbicie w dokumentach referencyjnych Stripe? Obecnie pokazuje jedynie bardzo podstawową interakcję (tj. Pobieranie informacji), ale tak naprawdę nie pokazuje sposobu pracy z danymi po ich pobraniu. Blob JSON pokazany dla każdej metody jest przyjemny, ale w końcu nie dodaje wiele wartości, jeśli pracujesz z jedną z bibliotek, gdzie prawie wszystko jest wyabstrahowane. – Luke