如何在服务端集成测试中确认Stripe PaymentIntent?
解决Stripe测试模式下确认PaymentIntent并传递账单详情的问题
一、修复当前代码的Type缺失问题
你遇到的「支付方式数据缺少type」错误,是因为PaymentMethodData必须指定支付方式类型。Stripe Kotlin SDK的PaymentMethodData.Type枚举里有大写的CARD选项,补充后即可正常运行:
fun confirmPaymentIntent(pi: PaymentIntent): PaymentIntent { val params = PaymentIntentConfirmParams.builder() .addExpand("latest_charge") .setPaymentMethod("pm_card_visa") // 这是Stripe官方测试Visa卡的有效ID,无需修改 .setPaymentMethodData( PaymentIntentConfirmParams.PaymentMethodData.builder() .setType(PaymentIntentConfirmParams.PaymentMethodData.Type.CARD) // 补充卡类型 .setBillingDetails( BillingDetails.builder() .setAddress(BillingDetails.Address.builder().setCountry("US").build()) .setName("My Customer") .setEmail("customer@example.com") .build() ) .build() ) .setReturnUrl("https://example.com/return") .build() return pi.confirm(params) }
二、更优的测试实现方式
如果仅需验证Webhook能获取账单详情,无需构造复杂的PaymentMethodData,建议先创建带账单信息的测试PaymentMethod,再用它确认PaymentIntent:
- 创建带账单详情的测试PaymentMethod
val testPaymentMethod = PaymentMethod.create( PaymentMethodCreateParams.builder() .setType(PaymentMethod.Type.CARD) .setCard(PaymentMethodCreateParams.Card.builder().setNumber("4242424242424242").build()) // 测试卡卡号 .setBillingDetails( BillingDetails.builder() .setAddress(BillingDetails.Address.builder().setCountry("US").build()) .setName("My Customer") .setEmail("customer@example.com") .build() ) .build() )
- 用该PaymentMethod确认PaymentIntent
fun confirmPaymentIntent(pi: PaymentIntent): PaymentIntent { val params = PaymentIntentConfirmParams.builder() .addExpand("latest_charge") .setPaymentMethod(testPaymentMethod.id) .setReturnUrl("https://example.com/return") .build() return pi.confirm(params) }
补充说明
pm_card_visa是Stripe官方提供的有效测试支付方式ID,对应一张永远支付成功的测试Visa卡,你之前的使用是正确的。- 测试模式下所有操作不会产生真实交易,仅用于流程验证。
内容的提问来源于stack exchange,提问作者Rad
相关产品推荐
相关产品推荐

