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

Next.js集成Stripe时遇AxiosError:状态码500请求失败

解决Stripe结账会话创建500错误的排查方案

第一步:捕获并查看具体错误信息

当前代码未处理Stripe请求的异常,导致只能看到500状态码,无法定位具体问题。先给API路由添加错误捕获,打印Stripe返回的详细错误:

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

export default async (req, res) => {
  try {
    const { items, email } = req.body;
    const transformedItems = items.map((item) => ({
      description: item.description,
      quantity: 1,
      price_data: {
        currency: 'usd',
        unit_amount: Math.round(item.price * 100), // 确保是整数
        product_data: {
          name: item.title,
          images: [item.image],
        },
      },
    }));

    // 先打印转换后的商品数据,验证格式
    console.log('Transformed Items:', transformedItems);

    const session = await stripe.checkout.sessions.create({
      line_items: transformedItems,
      mode: 'payment',
      success_url: `${process.env.HOST}/success`,
      cancel_url: `${process.env.HOST}/checkout`,
      metadata: {
        email,
        images: JSON.stringify(items.map((item) => item.image)),
      },
    });

    res.status(200).json({ id: session.id });
  } catch (error) {
    console.error('Stripe 错误详情:', error);
    res.status(error.statusCode || 500).json({ error: error.message });
  }
};

常见错误原因及修复

1. unit_amount 格式不符合要求

Stripe要求金额必须是整数(以分为单位),如果你的item.price是字符串、带多位小数的数字,会导致转换后不是整数。

  • 修复:用Math.round(item.price * 100)确保结果为整数,同时验证item.price是有效数字类型。

2. product_data.images 无效

Stripe要求图片必须是公开可访问的HTTP/HTTPS完整链接,不能用本地相对路径(比如/public/shoe.jpg)或未部署的本地URL。

  • 修复:假数据里的图片换成Stripe测试用的公开图片(比如https://picsum.photos/200/200),或者确保你的图片URL是线上可访问的完整地址。

3. 商品字段缺失或为空

如果假数据中某个商品的title、description、price存在undefined或空值,会触发Stripe的字段验证错误。

  • 修复:检查items数组中每个商品的必填字段是否完整,添加默认值兜底(比如description: item.description || '默认描述')。

4. 环境变量配置错误

  • 确认STRIPE_SECRET_KEY是测试密钥(格式为sk_test_xxx),不能用公钥;
  • 确认HOST环境变量是完整的前端域名(比如http://localhost:3000),没有拼写错误。

5. Stripe日志排查

登录Stripe控制台,进入Developers → Logs,找到对应的请求记录,里面会有比控制台更详细的错误说明,比如字段格式错误、权限问题等。

额外验证步骤

  • 前端请求时,确保Axios的Content-Type为application/json,且items数组正确传递(可以在前端打印req.body确认数据格式);
  • 用Stripe官方的API测试工具(Postman或Stripe CLI)直接调用你的API路由,排除前端请求的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:01:37