Pracuję nad integracją Stripe i jestem zaskoczony faktycznymi odpowiedziami uzyskanymi z PHP API. Zacząłem od przekonania, że referencja API była dokładna i że odpowiedź byłaby ciągiem JSON, jak pokazano dla każdej metody. Szybko odkryłem istotne różnice. Najczęściej w polu JSON brakuje pola id. Ponadto, odpowiedź wydaje się być ciągiem znaków, obiektem i może niektórymi innymi strukturami, wszystko w tym samym czasie.Jaka jest struktura odpowiedzi metody Stripe PHP API?
Oto mój kod debugowania. Używam najnowszej biblioteki Stripe PHP w wersji 1.7.15.
function var_dump_ret($mixed=null)
{
ob_start();
var_dump($mixed);
$content=ob_get_contents();
ob_end_clean();
return($content);
}
$token=$_POST['stripeToken'];
$customer=Stripe_Customer::create(array(
"card"=>$token,
"plan"=>"agency")
);
$custVarDump=var_dump_ret($customer);
$cDecoded=json_decode($customer);
$Debug="Invidual attributes of JSON decoded customer object:"._EOL;
$Debug.="object:".$cDecoded->object._EOL;
$Debug.="created:".$cDecoded->created._EOL;
$Debug.="id:".$cDecoded->id._EOL;
$Debug.="livemode:".$cDecoded->livemode._EOL;
$Debug.="description:".$cDecoded->description._EOL;
$Debug.="active_card.object:".$cDecoded->active_card->object._EOL;
$Debug.="active_card.last4:".$cDecoded->active_card->last4._EOL;
$Debug.="active_card.type:".$cDecoded->active_card->type._EOL;
$Debug.="active_card.exp_month:".$cDecoded->active_card->exp_month._EOL;
$Debug.="active_card.exp_year:".$cDecoded->active_card->exp_year._EOL;
$Debug.="active_card.fingerprint:".$cDecoded->active_card->fingerprint._EOL;
$Debug.="active_card.country:".$cDecoded->active_card->country._EOL;
$Debug.="active_card.name:".$cDecoded->active_card->name._EOL;
$Debug.="active_card.address_line1:".$cDecoded->active_card->address_line1._EOL;
$Debug.="active_card.address_line2:".$cDecoded->active_card->address_line2._EOL;
$Debug.="active_card.address_city:".$cDecoded->active_card->address_city._EOL;
$Debug.="active_card.address_state:".$cDecoded->active_card->address_state._EOL;
$Debug.="active_card.address_zip:".$cDecoded->active_card->address_zip._EOL;
$Debug.="active_card.address_country:".$cDecoded->active_card->address_country._EOL;
$Debug.="active_card.cvc_check:".$cDecoded->active_card->cvc_check._EOL;
$Debug.="active_card.address_line1_check:".$cDecoded->active_card->address_line1_check._EOL;
$Debug.="active_card.address_zip_check:".$cDecoded->active_card->address_zip_check._EOL;
$Debug.="email:".$cDecoded->email._EOL;
$Debug.="delinquent:".$cDecoded->delinquent._EOL;
//$Debug.="subscription:".$cDecoded->subscription._EOL;
$Debug.="discount:".$cDecoded->discount._EOL;
$Debug.="account_balance:".$cDecoded->account_balance._EOL;
$Debug.="unaltered response from Stripe_Customer::create:"._EOL.$customer._EOL.
"var dump of response:"._EOL.$custVarDump._EOL.
"print_r of json_decode of response:"._EOL.print_r($cDecoded,true)._EOL;
file_put_contents(_LOGFILE,$Debug,FILE_APPEND);
Poniżej znajduje się zawartość mojego pliku debugowania dla atrybutów indywidualnych obiektu klienta dekodowanego przez JSON. Po uruchomieniu kod wysłał powiadomienie.
Wskazówka: niezdefiniowany nieruchomości: stdClass :: $ id w prążki/subscription.php na linii 51
Należy również pamiętać, że musiałem wypowiedzieć się wiersz dodaną „subskrypcja” do napisu debugowania ze względu na krytyczny błąd dotyczący stdClass.
object:customer
created:1365951909
id:
livemode:
description:
active_card.object:card
active_card.last4:4242
active_card.type:Visa
active_card.exp_month:7
active_card.exp_year:2013
active_card.fingerprint:WTXPLgKDCXyp9xpD
active_card.country:US
active_card.name:charlie
active_card.address_line1:
active_card.address_line2:
active_card.address_city:
active_card.address_state:
active_card.address_zip:
active_card.address_country:
active_card.cvc_check:pass
active_card.address_line1_check:
active_card.address_zip_check:
email:
delinquent:
discount:
account_balance:0
W szczególności brak jest identyfikatora klienta. Nie istnieje w odpowiedzi JSON. Jednak, jak widać w niektórych przykładach Stripe, można uzyskać do niego dostęp za pomocą $ customer-> id. Co więcej, wyjście var_dump wskazuje na jeszcze więcej atrybutów obecnych w strukturze, której nie mogę zrozumieć. Cały plik debugowania ma numer http://www.helioza.com/stripe/debug.txt. Pokazałem tylko metodę tworzenia klienta, ale mam podobne problemy z fakturami i nie mogę znaleźć identyfikatora faktury nigdzie w odpowiedziach na Stripe_Invoice :: all lub Stripe_Invoice :: nadchodzących.
Pytania
1) W jaki sposób wartość zwracana przez Stripe_Customer :: utworzyć być zarówno ciągiem i obiekt w tym samym czasie?
2) Gdzie mogę znaleźć dokumentację opisującą metody zwracania wartości metody API, w tym sposób dostępu do każdego atrybutu?
Dzięki Evan. To pomaga w niektórych zagadkach. Nadal nie rozumiem, dlaczego mogę echo obiektu i uzyskać prawidłowy tekst. Zwykle PHP po prostu zgłasza "obiekt" i odmawia echa czegokolwiek innego. Nadal staram się rozgryźć strukturę odpowiedzi. Trial i błąd zajmuje dużo czasu. Na pewno byłoby pomocne, gdyby istniał dokument struktury zwrotu dla każdej metody. – Helioza
Wszystkie właściwości obiektu są chronione, dlatego ich nie widzisz. PHP SDK faktycznie implementuje interfejs PHP 'ArrayAccess', który pozwala na dostęp do potrzebnych danych poprzez' $ response ['some_key'] ', gdzie klucze są wszystkimi opcjami wymienionymi na https://stripe.com/docs/ api? lang = php # ładunki. To całkiem łatwe w ten sposób. –