Laravel对接Stripe报错:无法创建Payout,账户需补充必填信息
Stripe转账报错:Cannot create payouts: this account has requirements that need to be collected 解决方法
问题描述
在Laravel中调用Stripe API将钱包余额转账至客户银行卡时,出现错误提示:Cannot create payouts: this account has requirements that need to be collected
代码实现如下:
$card_obj = $stripe->tokens->create([ 'card' => [ 'number' => '4000051240000005', 'exp_month' => 8, 'exp_year' => 2023, 'cvc' => '314', 'currency' => 'cad', ], ]); $account = $stripe->accounts->create([ 'type' => 'express', 'country' => 'CA', 'capabilities' => [ 'card_payments' => ['requested' => true], 'transfers' => ['requested' => true], ], 'external_account' => $card_obj->id, ]); $payout = $stripe->payouts->create([ 'amount' => 1, 'currency' => 'cad', ], [ 'stripe_account' => $account->id, ]);
错误原因与解决步骤
1. 核心原因:Express账户未完成合规验证
你创建的是Stripe Express类型账户,这类账户必须完成身份信息收集与验证才能发起转账(Payout)。仅创建账户并添加收款卡不满足Stripe的合规要求,平台需要确认账户持有者的真实身份信息。
2. 解决步骤:引导用户完成账户激活
- 生成账户开通链接:创建Express账户后,调用
accountLinks接口生成激活页面链接,让用户填写身份信息(姓名、地址、证件等)。示例代码:
$accountLink = $stripe->accountLinks->create([ 'account' => $account->id, 'refresh_url' => 'https://你的域名.com/reauth', // 用户中断流程后的返回页 'return_url' => 'https://你的域名.com/account-done', // 完成后的跳转页 'type' => 'account_onboarding', ]); // 将$accountLink->url返回给前端,引导用户访问完成信息提交
- 等待审核完成:用户提交信息后,Stripe会自动完成审核(测试环境下模拟审核即时通过),账户状态更新后即可发起转账。
3. 提前检查账户状态
发起转账前,可先查询账户的合规要求完成情况,避免报错:
$account = $stripe->accounts->retrieve($account->id); // 查看未完成的必填项 var_dump($account->requirements->currently_due);
若currently_due不为空,说明还有未完成的必填信息,需先处理。
4. 测试环境提示
即使在测试环境,Express账户也需要完成模拟的身份验证流程才能发起转账,你使用的测试卡号4000051240000005是有效的测试收款卡,但仍需走完验证流程。
内容的提问来源于stack exchange,提问作者Ashkan Karimi
相关产品推荐
相关产品推荐

