Ruby on Rails中Stripe ACH支付PaymentIntent状态为requires_source_action问题
解决Stripe ACH测试PaymentIntent卡在
requires_source_action的问题 问题描述
创建了测试用的ACH PaymentIntent,代码如下:
Stripe::PaymentIntent.create( { amount: 1099, currency: 'usd', setup_future_usage: 'off_session', confirm: true, payment_method_types: ['us_bank_account'], on_behalf_of: 'acct_XXXXXXXXXXXX', mandate_data: { customer_acceptance: { type: 'offline' }, }, payment_method_data: { type: 'us_bank_account', billing_details: { name: 'Test Name' }, us_bank_account: { routing_number: '110000000', account_number: '000123456789', account_holder_type: 'individual' } } } )
随后调用确认接口:
Stripe::PaymentIntent.confirm( 'pi_3MosEfLYIdOgExxxxxxxxxx', {payment_method: 'pm_1MosEfLYIdOgE1Qxxxxxx'}, )
沙箱面板显示已确认,但PaymentIntent状态仍为requires_source_action。

解决方案
- 处理
source_action验证要求:状态为requires_source_action意味着需要完成额外验证步骤,测试环境下针对该测试账户会触发微存款验证流程。需从PaymentIntent对象的next_action字段获取验证相关信息。 - 模拟微存款验证:针对测试用的US银行账户(路由号
110000000、账号000123456789),调用PaymentIntent.verify_microdeposits接口,传入测试用的微存款金额完成验证:
Stripe::PaymentIntent.verify_microdeposits( 'pi_3MosEfLYIdOgExxxxxxxxxx', { amounts: [1, 2], payment_method: 'pm_1MosEfLYIdOgE1Qxxxxxx' } )
- 避免重复确认操作:创建PaymentIntent时已设置
confirm: true,无需再单独调用confirm接口,重复操作可能导致状态异常。 - 检查关联账户权限:确认
on_behalf_of指定的关联账户(acct_XXXXXXXXXXXX)已正确配置ACH支付权限,且测试环境下状态正常。
完成上述操作后,PaymentIntent状态会更新为succeeded,支付流程即可完成。
内容的提问来源于stack exchange,提问作者shashank barman
相关产品推荐
相关产品推荐

