是否保证 webhook *在*客户端智能支付按钮 .then() 之后被触发?
Is it guarranteed that a webhook will be triggered *after* client-side Smart Payment Buttons .then()?
我正在使用 PayPal (checkout/REST API) 集成的网站工作,该网站需要将表单中的数据保存到数据库 table。据我所知,不可能让 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>
onApprove
中的 AJAX 调用是否会在调用 webhook 之前可靠地发生?
通常是的,但我会犹豫说 "reliably",因为在某种程度上你依赖于客户端行为。
另一种解决方案是在付款设置期间传递 "CUSTOM" 参数,该参数将在批准后(在详细信息中)返回给您,并作为通知 webhook 的一部分返回给您。
另一种替代解决方案是集成服务器端解决方案,例如此骨架演示中的一个:https://developer.paypal.com/demo/checkout/#/pattern/server。使用此解决方案,直到 fetch(
XHR 到您的服务器之后才会创建 PayPal 交易,然后必须直接 API 调用 paypal 以捕获 v2/order ,并将立即收到API 对 success/failure 的响应,然后可以在一个原子操作中将所有必要的数据存储在数据库中。此服务器端解决方案的一个好处是它不以任何方式依赖于异步 webhook。这是最稳健的解决方案。
我正在使用 PayPal (checkout/REST API) 集成的网站工作,该网站需要将表单中的数据保存到数据库 table。据我所知,不可能让 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>
onApprove
中的 AJAX 调用是否会在调用 webhook 之前可靠地发生?
通常是的,但我会犹豫说 "reliably",因为在某种程度上你依赖于客户端行为。
另一种解决方案是在付款设置期间传递 "CUSTOM" 参数,该参数将在批准后(在详细信息中)返回给您,并作为通知 webhook 的一部分返回给您。
另一种替代解决方案是集成服务器端解决方案,例如此骨架演示中的一个:https://developer.paypal.com/demo/checkout/#/pattern/server。使用此解决方案,直到 fetch(
XHR 到您的服务器之后才会创建 PayPal 交易,然后必须直接 API 调用 paypal 以捕获 v2/order ,并将立即收到API 对 success/failure 的响应,然后可以在一个原子操作中将所有必要的数据存储在数据库中。此服务器端解决方案的一个好处是它不以任何方式依赖于异步 webhook。这是最稳健的解决方案。