我们正在集成 PayPal 客户端 Checkout 集成,以便在我们的网站上进行付款。这可以在这里找到:
https://developer.paypal.com/docs/checkout/integrate/#6-verify-the-transaction
一旦支付完成并由 PayPal 批准,我们需要调用我们的服务器来验证交易并将其存储在我们的数据库中。此代码可以在下面找到,请注意“调用您的服务器以保存交易”部分。
<script>
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',
body: JSON.stringify({
orderID: data.orderID
})
});
});
}
}).render('#paypal-button-container');
</script>
现在,在上面的例子中,如果对“/paypal-transaction-complete”的调用失败会发生什么?会话超时或失去互联网连接?例如,在 Stripe 集成中,资金在客户端“批准”,然后仅在我们的 API 中确认/收费到“/stripe-transaction-complete”。如果有错误,我们实际上不会收取费用。
在 PayPal 中,费用在 API 调用之前收取,因此我们向用户收取费用但他们没有在数据库中收到已付款订单的可能性很小。我们将如何最好地处理这个问题?一种选择是调用 PayPal API 并将所有订单与付款匹配,然后自动退款或自动完成订单。但我不确定这是否被推荐。