如何在Stripe中实现最长90天的付款托管?含关联账户分账场景
Stripe付款托管+分账配置问题解决方案
你要的资金暂存(最长90天)+分账的需求,其实是通过Stripe Connect的延迟转账功能实现的,我帮你把代码和逻辑理清楚:
为什么原来的代码没有托管效果?
你之前用的destination参数会自动立即完成转账给关联账户,相当于直接把分账资金打过去,自然看不到“托管”选项。要实现暂存,得换用transfer_data参数组合,把转账逻辑从“自动”改成“手动触发”。
修改后的收款代码(带暂存逻辑)
\Stripe\Stripe::setApiKey(STRIPE_SECRET_KEY); $charge = \Stripe\Charge::create([ "amount" => 400, "currency" => "usd", "source" => "tok_visa", // 替换原destination为transfer_data,指定关联账户但不自动转账 "transfer_data" => [ "destination" => "acct_1CVDnsDG3NG0OLEa", // 用transfer_group标记这笔收款对应的订单/业务ID,后续转账要用到 "transfer_group" => "order_12345" ] ]);
手动/API释放分账资金
当你确认可以把资金转给关联账户时,调用Transfer API发起转账,记得带上之前的transfer_group来关联对应的收款:
\Stripe\Transfer::create([ "amount" => 200, "currency" => "usd", "destination" => "acct_1CVDnsDG3NG0OLEa", "transfer_group" => "order_12345" ]);
关键注意点
- 暂存的资金会留在你的Stripe平台账户下,最长可保留90天,超时会自动退款给付款用户
- 如果需要先锁定用户资金再确认收款(比如先授权后实际扣款),可以在Charge参数里加
"capture" => false,之后调用$charge->capture()完成收款后再发起转账 transfer_group建议用你的业务唯一标识(比如订单ID),确保转账和收款一一对应
内容的提问来源于stack exchange,提问作者James Davis




