【发布时间】:2021-12-08 01:51:01
【问题描述】:
早上
尝试使用 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 }");
我的连接是错误的还是变量需要先以某种方式进行操作,还是两者都需要??
非常感谢您的帮助
克里斯
【问题讨论】:
-
你不能只使用
json_encode()而不是使用纯文本 JSON 吗? -
并存储在变量中然后使用 ...(CURL_POSTFIELDS, $datas)
标签: php curl paypal-sandbox paypal-subscriptions