没有 Webhooks 的 Stripe 自动确认和订单履行?

ada*_*m78 1 webhooks stripe-payments

条带文档说,当使用自动确认的付款意图时,您应该使用 webhook 异步完成客户的订单。

如果我提供一项服务,例如购买后下载文件的能力,那么为什么我需要监控网络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.
   }
 });
});
Run Code Online (Sandbox Code Playgroud)

也许我还没有理解 handleCardPayment 是如何工作的。任何帮助表示赞赏。

kar*_*kko 5

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

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

考虑以下情况:

  • 客户点击支付

  • handleCardPayment 叫做

  • 客户会看到来自银行的对话以验证付款

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

在这种情况下,您的代码将永远不会执行,但 Stripe 仍会处理费用。所以你不知道付款发生了,你无法完成订单。

这就是为什么使用 webhooks 很重要的原因,因此您会在付款完成时收到异步通知,即使用户在中途关闭了浏览器并且您的代码handleCardPayment从未有机会运行。或者,您可以使用手动确认流程,其中步骤被拆分并且在您的服务器进行单独的 API 调用之前不会处理实际费用。