【发布时间】:2021-01-28 00:07:36
【问题描述】:
我目前正在使用 PHP 框架 Codeigniter 4.0.4 并尝试添加带有智能支付按钮的 PayPal Checkout 集成。
我以 PayPal API 为例,但我在尝试创建订单时总是收到错误消息。 当我点击 PayPal 按钮进行支付时,窗口会打开 1-2 秒,然后立即关闭。
控制台错误:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
Error: Unexpected token < in JSON at position 0
at $t.error (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:59754)
at Object.<anonymous> (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:67521)
at JSON.parse (<anonymous>)
at o (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:67380)
at cr (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:67533)
at Cr.u.on (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:72204)
at Cr (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:72341)
at https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:78460
at Function.n.try (https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:14069)
at https://www.paypal.com/sdk/js?client-id=Af6lu4xavdi1_e_hEFLWQxUj48hq0bndx7o3RGgwNWuChHmenioXFLMnTOKt912F6zmftF1Siv9WsfCp&disable-funding=credit,card:2:78257
服务器端:
$clientId = getenv('paypal.CLIENT_ID');
$clientSecret = getenv('paypal.CLIENT_SECRET');
$environment = new SandboxEnvironment($clientId, $clientSecret);
$client = new PayPalHttpClient($environment);
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = [
"intent" => "CAPTURE",
"purchase_units" => [[
'reference_id' => '123',
"amount" => [
"value" => 10,
"currency_code" => "USD"
]
]],
"application_context" => [
"cancel_url" => base_url() . "/checkout",
"return_url" => base_url() . "/checkout"
]
];
try {
$response = $client->execute($request);
return json_encode($response);
} catch (HttpException $ex) {
echo $ex->statusCode;
print_r($ex->getMessage());
}
客户端:
<script type="text/javascript">
paypal.Buttons({
env: 'sandbox',
style: {
layout: 'vertical',
size: 'responsive',
shape: 'pill',
color: 'blue',
label: 'pay'
},
createOrder: function() {
return fetch('/checkout/paypal', {
method: 'post',
headers: {
'content-type': 'application/json'
}
}).then(function(response) {
return response.json();
}).then(function(resJson) {
return resJson.result.id;
});
}
}).render('#paypal-button-container');
</script>
【问题讨论】:
-
它没有返回 json。 JSON 中位置 0 的意外标记
-
但是为什么呢? /checkout/paypal 正在返回一个 json
-
你确定它的post请求没有得到吗?检查路线
-
获取完成加载:POST "localhost:8080/checkout/paypal".
-
console.log(response.json());和 resJson 以确保它返回
标签: php paypal-sandbox paypal-rest-sdk codeigniter-4