在迁移到 Payment Intents API 之前,用户的信用卡付款已在购买完成后使用令牌(从 stripe.createToken 接收)在服务器端进行确认和收费。这使我们可以在发生任何错误时不确认付款。
现在,使用 Payment Intents API,付款确认已经在客户端进行(stripe.confirmCardPayment),如果在完成购买时服务器端发生错误(因为信用卡已被扣款),这将是一个问题。退款无效,您的 Stripe 费用不会退还。
我们如何使用 Payment Intents API 实现卡支付,但在购买的最终结束时确认付款(如旧工作流程中那样)?或者,如果结账流程中出现错误,我们如何防止信用卡被扣费? 不幸的是,我们在文档中找不到这个问题的解决方案。
帮助表示赞赏!
以下是文档:https://stripe.com/docs/ payments/ payment-intents/migration
您正在寻找的是通过 PaymentIntent 的“手动确认”进行建模的:https://stripe.com/docs/ payments/accept-a- payment-synchronously。
这不是 Stripe 推荐的集成。推荐的方法是客户端确认并监听 webhooks 进行付款确认。
这是因为通过手动确认,客户“放弃”的可能性更高,他们在您的网页上验证您的 PaymentIntent,但将其关闭,这意味着您失去了客户端 -> 服务器往返行程,使您的付款未得到确认(即使客户认为他们已通过身份验证,因此付款)。
此外,手动确认仅适用于卡类型付款,不支持其他地区的其他付款方式,例如 iDEAL 或 SEPA 借记卡等。
在我们的例子中,我们希望在收费后直接对卡付款进行身份验证。 Stripe 支持人员能够帮助我们找到以下答案:
据我了解,您希望在收费后直接在最后验证付款。有一个解决方案,将 capture_method 设置为手动 - https://stripe.com/docs/api/ payment_intents/create#create_ payment_intent-capture_method。这意味着,将进行收费,然后用户/客户将能够直接在仪表板中确认付款。
此方法称为Auth 和Capture。现在就保留卡以保留资金,但只有在您的企业完成服务后才能获取资金。付款获得授权后,银行会对该金额进行担保,并将其在客户的卡上保留最多 7 天,如果使用终端进行亲自付款,则保留两天。您可以在此链接下找到更多信息以及 API:https://stripe.com/docs/ payments/capture-later#authorize-only
这很简单:
使用付款方式 ID 创建意图后,如下所示:
const paymentIntent = 等待 stripe. paymentIntents.create({ 金额:Math.round(金额 * 100), 货币:美元”, 付款方式:id, });
执行此操作以确认:
让intent =等待stripe. paymentIntents.confirm( paymentIntent.id, { 付款方式:id, return_url: "https://localhost:3000", });
查看此频道了解详情频道在此