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

使用Node.js搭建Stripe结账时遇NetworkError问题求助

解决Stripe结账Fetch请求失败的NetworkError问题

别急,这个TypeError: NetworkError在Stripe集成场景里挺常见的,不一定是测试密钥的锅,咱们一步步排查:

1. 先确认测试密钥的正确性与配置逻辑

  • 先搞清楚密钥分工:前端只能用Publishable Key(pk_test_开头),后端才用Secret Key(sk_test_开头)。要是前端不小心用了Secret Key,浏览器会直接拦截请求——Stripe对密钥有域名权限限制,Secret Key绝对不能暴露在前端代码里。
  • 检查密钥有没有复制错误,比如少了字符、多了空格,建议直接从Stripe Dashboard复制粘贴,别手动敲。

2. 重点排查CORS配置(Firefox对跨域限制很严)

这大概率是问题核心:

  • 如果你是本地开发(比如用localhost:3000),后端必须配置正确的CORS头,允许你的前端域名访问。用Node.js的cors包的话,要明确指定允许的源:
    const cors = require('cors');
    app.use(cors({
      origin: 'http://localhost:3000', // 你的前端实际地址
      credentials: true
    }));
    
  • 另外,Stripe官方建议:创建结账会话的请求必须从后端发起,而不是前端直接调用Stripe API。既安全又能避免大部分跨域问题。如果非要前端直接调用,得在Stripe Dashboard里把前端域名添加到「API密钥的允许域名」(路径:Developers > API keys > Restrict key)。

3. 检查请求的URL、方法与请求头

  • 确认fetch的后端API地址是否正确,比如本地开发的话是不是http://localhost:xxxx/create-checkout-session,别写错端口或路径。
  • 创建结账会话需要用POST请求,要是用了GET肯定会失败。
  • 如果请求带JSON数据,必须在请求头里加Content-Type: application/json,不然后端解析不了。

4. 用Firefox开发者工具抓包看细节

打开F12开发者工具,切换到「网络」标签,重新触发请求,看具体错误:

  • 是请求根本没发出去?还是返回了4xx/5xx状态码?
  • 403状态码大概率是CORS或密钥权限问题;500就是后端代码有问题,比如Stripe SDK调用出错,去看后端日志就行。
  • 另外,Firefox会拦截无证书的本地HTTPS请求,如果你的前端用了https://localhost,建议暂时换成HTTP开发。

5. 单独测试Stripe API连通性

先在后端写个简单脚本,验证密钥和SDK是否正常:

const stripe = require('stripe')('sk_test_你的密钥');

async function testStripeConnection() {
  try {
    const session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      line_items: [
        {
          price_data: {
            currency: 'usd',
            product_data: {
              name: '测试商品',
            },
            unit_amount: 2000,
          },
          quantity: 1,
        },
      ],
      mode: 'payment',
      success_url: 'http://localhost:3000/success',
      cancel_url: 'http://localhost:3000/cancel',
    });
    console.log('会话创建成功:', session.id);
  } catch (err) {
    console.error('Stripe调用出错:', err);
  }
}

testStripeConnection();

运行脚本如果能成功创建会话,说明密钥和SDK没问题,问题出在前端到后端的请求环节;如果报错,那就是密钥或SDK配置的问题。

先从CORS和密钥配置入手排查,这俩是最常见的原因,结合开发者工具抓包,应该很快能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:16:44