早晨
嘗試使用 PHP 和 PayPal API 向我的網站添加自定義 PayPal 訂閱。我之前沒有真正使用過 PHP 或 Curl,所以它需要一段時間,但我設法撰寫了一個腳本來從沙箱中獲取訪問令牌并鏈接到您可以訂閱的現有訂閱計劃。下面的代碼有效...
curl_setopt($ch, CURLOPT_POSTFIELDS, "\n {\n \"plan_id\":$planID,\n \"start_time\":$startTime,\n \"application_context\": {\n \"brand_name\": \"Sleep Happy Mattress\",\n \"locale\": \"en-US\",\n \"shipping_preference\": \"SET_PROVIDED_ADDRESS\",\n \"user_action\": \"SUBSCRIBE_NOW\",\n \"payment_method\": {\n \"payer_selected\": \"PAYPAL\",\n \"payee_preferred\": \"IMMEDIATE_PAYMENT_REQUIRED\"\n },\n \"return_url\": \"https://example.com/returnUrl\",\n \"cancel_url\": \"https://example.com/cancelUrl\"\n }\n }");
但是,每當我嘗試將 planID 和 start_time 作為 php 變數包含在 curl_setopt($ch, CURLOPT_POSTFIELDS 中時,我都會收到“請求格式不正確、語法不正確或違反架構。”錯誤。
$planID = 'P-25Y56437062492726MFWZ4GI';
$startTime = '2021-10-22T00:00:00Z';
// 由 curl-to-PHP 生成:http : //incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api-m.sandbox.paypal.com/v1/billing/subscriptions');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, "\n {\n \"plan_id\": \"P-25Y56437062492726MFWZ4GI\",\n \"start_time\": \"2021-10-22T00:00:00Z\",\n \"application_context\": {\n \"brand_name\": \"Sleep Happy Mattress\",\n \"locale\": \"en-UK\",\n \"shipping_preference\": \"SET_PROVIDED_ADDRESS\",\n \"user_action\": \"SUBSCRIBE_NOW\",\n \"payment_method\": {\n \"payer_selected\": \"PAYPAL\",\n \"payee_preferred\": \"IMMEDIATE_PAYMENT_REQUIRED\"\n },\n \"return_url\": \"https://example.com/returnUrl\",\n \"cancel_url\": \"https://example.com/cancelUrl\"\n }\n }");
curl_setopt($ch, CURLOPT_POSTFIELDS, "\n {\n \"plan_id\":$planID,\n \"start_time\":$startTime,\n \"application_context\": {\n \"brand_name\": \"Sleep Happy Mattress\",\n \"locale\": \"en-US\",\n \"shipping_preference\": \"SET_PROVIDED_ADDRESS\",\n \"user_action\": \"SUBSCRIBE_NOW\",\n \"payment_method\": {\n \"payer_selected\": \"PAYPAL\",\n \"payee_preferred\": \"IMMEDIATE_PAYMENT_REQUIRED\"\n },\n \"return_url\": \"https://example.com/returnUrl\",\n \"cancel_url\": \"https://example.com/cancelUrl\"\n }\n }");
我的連接是錯誤的還是變數需要先以某種方式進行操作,還是兩者兼而有之?
非常感謝您的幫助
克里斯
uj5u.com熱心網友回復:
像這樣創建你的 JSON 字串:
$data = [
'plan_id' => $planID,
'start_time' => $startTime,
'application_context' => [
'brand_name' => 'Sleep Happy Mattress',
'locale' => 'en-US',
'shipping_preference' => 'SET_PROVIDED_ADDRESS',
'user_action' => 'SUBSCRIBE_NOW',
'payment_method' => [
'payer_selected' => 'PAYPAL',
'payee_preferred' => 'IMMEDIATE_PAYMENT_REQUIRED'
],
'return_url' => 'https://example.com/returnUrl',
'cancel_url' => 'https://example.com/cancelUrl'
],
];
然后您可以檢查嵌套等是否正確(請注意,我不知道以上是否正確,我只是從您的問題中復制了它),如果您 json_encode這樣做,您將創建格式良好的 JSON。
$jsonEncoded = json_encode($data);
uj5u.com熱心網友回復:
不要指定或包含start_time,除非您希望結帳時出現金額未顯示的問題。
您的問題是您沒有在變數值周圍保留引號,這對于 JSON 字串語法是必需的。觀察:
\"plan_id\": \"$planID\",
使用 json_encode() 從陣列物件構造字串會更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329488.html
