如何在Stripe中管理多币种转账?关联GBP银行账户的平台多商户USD收款转账报错问题咨询
解决Stripe多币种转账的币种不匹配错误
首先,咱们先拆解你遇到的错误原因:
The currency of source_transaction's balance transaction (gbp) must be the same as the transfer currency (usd)
这是因为你的平台账户默认结算货币是GBP,当你收到USD付款后,Stripe会自动将USD兑换成GBP存入你的账户,导致对应的charge余额交易是GBP币种。而你尝试用这个GBP的源交易发起USD转账,自然会触发币种不匹配的报错。
下面是针对你的需求(买家付USD,平台收手续费到GBP账户,剩余USD分给商户)的两种可行解决方案:
方案一:开启多币种余额,保留USD资金用于转账
先在Stripe后台开启账户的多币种支持(路径:设置 > 付款设置 > 多币种),添加USD作为可用结算货币。这样收到的USD付款会以USD形式保留在账户余额中,不会自动兑换成GBP,就能直接用它发起USD转账了。
修改后的代码示例:
// 1. 创建USD付款意向并完成确认(需确保付款已成功) const paymentIntent = await stripe.paymentIntents.create({ amount: 10000, // 100 USD(单位:分) currency: 'usd', payment_method_types: ["card"], }); // 获取成功的Charge记录 const charges = await stripe.charges.list({ payment_intent: paymentIntent.id }); const charge = charges.data[0]; // 2. 将平台手续费(2000 USD)兑换成GBP转入你的账户 await stripe.transfers.create({ amount: 2000, // 20 USD手续费 currency: 'gbp', destination: '你的平台Stripe账户ID', source_transaction: charge.id, transfer_options: { currency_conversion: { source_currency: 'usd' } } }); // 3. 分别向两个商户发起USD转账 await stripe.transfers.create({ amount: 4000, currency: 'usd', destination: "example1", // 商户1的Connect账户ID source_transaction: charge.id, }); await stripe.transfers.create({ amount: 4000, currency: 'usd', destination: "example2", // 商户2的Connect账户ID source_transaction: charge.id, });
方案二:用Transfer Group关联付款与转账,自动处理货币转换
如果你不想开启多币种余额,可以通过transfer_group关联付款意向和后续转账,让Stripe自动处理货币转换逻辑,避免币种不匹配问题。
代码示例:
// 1. 创建带转账组的USD付款意向 const transferGroupId = `order_${Date.now()}`; const paymentIntent = await stripe.paymentIntents.create({ amount: 10000, currency: 'usd', payment_method_types: ["card"], transfer_group: transferGroupId, // 标记转账组 }); // 完成付款确认后,发起商户转账 await stripe.transfers.create({ amount: 4000, currency: 'usd', destination: "example1", transfer_group: transferGroupId, // 关联同一转账组 }); await stripe.transfers.create({ amount: 4000, currency: 'usd', destination: "example2", transfer_group: transferGroupId, }); // 剩余2000 USD会自动兑换成GBP存入你的平台账户,作为手续费
关键注意事项
- 确保你的商户Connect账户支持接收USD,否则转账会失败
- 货币转换会产生一定手续费,具体费率可查看Stripe后台的费率说明
- 方案一中,若关闭多币种支持,资金会自动转回默认结算货币GBP
内容的提问来源于stack exchange,提问作者jmecs
相关产品推荐
相关产品推荐

