Stripe Connect平台如何代关联账户捕获预授权PaymentIntent资金
Stripe Connect自定义账户预授权后捕获问题解决方案
问题原因分析
你捕获失败的核心问题有两个:
- API调用参数错误:你没有在捕获请求中正确指定关联账户ID,导致平台账户去查询自身名下的PaymentIntent,而该资源实际归属于关联账户,因此提示不存在。
- 代码写法错误:你当前的代码没有调用Stripe SDK中正确的
capture方法,而是错误地尝试直接实例化PaymentIntent。
另外,你提供的预授权创建代码存在参数结构问题:'capture' => false没有包含在创建参数的数组内,这会导致该参数不生效,可能预授权并未正确设置为手动捕获状态。
修正后的预授权创建代码
首先确保预授权创建时参数正确,推荐使用capture_method='manual'(Stripe官方更推荐的写法,和capture=false效果一致),同时将所有参数放在第一个数组中:
$stripe->paymentIntents->create([ 'amount' => 1000, 'customer' => $cloned_customer_id, // 关联账户下的克隆客户ID 'payment_method' => $cloned_payment_method_id, // 关联账户下的克隆支付方式ID 'currency' => 'usd', 'capture_method' => 'manual', // 开启手动捕获 'confirm' => true, // 如果需要立即完成预授权确认,添加此参数(根据你的流程调整) ], [ 'stripe_account' => '{{CONNECTED_ACCOUNT_ID}}' // 指定关联账户ID ]);
正确的捕获实现代码
平台使用自身的平台密钥,调用PaymentIntent的capture方法时,必须携带stripe_account参数指定关联账户ID,这样Stripe才会去关联账户下查找对应的PaymentIntent并执行捕获:
// 捕获指定的PaymentIntent $stripe->paymentIntents->capture( '{{PAYMENT_INTENT_ID}}', // 关联账户下的PaymentIntent ID [ // 可选:如果需要部分捕获,可以指定捕获金额(单位为最小货币单位,如美元的分) // 'amount_to_capture' => 800 ], [ 'stripe_account' => '{{CONNECTED_ACCOUNT_ID}}' // 必须指定关联账户ID ] );
关键注意事项
- 资源归属确认:克隆客户和支付方式后,务必确认这些资源确实属于目标关联账户,创建PaymentIntent时必须使用关联账户下的客户和支付方式ID。
- 预授权有效期:未捕获的PaymentIntent默认有效期为7天,需确保在有效期内完成捕获操作。
- 权限验证:平台账户需具备操作关联账户资源的权限,自定义账户默认允许平台通过
stripe_account参数操作其资源,无需额外配置。
内容的提问来源于stack exchange,提问作者Matúš Marčiš
相关产品推荐
相关产品推荐

