You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:43:20