是否保证在客户端智能支付按钮 .then() 之后会触发 webhook?



>我正在开发一个具有PayPal(结帐/REST API(集成的网站,该网站要求将表单中的数据保存到数据库表中。据我所知,不可能PayPal以表单形式收集的数据发送到 webhook 以将其保存到数据库。我通过首先使用 orderID 另存为待处理,然后在 webhook 中使用相同的 orderID 更新记录以使其不挂起来解决此问题。

但是,此方法依赖于以下事实:在将 webhook 保存到数据库后调用为挂起(通过 AJAX 在客户端调用(。情况似乎总是如此。我可以依靠被称为第二的 webhook 吗?

这是与我正在使用的等效的JavaScript代码:

paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name);
// Call your server to save the transaction
return fetch('/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
});
});
}
}).render('#paypal-button-container');
</script>

在调用 webhook 之前,AJAX 调用onApprove是否可靠地发生?

通常是的,但我不愿说"可靠",因为在某种程度上你依赖于客户端行为。

另一种解决方案是在付款设置期间传递"CUSTOM"参数,该参数将在批准后(在详细信息中(和作为通知 webhook 的一部分返回给您。

另一种替代解决方案是集成服务器端解决方案,例如此框架演示中的解决方案:https://developer.paypal.com/demo/checkout/#/pattern/server 。 使用此解决方案,在将 XHRfetch(到您的服务器之后,不会创建PayPal事务,然后服务器必须对PayPal进行直接 API 调用以捕获 v2/order ,并将立即收到成功/失败的 API 响应,然后可以在一个原子操作中将所有必要的数据存储在数据库中。此服务器端解决方案的一个好处是它不以任何方式依赖于异步 Webhook。这是最强大的解决方案。

相关内容

最新更新