Laravel中Stripe资金转他人银行账户报错问题求助
解决Laravel中Stripe转账至银行账户的"No such destination"错误
错误根源
- 你传入的
destination参数类型完全错误:生成的btok_xxx是银行账户token,仅用于创建外部账户/连接账户,不能直接作为Transfer API的destination值。 - 报错里的
acct_1MQccXIQ2pUmxoSJ要么是无效的连接账户ID,要么你的平台账户没有权限操作该账户。
正确实现步骤
Stripe转账到银行账户分两种场景,对应不同的参数要求:
场景1:转账到第三方普通银行账户(非Stripe账户)
需要先通过银行token创建外部账户(External Account),拿到ba_xxx格式的ID,再用这个ID作为destination。
修正后的代码
public function initiateTransfer(Request $request) { $input = $request->validate([ 'account_token' => ['required'], // 接收前端传来的btok_xxx 'amount' => ['required', new CheckBalance], ]); Stripe::setApiKey(config('stripe.sk')); try { // 1. 用银行token创建外部账户(关联到Customer,也可直接关联平台账户) $customer = \Stripe\Customer::create([ 'source' => $input['account_token'], ]); // 获取外部账户ID(格式为ba_xxx) $externalAccountId = $customer->sources->data[0]->id; // 2. 发起转账(注意:金额需传入最小货币单位,比如1美元传100) $transfer = \Stripe\Transfer::create([ 'amount' => $input['amount'] * 100, 'currency' => 'usd', 'destination' => $externalAccountId, 'description' => '余额退款', ]); return redirect()->away($transfer->destination_payment_url ?? route('transfer.success')); } catch (\Exception $e) { return back()->withError('转账失败: ' . $e->getMessage()); } }
场景2:转账到另一个Stripe Connect账户
如果对方拥有Stripe Connect账户,需要拿到对方的acct_xxx格式的账户ID,且你的平台账户已开启Connect转账权限,同时对方账户完成身份验证。
核心注意事项
- 确保
acct_xxx是有效的Connect账户ID,且属于你的平台下的连接账户。 - 测试环境可通过Stripe Dashboard创建测试Connect账户获取ID。
额外细节提醒
- 测试环境请使用Stripe官方提供的测试银行信息:路由号
110000000、账户号000999999991是有效的。 - 路由配置里的
strype是拼写错误,建议修正为stripe。 - Stripe金额参数必须传入最小货币单位(如美元传分),禁止直接传入浮点数。
内容的提问来源于stack exchange,提问作者Md. Imrul Kayes
相关产品推荐
相关产品推荐

