使用Stripe Connect Express搭建类Airbnb支付系统的配置咨询
解决方案:实现类Airbnb的Stripe Connect佣金与延迟付款流程
核心思路
放弃默认的Destination Charge直接打款模式,改用分离式收费+延迟转账方案:用户付款全额先进入平台账户,24小时后从该笔付款中拆分出酒店应得部分转账,平台留存15%佣金,无需动用自有余额。
1. 调整Stripe Connect付款模式
在「Payment Plugins for Stripe WooCommerce」插件中修改配置:
- 切换Connect模式为Separate Charges and Transfers(平台先收全款,后续手动/自动转账给商家)。
- 禁用插件默认的自动打款逻辑,确保用户付款资金直接进入你的平台Stripe账户。
2. 定制付款金额计算
通过Woocommerce钩子或插件定制功能,修改订单应付金额:
- 用户最终付款 = 房源预订总价 × 1.15(包含15%平台佣金)。
- 将酒店应得金额(原始总价)、平台佣金金额、酒店的Stripe Connect ID存储为订单元数据,方便后续转账使用。
3. 触发预订确认流程
利用Woocommerce订单状态钩子,在用户付款完成后(woocommerce_order_status_completed)执行:
- 更新房源日历为已预订状态(通过Hivepress的房源状态API)。
- 发送预订确认通知给管理员和用户。
- 调度一个24小时后的延迟任务,用于执行酒店转账。
4. 实现延迟转账(无需平台余额)
通过Stripe API实现从用户付款资金中直接转账给酒店,代码示例(适配WordPress/Woocommerce环境):
// 订单完成后调度24小时后的转账任务 add_action('woocommerce_order_status_completed', 'schedule_hotel_payout', 10, 1); function schedule_hotel_payout($order_id) { $order = wc_get_order($order_id); // 从订单元数据获取酒店Connect ID和应得金额 $hotel_connect_id = $order->get_meta('_hotel_stripe_connect_id'); $hotel_amount = $order->get_total() / 1.15; // 还原原始预订总价 // 24小时后执行转账(86400秒) wp_schedule_single_event(time() + 86400, 'execute_hotel_payout', [$order_id, $hotel_connect_id, $hotel_amount]); } // 执行转账的回调函数 add_action('execute_hotel_payout', 'execute_hotel_payout_callback', 10, 3); function execute_hotel_payout_callback($order_id, $hotel_connect_id, $hotel_amount) { $order = wc_get_order($order_id); $stripe_charge_id = $order->get_meta('_stripe_charge_id'); // 获取用户付款的Charge ID // 初始化Stripe客户端 \Stripe\Stripe::setApiKey('你的平台Secret Key'); try { $transfer = \Stripe\Transfer::create([ 'amount' => (int)($hotel_amount * 100), // Stripe以分为单位 'currency' => 'cnx', // 替换为你的实际币种(如usd、eur) 'destination' => $hotel_connect_id, 'source_transaction' => $stripe_charge_id, // 关联原始付款,直接从该笔资金扣除 'description' => "订单#{$order_id} 酒店结算款" ]); // 记录转账ID到订单,便于后续查询 $order->update_meta_data('_stripe_transfer_id', $transfer->id); $order->save(); } catch (\Stripe\Exception\ApiErrorException $e) { // 转账失败处理:记录日志、通知管理员 error_log("Stripe转账失败(订单{$order_id}):" . $e->getMessage()); } }
5. 测试与验证
- 使用Stripe测试卡号创建订单,确认付款资金进入平台账户。
- 等待24小时后,检查Stripe Dashboard的Transfer记录,确认酒店账户收到对应金额,平台留存15%佣金。
- 验证WP-Cron服务正常运行(延迟任务依赖此服务),若服务器Cron异常,可改用第三方定时任务工具触发转账。
内容的提问来源于stack exchange,提问作者Cerealkey
相关产品推荐
相关产品推荐

