据下的高级服务器集成了documentation on PayPal's Developer site,重定向URL必须在支付电话提供,但:RedirectUrls被称为,onAuthorize函数会忽略
(...)的PayPal不会自动调用这些URL。当买方授权付款时,PayPal调用您的onAuthorize函数。提供的 将不会被使用。
因此,我开发了我的代码假设这是真实的,并在我的本地设置这工作正常。但是当我将它推送到我的登台服务器时,正在调用在SDK中传递的重定向URL,并忽略了我的onAuthorize
函数。它甚至打开一个新的弹出窗口,然后在那里打开我的payment-execute.php
脚本,附加GET
查询,忽略我的POST
ed值。
下面是我使用的JS的样本:
paypal.Button.render({
env: 'sandbox',
payment: function(resolve, reject) {
paypal.request.post(
'/path-to-inc/payment.php',
{
action: 'create_paypal_payment',
orderId: order_id,
postId: post_id,
}
)
.then(function(data) {
resolve(data.paymentID);
})
.catch(function(err) {
reject(err);
});
},
onAuthorize: function(data) {
paypal.request.post('/path-to-inc/payment-execute.php',
{
paymentID: data.paymentID,
payerID: data.payerID,
postId: post_id
})
.then(function(data) {
window.location.reload();
})
.catch(function(err) {
console.log('Error');
});
}
}, '#paypal-button');
而且从PHP文件中的一个片段:
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl('http://website.com/payment-execute.php')
->setCancelUrl('http://website.com/checkout');
$payment = new Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions(array($transaction));
try {
$payment->create($apiContext);
echo json_encode(['paymentID' => $payment->id]);
} catch (Exception $e) {
error_log('Payment error: ' . $e->getMessage());
}
不确定它是否相关,但仅在暂存服务器上显示* 404 *错误,该错误服务器显示以下内容:'https:// www.paypalobjects.com/api/checkout.4.0.40.js',尽管我可以请参阅'/ checkout.4.0.39.js'已成功加载到开发工具的网络面板中。 – Benji
您正在使用哪种浏览器?你有一个演示页面,我可以尝试哪些显示版本错误? – bluepnume
这是在Chrome 55,Safari 10和Firefox 49中,所有相同的问题。我会看看我是否可以很快设置演示。 – Benji