如何通过Stripe API向无Stripe账户卖家的银行账户转账并托管资金
解决Stripe Connect无卖家账户的资金托管与打款问题
嘿,我刚好处理过类似的交易平台场景,针对你提到的「顾客付款后托管资金、延后发放给仅持银行账户的卖家,同时留存平台佣金」的需求,这里有两个符合Stripe规则的可行方案,帮你绕开“卖家必须有Stripe账户”的限制:
方案1:用Express账户+分离式收费转账(最省心合规)
这是Stripe官方推荐的模式,完全适配你的需求,还能帮你省掉合规的麻烦:
- 你可以通过API给没有Stripe账户的卖家一键创建Express账户——不需要卖家自己去Stripe注册,你只需要收集他们的姓名、邮箱和银行账户信息就行。Stripe会生成一个简短的验证链接,卖家点进去补完身份信息(比如身份证)就搞定,整个流程可以嵌入你的平台,用户感知不到Stripe的存在。
- 顾客付款时,用Separate Charges & Transfers模式:先把全额资金收到你的平台Stripe账户里,实现资金托管。
- 等你要给卖家打款时,扣掉平台佣金,调用Transfer API把剩下的钱转到卖家的Express账户,Stripe会自动把钱提现到他们绑定的银行账户,你不用管后续的提现流程。
给你个PHP代码示例参考:
// 第一步:收顾客的钱到平台账户 $charge = \Stripe\Charge::create([ 'amount' => 1000, // 单位是分,这里是10美元 'currency' => 'usd', 'source' => 'tok_visa', // 替换成顾客的支付令牌 'description' => '商品交易订单#123', ]); // 第二步:延后打款给卖家(假设佣金10%,转900分即9美元) $transfer = \Stripe\Transfer::create([ 'amount' => 900, 'currency' => 'usd', 'destination' => 'acct_XXXXXX', // 替换成卖家的Express账户ID 'transfer_group' => 'order_123', // 关联订单,方便后续对账 ]);
方案2:直接用Payouts API(需自行处理合规)
如果你不想给卖家创建Stripe账户,也可以用这个方式,但要注意得自己搞定合规问题:
- 顾客付款还是先全额收到你的平台账户,完成资金托管。
- 你需要自行收集卖家的身份信息、银行账户信息,确保符合反洗钱(AML)的要求(不然Stripe可能会限制你的账户)。
- 之后调用Payouts API,把扣完佣金的钱直接打到卖家的银行账户。
PHP代码示例:
// 先收顾客的钱到平台账户 $charge = \Stripe\Charge::create([ 'amount' => 1000, 'currency' => 'usd', 'source' => 'tok_visa', 'description' => '商品交易订单#123', ]); // 创建卖家的银行账户记录(关联到一个临时顾客对象方便管理) $external_account = \Stripe\ExternalAccount::create([ 'object' => 'bank_account', 'country' => 'US', 'currency' => 'usd', 'account_number' => '000123456789', // 卖家的银行账号 'routing_number' => '110000000', // 美国银行的路由号,其他地区对应不同字段 ], ['customer' => 'cus_XXXXXX']); // 替换成你创建的临时顾客ID // 发起打款 $payout = \Stripe\Payout::create([ 'amount' => 900, 'currency' => 'usd', 'destination' => $external_account->id, 'description' => '订单#123款项发放给卖家', ]);
重要提醒
- 合规是底线:方案1里Stripe会帮你处理大部分KYC/AML的合规工作,所以更推荐;方案2你得自己负责验证卖家身份,一定要按要求来,别踩红线。
- 资金托管规则要明确:你的平台条款里得写清楚资金托管的时间、发放条件,避免和卖家产生纠纷。
- 手续费成本:两种方案都会产生交易费和转账费,具体费率可以看Stripe的定价说明。
内容的提问来源于stack exchange,提问作者James Davis




