测试模式下Stripe账户间转账提示无此目标账户问题求助
问题原因
- 核心错误是
stripe.transfers.create接口的destination参数仅支持接收当前平台账户下关联的Connect账户ID,你填入的是完全独立的另一个Stripe账户的ID,Stripe不支持两个无关联的普通Stripe账户通过该接口直接转账,所以会报目标账户不存在的错误。 - 额外逻辑问题:你当前的代码在PaymentIntent仅创建未完成支付的情况下就发起转账,此时平台账户还未收到对应资金,即使账户ID正确也会触发余额不足的报错。
- 测试模式完全支持该转账操作,不存在功能限制。
解决步骤
创建关联的测试Connect账户
登录你代码中STRIPE_SECRET_KEY对应的Stripe账户后台,进入Connect模块,创建测试状态的自定义/标准关联账户,创建完成后你会拿到acct_xxxx格式的账户ID,这个才是需要填入destination字段的有效值。不要用独立Stripe账户自行调用/v1/account接口返回的ID。调整转账逻辑
Stripe支持两种方式避免余额不足问题:
- 方式一:先完成PaymentIntent的支付流程,测试模式下可用测试卡
4242 4242 4242 4242、任意未来过期日期、任意3位CVC完成支付确认,待资金进入平台可用余额后再发起转账。 - 方式二:在转账参数中新增
source_transaction字段,直接关联支付完成后的Charge ID,无需等待资金到账即可发起转账,示例代码调整如下:
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY, { apiVersion: '2020-03-02', maxNetworkRetries: 2, }); exports.handler = async (event) => { try { // 1. 创建PaymentIntent const paymentIntent = await stripe.paymentIntents.create({ amount: 100, currency: 'eur', payment_method_types: ['card'], transfer_group: '{ORDER10}', }); // 2. 此处补充PaymentIntent确认逻辑,测试模式下可直接用预制的测试支付方法 const confirmedIntent = await stripe.paymentIntents.confirm( paymentIntent.id, { payment_method: 'pm_card_visa' } ); // 3. 创建转账,关联对应Charge ID await stripe.transfers.create({ amount: 70, currency: 'eur', destination: '你的测试Connect账户ID(acct_开头)', transfer_group: '{ORDER10}', source_transaction: confirmedIntent.latest_charge, }); return { statusCode: 200, body: JSON.stringify(confirmedIntent), }; } catch (error) { console.log({ error }); return { statusCode: 400, body: JSON.stringify(error), }; } };
内容的提问来源于stack exchange,提问作者My name is jeff
相关产品推荐
相关产品推荐

