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

Next.js集成Stripe支付时数组数据.map报错的问题排查

解决Next.js集成Stripe时购物车数据处理问题

第一步:排查请求头与数据发送格式

前端发送请求时必须指定Content-Type: application/json头,否则后端无法正确解析JSON格式的购物车数组:

fetch('/api/checkout_sessions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(basket), // basket为你的购物车数组
})

第二步:确认后端数据接收类型

Next.js的API路由会自动解析JSON请求体,直接用req.body获取数据即可,不要手动调用JSON.parse(这会导致"Cannot convert object to primitive value"错误)。在后端打印数据类型验证:

export default async function handler(req, res) {
  if (req.method === 'POST') {
    const data = req.body;
    console.log(typeof data); // 应返回object
    console.log(Array.isArray(data)); // 应返回true,否则说明数据格式错误
  }
}

如果Array.isArray(data)返回false,大概率是前端把数组包裹在了某个对象属性里(比如{ items: basket }),此时后端要取req.body.items而非req.body。

第三步:修复.map调用错误

如果数据是类数组对象而非纯数组,用Array.from()转换后再调用map:

const validItemsArray = Array.from(data);
const lineItems = validItemsArray.map(item => ({
  price: item.stripePriceId, // 确保每个商品包含Stripe价格ID
  quantity: item.quantity,
}));

完整后端示例代码

import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export default async function handler(req, res) {
  if (req.method === 'POST') {
    try {
      const basketItems = req.body;
      
      if (!Array.isArray(basketItems)) {
        throw new Error('购物车数据格式错误,需传入数组类型');
      }

      const lineItems = basketItems.map(item => ({
        price: item.stripePriceId,
        quantity: item.quantity,
      }));

      const session = await stripe.checkout.sessions.create({
        payment_method_types: ['card'],
        line_items: lineItems,
        mode: 'payment',
        success_url: `${req.headers.origin}/success`,
        cancel_url: `${req.headers.origin}/cancel`,
      });

      res.status(200).json({ sessionId: session.id });
    } catch (err) {
      res.status(err.statusCode || 500).json(err.message);
    }
  } else {
    res.setHeader('Allow', 'POST');
    res.status(405).end('Method Not Allowed');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:35:28