PayPal返回带有交易或付款ID的URL



我正在使用以下脚本在我的网站上显示一个PP按钮,它运行良好。你会看到我有一个返回URL,它也从我的页面中提取数据(例如订单ID(:

<script>
paypal.Buttons({
// Sets up the transaction when a payment button is clicked
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '2.00' // Can reference variables or functions. Example: `value: document.getElementById('...').value`
}
}]
});
},
// Finalize the transaction after payer approval
onApprove: function(data, actions) {
return actions.order.capture().then(function(orderData) {
// Successful capture! For dev/demo purposes:
console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
var transaction = orderData.purchase_units[0].payments.captures[0];
window.location.href = 'https://mywebsite.co.uk/signup-payment-confirmation.asp?fee=<%=fee%>&ct=<%=orderid%>';;
});
}
}).render('#paypal-button-container');
</script>

这很好,因为当进行事务时,用户只需重定向到返回URL,然后我将数据记录在数据库中。然而,我真正需要的是我的退货URL也显示PayPal交易的交易ID。然后,我可以将数据库中的记录与PayPal管理区域中的记录进行统计。

actions.order.create/.capture适用于简单的用例。如果您打算对数据库执行任何操作,请不要使用这些客户端功能。任何数量的问题都可能阻止您的系统在事后记录事务。

相反,使用实际的v2/checkout/orders API并在服务器上创建两个路由(url路径(,一个用于"创建订单",另一个用于"捕获订单"。您可以使用其中一个(最近不推荐使用(Checkout-*-SDK来调用路由对PayPal的API,或者使用您自己的HTTPS实现,即首先获取访问令牌,然后进行调用。这两个路由都应该只返回/输出JSON数据(没有HTML或文本(。在第二条路线中,当捕获API成功时,您应该验证金额是否正确,并将其结果付款详细信息存储在数据库中(特别是purchase_units[0].payments.captures[0].id,它是PayPal交易ID(,并在将返回JSON转发给前端呼叫者之前立即执行任何必要的业务逻辑(如预订产品或发送电子邮件(。在发生错误的情况下,也会转发它的JSON详细信息,因为前端必须处理这种情况。

将这两条路线与此前端审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server。(如果您需要将任何其他数据从客户端发送到服务器,例如项数组或所选选项,请在fetch中添加一个body参数,该参数的值为JSON字符串或对象(

最新更新