我正在尝试使用PayPal提供的脚本使用智能按钮来实现PayPal支付:
<div id="smart-button-container">
<div style="text-align: center;">
<div id="paypal-button-container"></div>
</div>
</div>
<script src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID¤cy=CAD" data-sdk-integration-source="button-factory"></script>
<script>
function initPayPalButton() {
paypal.Buttons({
style: {
shape: 'rect',
color: 'gold',
layout: 'horizontal',
label: 'pay',
},
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{"description":"Package delivery","amount":{"currency_code":"CAD","value":1}}]
});
},
/* onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
}, */
onApprove: function(data) {
return fetch('/my-server/capture-paypal-transaction.php', {
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
}).then(function(res) {
return res.json();
}).then(function(details) {
alert('Transaction funds captured from ' + details.payer_given_name);
})
},
onError: function(err) {
console.log(err);
}
}).render('#paypal-button-container');
}
initPayPalButton();
</script>我用下面的函数替换了注释代码,该函数建议用户可以链接到服务器上的文件来处理返回的数据。
我找不到关于如何使用这个由PayPal生成的按钮的明确说明,所有与IPN相关的git示例要么是过时的,要么是已经弃用的PHP代码,例如引用了魔术引号。
有没有一个从智能按钮捕获交易数据的示例PHP文件?
发布于 2021-06-24 03:28:38
您的示例将客户端actions.order.create()与fetch混合在一起进行服务器端捕获。这种混合不应该这样做。从服务器执行这两个步骤(如果不使用PHP等服务器端语言,则两者都不执行)
因此,在您的服务器上创建两个路由,一个用于“创建订单”,另一个用于“捕获订单”,即documented here。这些路由应该只返回JSON数据(不返回HTML或文本)。后者应该(在成功时)在返回之前将付款详细信息存储在数据库中(特别是purchase_units[0].payments.captures[0].id,PayPal事务ID)。
将这两条路由与以下审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server
https://stackoverflow.com/questions/68105893
复制相似问题