如何通过Stripe API接收ACH银行账户支付?参数错误与API选型咨询
Stripe ACH Debit 支付配置问题及API选型解答
一、解决PaymentIntent参数错误问题
你遇到的报错是因为银行账户信息不能直接放在payment_method_options字段下,Stripe的API规则要求先单独创建PaymentMethod对象存储银行账户信息,再将其关联到PaymentIntent中。
正确的实现流程分为两步:
- 创建US Bank Account类型的PaymentMethod
- 关联该PaymentMethod创建并确认PaymentIntent
示例Ruby代码
第一步:创建PaymentMethod
payment_method = Stripe::PaymentMethod.create({ type: 'us_bank_account', us_bank_account: { routing_number: '110000000', # 测试路由号需传字符串格式 account_number: '123456789', # 测试账户号需传字符串格式 account_holder_type: 'individual', }, })
第二步:创建并确认PaymentIntent
payment_intent = Stripe::PaymentIntent.create({ amount: 1099, currency: 'usd', setup_future_usage: 'off_session', payment_method_types: ['us_bank_account'], payment_method: payment_method.id, # 关联刚创建的PaymentMethod confirm: true, # 测试环境可直接自动确认,生产环境需处理身份验证流程 confirmation_method: 'automatic', })
注意:测试环境中ACH支付会直接标记为succeeded;生产环境则需要完成微存款验证等流程,若设置了setup_future_usage,后续的off-session扣款必须在支付方式验证完成后才能执行。
二、Transfer API无法替代PaymentIntent
Transfer API的核心用途是将资金从你的Stripe账户转出到第三方账户(比如供应商分账、商家提款),而你的需求是向客户收取ACH支付款项,二者场景完全不同。收取客户资金必须使用PaymentIntent(单次支付)或SetupIntent(先保存支付方式用于后续扣款),不能用Transfer API替代。
三、沙箱测试要点
使用你的测试账户(acct_testXXXXXXXXXX)测试时,直接使用Stripe官方提供的测试路由号和账户号即可:
- 测试路由号:
110000000(Fedwire官方测试路由) - 测试账户号:任意9位数字(如
123456789),也可使用特定测试账户号模拟不同场景(比如验证失败、扣款拒绝等)
内容的提问来源于stack exchange,提问作者shashank barman
相关产品推荐
相关产品推荐

