条带自动确认和订单履行,无需Webhooks?

时间:2019-07-09 11:18:55

标签: stripe-payments webhooks

条纹文档说,在使用具有自动确认功能的付款方式时,您应该使用Webhooks异步履行客户的订单。

如果我提供服务,例如能够在购买后下载文件,那么为什么我需要监视payment_intent.succeeded网络挂钩?

如果通过以下handleCardPayment功能成功付款,那么收费是否仍然有可能失败?如果付款成功,为什么我不能允许用户立即下载文件?

var cardholderName = document.getElementById('cardholder-name');
var cardButton = document.getElementById('card-button');
var clientSecret = cardButton.dataset.secret;

cardButton.addEventListener('click', function(ev) {
  stripe.handleCardPayment(
    clientSecret, cardElement, {
      payment_method_data: {
         billing_details: {name: cardholderName.value}
      }
    }
  ).then(function(result) {
     if (result.error) {
       // Display error.message in your UI.
       } else {
       // The payment has succeeded. Display a success message.
   }
 });
});

也许我不了解handleCardPayment的工作方式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

使用handleCardPayment时,问题不仅仅在于付款可能失败,还在于成功,但是您的代码不知道

handleCardPayment开始了几个异步步骤-向用户显示一个对话框,以向其银行验证付款,处理卡上的实际费用,然后关闭对话框。只有在所有步骤完成后,Promise才会解析,并且您接收到result的函数会执行。

考虑以下情况:

  • 客户点击“付款”

  • handleCardPayment被称为

  • 客户看到银行显示的对话框以验证 付款

  • 他们这样做了,他们认为付款已经完成, 他们会立即关闭浏览器。

在这种情况下,您的代码将永远不会执行,但Stripe仍会处理费用。因此,您不知道付款已经发生,您无法履行订单。

这就是使用webhooks的重要原因,因此即使用户在handleCardPayment之后关闭浏览器的过程中您的代码也永远没有运行的机会,即使付款关闭,您也会在异步完成时收到通知。或者,您可以使用manual confirmation flow,在该步骤中,步骤被拆分,并且直到服务器进行单独的API调用后,才处理实际费用。