测试环境下Stripe测试令牌无法使用问题排查
问题分析与解决方案
你遇到的核心问题是错误使用了ConfirmationToken参数——这个参数并非用来传递支付令牌(如tok_visa),而是用于后续确认已创建的PaymentIntent时的临时令牌。
正确实现方式
当你通过CreateAsync并设置Confirm = true来立即确认PaymentIntent时,应该使用PaymentMethod参数指定测试支付令牌,而非ConfirmationToken。修改后的代码如下:
StripeConfiguration.ApiKey = apiKey; var paymentIntentService = new PaymentIntentService(); paymentIntent = await paymentIntentService.CreateAsync(new PaymentIntentCreateOptions { Confirm = true, PaymentMethod = "tok_visa", // 替换为PaymentMethod参数 Amount = 1200, Currency = "usd", AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions { Enabled = true, AllowRedirects = "never" }, });
报错原因说明
ConfirmationToken的作用是:当你先创建未确认的PaymentIntent(不设置Confirm = true),前端通过Stripe.js的confirmPayment等方法获取确认令牌后,后端调用ConfirmAsync时传入该令牌完成确认。它和支付令牌(tok_xxx)是完全不同的概念,因此传入tok_visa会触发“找不到该确认令牌”的错误。
额外注意事项
- 若启用了
AutomaticPaymentMethods,也可以不手动指定PaymentMethod,Stripe会自动处理测试环境的支付流程;但如果需要明确指定测试支付方式,仍需将对应tok_xxx令牌传入PaymentMethod参数。 - 你的测试密钥和测试模式配置已验证无误,无需调整这部分内容。
内容的提问来源于stack exchange,提问作者Steven Garcia
相关产品推荐
相关产品推荐

