You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Stripe API接收ACH银行账户支付?参数错误与API选型咨询

Stripe ACH Debit 支付配置问题及API选型解答

一、解决PaymentIntent参数错误问题

你遇到的报错是因为银行账户信息不能直接放在payment_method_options字段下,Stripe的API规则要求先单独创建PaymentMethod对象存储银行账户信息,再将其关联到PaymentIntent中。

正确的实现流程分为两步:

  1. 创建US Bank Account类型的PaymentMethod
  2. 关联该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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:52:52