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

Laravel集成Stripe支付网关遇CORS跨域问题求解决方案

解决Laravel集成Stripe订阅的CORS错误

问题原因

前端请求你的Laravel订阅接口时,浏览器发起的预检OPTIONS请求未收到正确的Access-Control-Allow-Origin响应头,导致请求被拦截。

解决步骤

1. 配置Laravel CORS中间件

修改config/cors.php文件,确保订阅接口路径被纳入CORS规则,同时允许前端域名访问:

return [
    'paths' => ['api/*', '/subscriptions-checkout/*'], // 替换为你的订阅接口实际路由路径
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://localhost:3000'], // 测试环境可临时用'*',生产环境必须指定前端域名
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];

同时确认app/Http/Kernel.php的中间件组已启用CORS中间件:

protected $middlewareGroups = [
    'web' => [
        // ...其他中间件
        \Fruitcake\Cors\HandleCors::class,
    ],

    'api' => [
        // ...其他中间件
        \Fruitcake\Cors\HandleCors::class,
    ],
];

2. 调整接口返回逻辑(推荐方案)

避免用AJAX请求直接接收重定向响应,改为返回Stripe Checkout会话URL,让前端主动跳转:

public function subscriptions_checkout(Request $request, string $plan)
{
    $checkoutSession = $request->user()
        ->newSubscription('default', $plan)
        ->checkout([
            'success_url' => route('success_checkout'),
            'cancel_url' => route('plans'),
        ]);

    // 返回会话URL给前端处理跳转
    return response()->json(['checkout_url' => $checkoutSession->url]);
}

前端拿到URL后直接跳转(示例):

axios.post('/subscriptions-checkout/your-plan-id')
    .then(res => {
        window.location.href = res.data.checkout_url;
    });

3. 本地测试额外配置

如果是本地开发环境,需在.env文件中设置正确的状态域:

SANCTUM_STATEFUL_DOMAINS=localhost:3000 // 替换为你的前端实际端口/域名

内容的提问来源于stack exchange,提问作者anas tair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:36