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

Node.js+React实现Stripe Checkout会话触发CORS错误如何解决

问题根因

你遇到的CORS报错和后端配置的CORS规则无关,问题源于:前端通过Axios发送AJAX请求时,后端返回303重定向到Stripe的结账域名,浏览器会自动让AJAX请求跟随跳转,而Stripe的官方域名没有配置允许http://localhost:3000跨域访问的响应头,因此触发拦截。


修复步骤

1. 调整后端接口逻辑

移除重定向逻辑,直接将生成的Stripe结账会话URL返回给前端即可:

const YOUR_DOMAIN = 'http://localhost:5000';

router.post('/account/subscriptioncheckoutsession', async (req, res) => {
  const session = await Stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    line_items: [
      {
        price_data: {
          currency: 'usd',
          product_data: {
            name: 'Product Subsciption',
            images: ['https://i.imgur.com/EHyR2nP.png'],
          },
          unit_amount: 100,
        },
        quantity: 1,
      },
    ],
    mode: 'payment',
    success_url: `${YOUR_DOMAIN}/success.html`,
    cancel_url: `${YOUR_DOMAIN}/cancel.html`,
  });
  // 替换原res.redirect逻辑
  res.json({ checkoutUrl: session.url })
})

2. 调整前端调用逻辑

拿到后端返回的结账地址后,用页面全局跳转的方式访问Stripe结账页,不要走AJAX跳转:

const handleCheckout = async (e) => {
  e.preventDefault()
  const { data } = await Axios.post(process.env.REACT_APP_FETCH_URL + '/api/account/subscriptioncheckoutsession')
  // 全局跳转至Stripe结账页
  window.location.href = data.checkoutUrl
}

补充优化建议

如果你的项目是React单页应用,建议将YOUR_DOMAIN改为前端地址http://localhost:3000,匹配前端路由的成功/取消页,避免跳转后脱离前端应用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:42:00