Stripe API:如何指定多币种账户特定余额创建Charge
Stripe多币种账户指定对应币种余额创建Charge的配置方案
问题根因
创建USD Charge时自动兑换为JPY扣款,核心是两类配置/参数缺失:
- 账户未开启对应币种的余额留存开关,默认所有非默认结算币种(你的账户默认结算币种为JPY)的交易都会自动换汇为JPY结算
- API请求未显式指定结算币种,Stripe默认使用账户默认结算币种完成资金划转,触发自动换汇逻辑
前置账户配置(不完成则API参数不生效)
- 登录Stripe后台,进入「余额」-「多币种管理」页面,找到USD币种选项,将兑换规则从自动兑换为JPY修改为保留USD余额
- 确认USD币种的余额状态为「可持有可支付」,而非仅支持收款自动结汇状态
- 若你使用Stripe Connect关联了子账户,需要同步在对应子账户下开启USD余额留存开关
API参数配置
推荐方案:使用官方迭代的PaymentIntents API(已停止功能更新的老版Charges API不推荐继续使用)
创建PaymentIntent时,除了传入currency: 'usd'指定交易币种,还要显式声明结算币种为USD,禁止自动换汇,核心请求示例如下:
curl https://api.stripe.com/v1/payment_intents \ -u sk_你的API密钥: \ -d amount=1000 \ # 金额单位为对应币种最小分度值,此处1000对应10USD -d currency=usd \ -d payment_method_types[]=card \ # 核心参数:指定直接用USD余额结算,不触发自动换汇 -d payment_method_options[card][settlement_currency]=usd \ -d confirm=true
请求时需要将Stripe-Version请求头设置为2022-11-15及以上版本,低版本API不支持settlement_currency参数。
老版Charges API兼容配置
如果你仍在使用独立Charges API,需要做两个配置:
- 将
Stripe-Version请求头升级到2022-11-15及以上 - 创建Charge时传入
currency: 'usd',同时将exchange_rate参数显式设置为null——如果传入具体汇率值,Stripe会强制按指定汇率换汇为默认结算币种扣款
扣款前校验
发起扣款前可以调用余额查询接口确认USD可用余额充足,避免因余额不足触发自动换汇:
curl https://api.stripe.com/v1/balance \ -u sk_你的API密钥:
在返回结果的available数组中,找到currency: 'usd'的条目,确认其amount值大于等于你要扣款的金额即可。如果USD余额不足,Stripe会自动按优先级从其他币种余额换汇凑款,优先扣除默认结算币种JPY的余额。
内容的提问来源于stack exchange,提问作者O.Vykhor
相关产品推荐
相关产品推荐

