Tôi đang làm việc trên một tích hợp Stripe và tôi bối rối bởi các phản hồi thực tế tôi nhận được từ API PHP. Tôi bắt đầu tin rằng tham chiếu API là chính xác và phản hồi sẽ là một chuỗi JSON như được hiển thị cho mỗi phương thức. Tôi nhanh chóng phát hiện ra những khác biệt đáng kể. Thông thường, trường id bị thiếu trong phản hồi JSON. Ngoài ra, phản ứng có vẻ là một chuỗi, một vật thể, và có lẽ một số cấu trúc khác, tất cả cùng một lúc.Cấu trúc của phản ứng phương thức API PHP API là gì?
Đây là mã gỡ lỗi của tôi. Tôi đang sử dụng thư viện Stripe PHP mới nhất, phiên bản 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);
Dưới đây là nội dung của tệp gỡ lỗi cho thuộc tính invidual của đối tượng khách hàng được giải mã JSON. Khi được thực hiện, mã đã đăng thông báo.
Chú ý: tài sản không xác định: stdClass :: $ id trong sọc/subscription.php trên đường dây 51
Cũng lưu ý rằng tôi đã phải nhận xét ra dòng thêm 'đăng ký' vào chuỗi debug do gây tử vong lỗi liên quan đến 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
Đáng chú ý nhất là ID khách hàng. Nó không tồn tại trong phản hồi JSON. Tuy nhiên, như đã thấy trong một số chương trình ví dụ Stripe, nó có thể được truy cập bằng cách sử dụng $ customer-> id. Hơn nữa, đầu ra var_dump cho biết nhiều hơn các thuộc tính có mặt trong một cấu trúc mà tôi không thể hiểu được. Toàn bộ tệp gỡ lỗi là http://www.helioza.com/stripe/debug.txt. Tôi chỉ hiển thị phương thức tạo khách hàng, nhưng tôi đang gặp phải các vấn đề tương tự với hóa đơn và không thể tìm thấy id hóa đơn ở bất kỳ đâu trong các câu trả lời sắp tới của Stripe_Invoice :: all hoặc Stripe_Invoice ::.
Câu hỏi
1) Làm cách nào giá trị được trả về bởi Stripe_Customer :: tạo cả chuỗi và đối tượng cùng một lúc?
2) Tôi có thể tìm tài liệu mô tả các giá trị trả về của phương thức API, bao gồm cách truy cập từng thuộc tính?
Cảm ơn Evan. Điều đó giúp với một số câu đố của tôi. Tôi vẫn không hiểu tại sao tôi có thể lặp lại đối tượng và nhận được văn bản hợp lệ. Thông thường, PHP chỉ báo cáo 'đối tượng' và từ chối lặp lại bất cứ điều gì khác. Tôi vẫn đang đấu tranh để tìm ra cấu trúc của câu trả lời. Thử và sai mất một thời gian dài. Nó chắc chắn sẽ hữu ích nếu có một tài liệu của cấu trúc trả về cho mỗi phương thức. – Helioza
Tất cả các thuộc tính của đối tượng được bảo vệ đó là lý do tại sao bạn không nhìn thấy chúng. PHP SDK thực sự triển khai giao diện PHP của 'ArrayAccess' cho phép bạn truy cập dữ liệu cần thiết thông qua' $ response ['some_key'] ', trong đó các khóa là tất cả các tùy chọn được liệt kê tại https://stripe.com/docs/ api? lang = php # phí. Nó khá dễ dàng theo cách đó. –