如何通过Stripe Connect自动按月转移订阅手续费的50%至我的关联账户?
解决方案
你当前代码里设置的application_fee_percent=10,会让每笔订阅付款的10%手续费先进入你的平台Stripe账户。要把这部分手续费的50%自动转到你的另一个关联账户,最可靠的方式是通过Webhook监听订阅付款完成事件,触发自动转账,具体操作如下:
1. 监听invoice.paid Webhook事件
当订阅每月成功扣款后,Stripe会发送invoice.paid事件到你配置的Webhook端点,你需要在这个事件的处理逻辑里完成转账操作。
2. 计算待转账金额
从invoice.paid事件数据中提取平台收取的手续费金额(application_fee_amount,单位为最小货币单位,比如美元是分、人民币是分),取其50%作为转账金额。
3. 调用Stripe Transfers API完成转账
在Webhook处理代码中,调用Transfers API将计算后的金额转到目标关联账户。
完整PHP代码示例
Webhook处理逻辑
// 初始化Stripe客户端 \Stripe\Stripe::setApiKey('你的平台API密钥'); // 获取Webhook请求体 $payload = @file_get_contents('php://input'); $sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE']; $webhook_secret = '你的Webhook密钥'; try { // 验证Webhook事件合法性 $event = \Stripe\Webhook::constructEvent( $payload, $sig_header, $webhook_secret ); } catch(\UnexpectedValueException $e) { // 无效请求体 http_response_code(400); exit(); } catch(\Stripe\Exception\SignatureVerificationException $e) { // 无效签名 http_response_code(400); exit(); } // 处理invoice.paid事件 if ($event->type === 'invoice.paid') { $invoice = $event->data->object; // 确认该订阅设置了手续费,避免非目标订阅触发 if (isset($invoice->application_fee_amount) && $invoice->application_fee_amount > 0) { // 计算转账金额:手续费的50% $transfer_amount = (int)($invoice->application_fee_amount * 0.5); // 创建转账到目标关联账户 $transfer = \Stripe\Transfer::create([ 'amount' => $transfer_amount, 'currency' => $invoice->currency, 'destination' => '你的目标关联账户ID', 'source_transaction' => $invoice->charge, // 关联到对应付款记录 'description' => '订阅手续费分成(50%)' ]); } } http_response_code(200);
额外注意事项
- 确保平台账户有足够余额完成转账:手续费会先进入平台账户,只要付款成功,余额就满足转账条件。
- 配置Webhook时必须开启
invoice.paid事件,且验证签名以保障安全性。 - 若需处理历史订阅的手续费分成,可手动调用Transfers API补转,或编写批量处理脚本完成。
内容的提问来源于stack exchange,提问作者Aastone
相关产品推荐
相关产品推荐

