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

Expo集成Stripe调用create-payment-intent出现JSON解析错误如何解决?

报错原因与解决方案

你遇到的SyntaxError: JSON Parse error: Unrecognized token '<'错误核心原因是请求create-payment-intent接口时,后端返回的不是JSON格式数据,而是HTML内容(通常是404、500错误页的开头<字符)。经排查代码有3个明确问题,对应修复方案如下:


后端修复项

  1. 缺失dotenv初始化逻辑,无法读取环境变量
    你引入了dotenv但没有调用config()方法,导致process.env.SECRET_KEY为空,Stripe初始化失败会触发服务端错误,返回错误页HTML。
    修复代码:
import dotenv from "dotenv";
dotenv.config(); // 新增这行,加载.env配置文件中的环境变量
  1. 接口返回格式与前端解构逻辑不匹配
    当前你直接返回res.json(clientSecret)(返回的是纯字符串),但前端代码执行的是const { clientSecret } = await response.json(),需要接收一个带clientSecret字段的对象。同时要添加错误捕获避免服务端报错返回HTML。
    修复后的接口代码:
app.post("/create-payment-intent", async (req, res) => {
  try {
    const paymentIntent = await stripe.paymentIntents.create({
      amount: 1099,
      currency: "usd",
    });
    // 返回对象,和前端解构逻辑对齐
    res.json({ clientSecret: paymentIntent.client_secret });
  } catch (err) {
    console.error("创建支付意图失败:", err);
    res.status(500).json({ error: err.message });
  }
});
  1. 接口路径缺少前缀斜杠
    原代码app.post("create-payment-intent")缺少开头的斜杠,部分Express版本会匹配失败返回404页面,修改为app.post("/create-payment-intent")即可。

前端修复项

  1. 地址配置错误,Expo端无法访问本地后端
    如果你是用真机/模拟器运行Expo应用,localhost指向的是当前运行应用的设备,而非你启动后端服务的电脑,会直接返回404页面。
    修复方案:
    将const API_URL = "http://localhost:3000";中的localhost替换为你电脑的局域网IP(可在电脑网络设置中查看,格式类似192.168.x.x),确保运行Expo的设备和电脑处于同一WIFI网络下。

  2. 新增响应校验逻辑,提前定位问题
    在解析JSON前先判断响应状态是否正常,避免错误内容直接走JSON解析:

const fetchPaymentIntentClientSecret = async () => {
  const response = await fetch(
    `${API_URL}/create-payment-intent`, // 统一用API_URL变量,避免硬编码
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Accept: "application/json",
      },
      body: JSON.stringify({
        currency: "usd",
      }),
    }
  );
  // 新增响应状态校验
  if (!response.ok) {
    const errContent = await response.text();
    console.log("接口错误返回内容:", errContent);
    throw new Error(`请求失败,状态码:${response.status}`);
  }
  const { clientSecret } = await response.json();
  return clientSecret;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:24:04