Stripe Connect API技术问询:延迟扣款与分佣实现及问题排查
你的需求完全可行,方案如下
核心结论
你需要用 Payment Intent API 结合 Stripe Connect 的关联账户配置,完全可以实现延迟扣款+平台抽成的需求。
具体实现步骤
1. 用户下单时创建待授权的Payment Intent
创建Payment Intent时,关键配置这几个参数:
capture_method: manual:设置为手动捕获,下单时仅授权用户支付方式,不会实际扣款,资金处于待确认状态。transfer_data[destination]:指定商家的connected_account_id,交易资金最终会转入该关联账户。application_fee_amount:填写平台要收取的手续费金额(单位为最小货币单位,比如人民币分),这笔钱会直接进入你的平台Stripe账户。
指定关联账户有两种方式:
- 在请求头里添加
Stripe-Account: {{商家的connected_account_id}} - 或者在Payment Intent参数中设置
on_behalf_of: {{商家的connected_account_id}}
示例伪代码:
final paymentIntent = await stripe.paymentIntents.create( PaymentIntentCreateParams( amount: 1000, // 10元,单位分 currency: 'cny', captureMethod: PaymentIntentCaptureMethod.manual, transferData: PaymentIntentTransferData( destination: 'acct_xxxxxx', // 商家的connected_account_id ), applicationFeeAmount: 100, // 1元手续费 ), requestOptions: RequestOptions( headers: {'Stripe-Account': 'acct_xxxxxx'}, ), );
2. 用户取餐完成后触发实际扣款
当用户确认取餐并点击完成按钮时,调用Payment Intent的capture接口,此时才会实际从用户账户扣款,资金自动拆分:商家收到扣除手续费后的金额,平台手续费直接到账。
示例捕获请求伪代码:
await stripe.paymentIntents.capture( paymentIntent.id, requestOptions: RequestOptions( headers: {'Stripe-Account': 'acct_xxxxxx'}, ), );
关于你之前的尝试说明
- 关联账户直接扣款会话(Checkout Session):其实也能实现延迟捕获,只需创建Checkout Session时设置
payment_intent_data[capture_method] = manual,但Payment Intent灵活性更高,更适合你需要后端手动触发扣款的场景。 - Payment Intent API指定关联账户:你之前没找到是因为该配置不在Payment Intent顶层参数里,而是通过请求头
Stripe-Account或on_behalf_of参数设置,需结合Connect场景查看文档。
注意事项
- 商家关联账户建议选Standard或Express类型,支持直接接收转账,配置更简单。
- 支付授权有效期一般为7天,需确保用户在有效期内完成取餐,否则授权失效需重新创建Payment Intent。
- 所有Stripe API请求必须在你的Flutter后端代码中处理,禁止在前端(FlutterFlow)暴露Secret Key,避免安全风险。
内容的提问来源于stack exchange,提问作者user23771728
相关产品推荐
相关产品推荐

