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

创建Stripe结账会话时遭遇CORS错误,求解决方案

解决Stripe创建Checkout Session时的CORS重定向错误

问题核心原因

你遇到的CORS预检请求被拦截问题,主要是Firebase云函数的定义格式错误,导致请求无法正确匹配到函数逻辑,触发了非法重定向;同时Stripe的必填参数缺失也会加剧请求异常。

具体修复步骤

1. 修正云函数的定义格式

你的functions/index.ts中,createCheckoutSession被错误地套了一层函数包装,这会导致Firebase无法正确识别函数入口,部署后请求会被重定向,触发CORS拦截。

错误代码:

export const createCheckoutSession = () => functions
    .region("asia-northeast1")
    .https.onCall(async (data) => {
      // ...
    });

修正后的代码:

import * as functions from "firebase-functions";
import Stripe from "stripe";

const stripe = new Stripe(functions.config().stripe.secret, {
    apiVersion: "2022-11-15",
});

export const createCheckoutSession = functions
    .region("asia-northeast1")
    .https.onCall(async (data) => {
      const priceId = data.priceId;

      const session = await stripe.checkout.sessions.create({
        line_items: [{
          price: priceId,
          quantity: 1,
        }],
        mode: "payment",
        // 替换为你的实际页面URL,不能为空
        success_url: "https://your-domain.com/success", 
        cancel_url: "https://your-domain.com/cancel",
        payment_method_types: ["card"],
      });
      return session;
    });

2. 补充Stripe必填的URL参数

Stripe创建Checkout Session时,success_url和cancel_url是强制要求项,不能留空。必须填写用户支付成功/取消后跳转的有效页面地址,否则Stripe API会返回错误,间接导致请求异常。

3. 重新部署云函数

修改完成后,执行以下命令重新部署Firebase云函数:

firebase deploy --only functions

4. 本地开发可选配置(避免跨域)

如果是本地开发,建议连接Firebase Functions模拟器,规避真实环境的跨域问题。在src/firebase.ts中添加:

import { connectFunctionsEmulator } from "firebase/functions";

// 仅在开发环境连接模拟器
if (process.env.NODE_ENV === "development") {
  connectFunctionsEmulator(functions, "localhost", 5001);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:10:28