Stripe在线支付创建会话时无法添加元数据的问题
解决Stripe Checkout Session元数据不显示的问题
你当前代码里把元数据放在了product_data字段下,这会导致元数据仅关联到Stripe临时生成的Product对象上,而非Checkout Session或订单条目,所以在Session详情页看不到。以下是两种可行的修正方案:
方案1:给Checkout Session本身添加元数据
如果需要将整单的关联信息(比如购物车ID集合)附加到Session上,直接在stripe.checkout.sessions.create参数中添加metadata字段:
router.post("/create-checkout-session", async (req, res) => { let line_items = req.body.cart.map((e)=>{ return { price_data: { currency: "usd", product_data: { name: e.title, description: e.desc, images: [e.images], }, unit_amount: e.price, }, quantity: e.quantity, }; }) const session = await stripe.checkout.sessions.create({ line_items, mode: "payment", success_url: `${YOUR_DOMAIN}/`, cancel_url: `${YOUR_DOMAIN}/cart`, // 给Session添加元数据,会显示在Session详情页 metadata: { cart_item_ids: req.body.cart.map(item => item.id).join(","), // 可添加其他需要的全局字段 }, }); res.send({ url: session.url }); });
方案2:给单个商品条目添加元数据
如果需要给每个商品单独附加元数据,将metadata字段移到line_item层级下:
router.post("/create-checkout-session", async (req, res) => { let line_items = req.body.cart.map((e)=>{ return { price_data: { currency: "usd", product_data: { name: e.title, description: e.desc, images: [e.images], }, unit_amount: e.price, }, quantity: e.quantity, // 给单个商品条目添加元数据,会显示在Session的商品列表、支付记录中 metadata: { id: e.id, }, }; }) const session = await stripe.checkout.sessions.create({ line_items, mode: "payment", success_url: `${YOUR_DOMAIN}/`, cancel_url: `${YOUR_DOMAIN}/cart`, }); res.send({ url: session.url }); });
关键说明
product_data.metadata仅作用于临时生成的Product对象,需要到Stripe后台的「Products」列表中找到对应临时产品才能查看该元数据,不会直接显示在Checkout Session或支付相关记录里。- Session层级或line_item层级的元数据,会直接展示在Checkout Session详情页、支付Intent、发票等核心业务记录页面中,更符合你的需求。
内容的提问来源于stack exchange,提问作者Abdullah Asif
相关产品推荐
相关产品推荐

