在PayPal中完成购买后发送数据(onApprove)

  • 本文关键字:数据 onApprove PayPal php paypal
  • 更新时间 :
  • 英文 :


我正试图将数据发送到另一个php文件,当onApprove完成时,我可以在其中检查数据并将其保存到我的数据库中:

<script>
// Render the PayPal button into #paypal-button-container
function loadAsync(url, callback) {
var s = document.createElement('script');
s.setAttribute('src', url); s.onload = callback;
document.head.insertBefore(s, document.head.firstElementChild);
}

// Usage -- callback is inlined here, but could be a named function
loadAsync('https://www.paypal.com/sdk/js?client-id=test&currency=USD&disable-funding=card', function() {
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: <?echo $cart->getCartTotal(true)?>

}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
// show loader on screen whilst wating to redirect
$('.checkout-loader').addClass('active');

// excute php script
var EXECUTE_URL = 'https://example.com/TESTS.php?success='+success;
// Authorize the transaction
actions.order.capture().then(function(details) {
// Call your server to validate and capture the transaction
return fetch(EXECUTE_URL, {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID     : data.orderID,
success : "okaysuc"
})
}).then(function(response){
// redirect to the completed page if paid
window.location.href = '/success/' + data.orderID;
});
});
}
}).render('#paypal-button-container');
});
</script>

我的TESTS.php:

<?php  
$retour = $_POST['success']; //I have tried json_decode() also, didnt work....
$db->query("INSERT INTO mydbname(order_id) VALUES ('$retour')");   //empty data is added to databse  
$cart = new Cart();
if($retour == 'okaysuc'){
//my code goes here.. But not works because data is empty. it is not sent. 
}
?>

除了POSTed变量外,其他所有变量都可以工作。我不知道如何将数据发送到另一个php文件。有人知道哪里出了错吗?我几乎都试过了,但没有成功。谢谢

不要使用actions.order.create((/actions.order.capture((在客户端创建/捕获订单,并且只有在客户端事件完成后才将数据发送到服务器

相反,切换到适当的客户端-服务器集成。按照PayPal Checkout集成指南,在您的服务器上创建两条路线,一条用于"创建订单",另一个用于"捕获订单"(请参阅"添加和修改代码"中的可选步骤5(。这两个路由都应该只返回JSON数据(不返回HTML或文本(。在第二条路线中,当捕获API成功时,您应将其结果支付详细信息存储在数据库中(特别是purchase_units[0].payments.captures[0].id,即PayPal交易ID(,并在将返回的JSON转发给前端呼叫者之前立即执行任何必要的业务逻辑(如发送确认电子邮件或预订产品(。

将这2条路线与前端审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server

您对创建或捕获端点的获取应该扩展为包括body参数和您希望发送的任何其他数据,在服务器上执行该操作之前,可以验证这些数据的正确性,并且仅在成功捕获响应的情况下存储。

最新更新