使用Stripe向雇员发放周薪遇transfers能力未启用报错如何解决
报错根因分析
你收到的报错
"Your destination account needs to have at least one of the following capabilities enabled: transfers, legacy_payments"
核心原因是你创建的Custom类型Stripe账户虽然在代码中提交了transfers能力的申请,但Stripe对所有接收转账的Custom账户有强制KYC(身份验证)要求,只有提交完整的司机身份资料并通过Stripe审核后,transfers能力才会正式激活,未激活状态下无法接收转账。
具体解决步骤
- 补充Custom账户的必填KYC信息
你当前的创建账户逻辑只提交了银行账户信息,还需要补充司机的身份验证字段,美国地区个人司机至少需要补充姓名、出生日期、社保号后4位、居住地址、联系信息以及服务条款同意记录,修改后的账户创建代码如下:// account test $bank = $stripe->tokens->create([ 'bank_account' => [ 'country' => 'US', 'currency' => 'usd', 'account_holder_name' => 'Jenny Rosen', 'account_holder_type' => 'individual', 'routing_number' => '110000000', 'account_number' => '000123456789', ], ]); // create account $account = \Stripe\Account::create( array( "country" => "US", 'type' => 'custom', 'capabilities' => [ 'card_payments' => [ 'requested' => true, ], 'transfers' => [ 'requested' => true, ], ], 'external_account' => $bank->id, // 新增KYC相关字段 'individual' => [ 'first_name' => 'Jenny', 'last_name' => 'Rosen', 'email' => 'jenny.rosen@example.com', 'phone' => '+15555555555', 'dob' => [ 'day' => 1, 'month' => 1, 'year' => 1990, ], 'address' => [ 'line1' => '123 Main St', 'city' => 'Los Angeles', 'state' => 'CA', 'postal_code' => '90001', 'country' => 'US', ], 'ssn_last_4' => '1234', ], 'tos_acceptance' => [ 'date' => time(), 'ip' => '司机实际同意服务条款的IP地址', ] ) ); - 确认
transfers能力状态
提交KYC信息后,可通过Stripe账户查询接口查看capabilities.transfers字段的状态,只有状态为active时才可以发起转账。如果状态为pending说明还在审核中,状态为requirements_pending则需要补充Stripe要求的额外证明材料。 - 优化发薪流程
你是每周定期发薪,不需要每次发薪都创建新的Stripe账户,正确流程为:司机首次入驻平台时完成一次Stripe账户创建和KYC验证,后续发薪直接复用该账户ID,每周薪资核算完成后批量调用转账接口即可,Stripe会自动将资金结算到司机绑定的银行账户。 - 可选简化方案:如果你的场景只是单纯给雇员发薪,不需要拆分用户支付的订单资金,也可以直接使用Stripe Payouts功能从平台账户直接向司机的银行账户打款,无需为每个司机创建Custom账户,流程更简单。
测试环境调试方案
如果是在开发测试阶段,可以直接在Stripe Dashboard的测试模式下,手动将对应测试账户的transfers能力设置为已激活,不需要提交真实KYC资料即可完成转账功能测试。
内容的提问来源于stack exchange,提问作者Nguyen Nhat
相关产品推荐
相关产品推荐

