php - PayPal Checkout 与智能支付按钮的集成
问题描述
我目前正在使用 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>
解决方案
尝试
<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) {
console.log(response);
});
}
}).render('#paypal-button-container');
</script>
控制台会返回什么
推荐阅读
- cloud - RHV 和 OpenStack 有什么区别
- shell - Testing the Success of a Command Involving Pipes
- logstash - 在生产环境中部署 Logstash
- jenkins - 配置更改后对 In progress Build 的影响
- python - 将 float64 转换为 int(excel 到 pandas)
- sprite - 如何让一个精灵跟随 Java 中的另一个精灵?
- android - 如何在 Firestore 中为 Android 创建本地化数据方案(按语言)?
- mysql - 未找到 XAMPP MYSQL
- python - 为什么 django rest api root 没有列出经典端点
- django - 如何按 Django 中的 ManyToMany 对象的属性进行排序?