React Native中Stripe留存用户卡片后发起卖家Payout失败求助
Stripe Payout 失败问题解决
核心问题:你当前用买家的付款信用卡作为Payout的destination是错误的。Stripe的Payout(给卖家打款)需要目标是收款账户(银行账户、借记卡或Stripe Connect账户),而非用于支付的信用卡——信用卡仅支持退款到原卡场景,不能作为收款账户接收Payout。
错误提示“The customer has not entered their payment method.”实际指卖家未设置收款用的支付方式,而非付款用的信用卡。
正确解决方案分两种场景:
场景1:使用Stripe Connect(平台模式推荐方案)
这是Stripe专为平台型业务(多卖家)设计的方案,能合规处理卖家身份验证、税务、打款等流程:
- 创建卖家的Express账户(最适合快速上线)
const account = await stripe.accounts.create({ type: 'express', email: 'seller@example.com', // 卖家邮箱 });
- 生成卖家的账户完善链接,引导卖家完成KYC验证和收款信息填写
const accountLink = await stripe.accountLinks.create({ account: account.id, refresh_url: 'https://your-site.com/seller/refresh-onboarding', // 重新引导链接 return_url: 'https://your-site.com/seller/onboarding-completed', // 完成后跳转链接 type: 'account_onboarding', });
- 卖家完成账户完善后,发起Payout到该Connect账户
const payout = await stripe.payouts.create({ amount: sellPrice, // 单位为分,比如1000代表10美元 currency: 'usd', destination: account.id, });
场景2:直接关联卖家的银行账户/借记卡(非平台模式)
如果仅需给单个卖家打款,可直接将卖家的收款账户关联到其Customer账户:
- 创建银行账户/借记卡的token
// 美国银行账户示例,其他国家需调整参数 const bankToken = await stripe.tokens.create({ bank_account: { country: 'US', currency: 'usd', account_holder_name: '卖家姓名', account_holder_type: 'individual', // 个人或company routing_number: '110000000', // 美国银行路由号 account_number: '000123456789', // 银行账号 }, });
- 将该token关联到卖家的Customer账户
const bankAccount = await stripe.customers.createSource( sellerCustomerId, // 卖家的Customer ID { source: bankToken.id } );
- 发起Payout到该银行账户
const payout = await stripe.payouts.create({ amount: sellPrice, currency: 'usd', destination: bankAccount.id, });
关键注意事项
- 卖家的收款账户必须完成Stripe的身份验证(KYC),否则Payout会处于
incomplete状态无法处理。 - 不要混淆“付款用的信用卡”和“收款用的账户”:信用卡是买家付钱的工具,不能作为卖家收款的目标。
内容的提问来源于stack exchange,提问作者Scorch
相关产品推荐
相关产品推荐

