当我们的服务器出现确认 API 错误时如何处理 PayPal Checkout 付款

How to handle a PayPal Checkout payment when there is a confirmation API error on our server

我们正在集成 PayPal 客户端结帐集成,以便在我们的网站上进行付款。可以在这里找到:

https://developer.paypal.com/docs/checkout/integrate/#6-verify-the-transaction

付款完成并获得 PayPal 批准后,我们​​需要调用我们的服务器来验证交易并将其存储在我们的数据库中。这段代码可以在下面找到,注意 "Call your server to save the transaction".

部分
<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 集成中,钱是 "approved" 在客户端,然后在我们的 API 中只有 confirmed/charged 到“/stripe-transaction-complete”。如有错误,我们实际不收钱。

在 PayPal 中,钱是在 API 调用之前收取的,因此我们向用户收费但他们没有收到数据库中的已付款订单的可能性很小。我们如何最好地处理这个问题?一种选择是调用 PayPal API 并将所有订单与付款匹配,然后自动退款或自动完成订单。但我不确定是否推荐这样做。

对于 PayPal 和 Stripe Checkout 的类似问题,可以使用 WebHooks 解决。

https://developer.paypal.com/docs/integration/direct/webhooks/rest-webhooks/#