Согласно documentation on PayPal's Developer site под Advanced интеграции серверов, перенаправление URL-адрес должен быть предоставлен в вызове платежа, но:RedirectUrls Будучи Вызываются, onAuthorize Функция Игнорируется
(...) PayPal автоматически не называть эти URL-адреса. PayPal вызывает функцию onAuthorize, когда покупатель разрешает платеж. , которые предоставлены, не будут использоваться.
Итак, я разработал свой код, полагая, что это правда, и на моей локальной установке это работает нормально. Но когда я нажимаю его на мой промежуточный сервер, вызываются URL-адреса переадресации в SDK, а моя функция onAuthorize
игнорируется. Это даже открытие нового всплывающего окна, а затем открытие моего сценария payment-execute.php
там, с прилагаемыми GET
запросами, игнорируя мои значения POST
.
Вот пример из 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' успешно загружается в сетевую панель инструментов dev. – Benji
Какой браузер вы используете? У вас есть демо-страница, которую я могу попробовать, которая показывает ошибку версии? – bluepnume
Это было в Chrome 55, Safari 10 и Firefox 49, все та же проблема. Я посмотрю, смогу ли я установить демо в ближайшее время. – Benji