php - 如何使用 PHP 捕获从 PayPal 智能按钮支付产生的交易数据
问题描述
我正在尝试使用带有 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 文件?
解决方案
您的示例将客户端actions.order.create()
与 fetch 混合以进行服务器端捕获。不应进行这种混合。从服务器执行这两个步骤(如果不使用像 PHP 这样的服务器端语言,则不执行)
因此,在您的服务器上创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,记录在此处。这些路由应该只返回 JSON 数据(没有 HTML 或文本)。后者应该(成功时)在返回之前将付款详细信息存储在您的数据库中(特别purchase_units[0].payments.captures[0].id
是 PayPal 交易 ID)
将这两条路线与以下批准流程配对:https ://developer.paypal.com/demo/checkout/#/pattern/server
推荐阅读
- python - 是否可以创建同一个 CNN 的多个实例,这些实例接收多个图像并连接成一个密集层?(喀拉拉邦)
- c++ - 错误:C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
- openlayers - OpenLayers 6:示例框选择错误
- javascript - 机器人没有创建频道 - Discord.js
- redis - Redis 集群节点显示在慢日志中
- sql - 运行总计添加到下一个分区
- python-3.x - urllib.error.HTTPError:HTTP 错误 400:Python3 Slack 挂钩的错误请求
- electron - 如何在主/渲染器进程之间共享数据
- wpf - 调整窗口大小时将 TextBlocks 定位在缩放的线端点
- c++ - 如何将文件逐行读入向量然后打印向量