条纹文档说,在使用具有自动确认功能的付款方式时,您应该使用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的工作方式。任何帮助表示赞赏。
答案 0 :(得分:1)
使用handleCardPayment
时,问题不仅仅在于付款可能失败,还在于成功,但是您的代码不知道 。
handleCardPayment
开始了几个异步步骤-向用户显示一个对话框,以向其银行验证付款,处理卡上的实际费用,然后关闭对话框。只有在所有步骤完成后,Promise才会解析,并且您接收到result
的函数会执行。
考虑以下情况:
客户点击“付款”
handleCardPayment
被称为
客户看到银行显示的对话框以验证 付款
他们这样做了,他们认为付款已经完成, 他们会立即关闭浏览器。
在这种情况下,您的代码将永远不会执行,但Stripe仍会处理费用。因此,您不知道付款已经发生,您无法履行订单。
这就是使用webhooks的重要原因,因此即使用户在handleCardPayment
之后关闭浏览器的过程中您的代码也永远没有运行的机会,即使付款关闭,您也会在异步完成时收到通知。或者,您可以使用manual confirmation flow,在该步骤中,步骤被拆分,并且直到服务器进行单独的API调用后,才处理实际费用。