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

Laravel自定义Ajax页面集成Stripe支付时return_url错误解决

Laravel自定义页面Ajax集成Stripe支付网关报错解决

错误原因

这个错误的核心逻辑是:你的支付操作(Charge)默认继承了Stripe后台启用的全部自动支付方式,其中部分支付方式(如3DS验证、网银类支付)需要跳转至外部页面完成验证。但当前代码既未指定支付完成后的回调return_url,也未限制禁用需要跳转的支付方式,因此Stripe抛出该提示。

具体到你的代码问题:

  • 创建SetupIntent时使用默认配置,未对自动支付方式的跳转权限做限制
  • 调用charge方法时指定了confirmation_method => 'manual',但未配套添加return_url,也未明确禁止跳转类支付方式

解决方案

方案一:指定回调地址,兼容所有支付方式

适合需要支持Stripe后台全部启用支付方式的场景,需在两个关键步骤补充参数:

  1. 修改SetupIntent创建代码
$user = Auth::user();
$user->createOrGetStripeCustomer();
// 添加自动支付方式配置与回调地址
$intent = $user->createSetupIntent([
    'automatic_payment_methods' => [
        'enabled' => true,
    ],
    'return_url' => route('checkout.complete') // 替换为你的支付完成回调路由
]);
return view('website.checkout.index', compact('data', 'intent'));
  1. 修改Charge操作代码
$user = Auth::user();
$user->createOrGetStripeCustomer();
$paymentMethod = $request->input('paymentMethod');
$user->updateDefaultPaymentMethod($paymentMethod);      
try {
    $response = $user->charge(
        $request->input('grand_total') * 100, 
        $paymentMethod, 
        [
            'currency' => 'USD',
            'confirmation_method' => 'manual',
            'return_url' => route('checkout.complete'), // 同步指定回调路由
            'automatic_payment_methods' => [
                'enabled' => true,
            ]
        ]
    );
    if ($response->id) {
        // 存储支付方法到会话等业务逻辑
    }
} catch (\Exception $exception) {
    return response()->json($exception->getMessage());
}

需同步创建checkout.complete路由,处理支付跳转后的回调逻辑,验证最终支付状态。

方案二:禁用跳转类支付方式,仅支持无需跳转的支付方式(如信用卡)

适合仅需支持信用卡等无需跳转支付方式的场景,直接限制自动支付方式的跳转权限:

  1. 修改SetupIntent创建代码
$user = Auth::user();
$user->createOrGetStripeCustomer();
$intent = $user->createSetupIntent([
    'automatic_payment_methods' => [
        'enabled' => true,
        'allow_redirects' => 'never' // 禁止所有需要跳转的支付方式
    ]
]);
return view('website.checkout.index', compact('data', 'intent'));
  1. 修改Charge操作代码
$user = Auth::user();
$user->createOrGetStripeCustomer();
$paymentMethod = $request->input('paymentMethod');
$user->updateDefaultPaymentMethod($paymentMethod);      
try {
    $response = $user->charge(
        $request->input('grand_total') * 100, 
        $paymentMethod, 
        [
            'currency' => 'USD',
            'confirmation_method' => 'manual',
            'automatic_payment_methods' => [
                'enabled' => true,
                'allow_redirects' => 'never'
            ]
        ]
    );
    if ($response->id) {
        // 存储支付方法到会话等业务逻辑
    }
} catch (\Exception $exception) {
    return response()->json($exception->getMessage());
}

内容的提问来源于stack exchange,提问作者Malik Umair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:50:10