我正在努力尝试在我的 PHP 网站上使用 PayPal 付款。我编写了以下方法来处理订单创建,但在尝试将 PayPal 响应解析为 JSON 时,我一直收到错误消息。
function createOrder($amount, $info) {
$pp_env = PAYPAL_ENVIRONMENT_MODE == 1 ? PAYPAL_SANDBOX_ENV : PAYPAL_LIVE_ENV ;
$accessToken = $this->generateAccessToken();
$url = $pp_env."/v2/checkout/orders";
$data = array(
'intent' => 'CAPTURE',
'purchase_units' => array(
array(
'amount' => array(
'currency_code' => CURRENCY_CODE,
'value' => $amount,
),
),
),
);
$headers = array(
"Content-type: application/json",
"Accept: application/json",
"Authorization: Bearer " . $accessToken,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
当我尝试使用此代码将 HTTP 响应转换为 JSON 时,我的错误是客户端:
createOrder() {
return fetch("<?=base_url("public/paypal_create")?>", {
method: "POST",
headers: {
"Content-Type": "application/json"
}
})
.then((response) => response.json())
.then((order) => order.id);
}
任何人都可以找出我做错了什么?
当您使用 CodeIgniter 时,您可能需要隐藏您的调试/开发人员信息。这似乎正在影响您的 JavaScript 期望的数据。
在呈现 JSON 的脚本中添加以下代码。
define('CI_DEBUG', 0);
https://codeigniter4.github.io/CodeIgniter4/testing/debugging.html#enabling-the-toolbar
使用“网络”选项卡查看单击按钮时服务器从其创建订单和捕获订单路由中做出的响应。响应必须只是前端按钮代码 JS 可以解析的有效 JSON 对象。
根据您问题中的错误信息,响应似乎包含其他 HTML 内容(不仅仅是 JSON),包括 debug_loader,这对于尝试将该响应解析为 JSON 的 fetch/XHR 无效。