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

如何在Node.js的Stripe Checkout Session中正确传递metadata参数?

问题根因

你当前代码里设置的metadata是属于Checkout Session对象的,并没有绑定到Stripe的Customer实体上,你打印的是Stripe返回的Customer对象,自然看不到你设置的metadata值。你自己代码里定义的customer变量只是本地存储请求参数的临时对象,和Stripe接口返回的Customer实体完全是两个独立的对象。

修复方案

根据你的实际需求选择对应方案即可:

方案1:需要将metadata存储到Stripe Customer对象中

你需要先创建/更新Stripe Customer实体,将metadata写入到Customer的配置里,再在创建Checkout Session时关联该Customer ID:

app.get('/create-checkout-session', async (req, res) => {
  let requestParams = {
    price: req.query.price,
    quantity: req.query.quantity,
    page: req.query.page,
    email: req.query.email,
    name: req.query.name
  }

  let successurl = 'http://localhost:1111/' + requestParams.page
  let failedurl = 'http://localhost:1111/' + requestParams.page

  // 第一步:先创建Stripe Customer,写入需要的metadata
  const stripeCustomer = await stripe.customers.create({
    email: requestParams.email,
    name: requestParams.name,
    metadata: {
      'description': requestParams.page
    }
  })

  // 第二步:创建Checkout Session时关联上述Customer ID
  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    customer: stripeCustomer.id, // 替换原来的customer_email参数
    line_items: [
      {
        price_data: {
          currency: 'cad',
          product_data: {
            name: requestParams.page,
          },
          unit_amount: requestParams.price,
        },
        quantity: requestParams.quantity,
      },
    ],
    mode: 'payment',
    success_url: successurl,
    cancel_url: failedurl,
  })

  res.redirect(303, session.url);
});

修改后你再查询Stripe Customer实体,就能看到metadata里的对应字段。

方案2:仅需要给Checkout Session附加metadata

你当前的代码逻辑已经正确,只是查询位置错误:

  • 你可以直接打印创建完成的session.metadata查看设置的description值
  • 如果你需要在支付完成后拿到该metadata,可以在checkout.session.completed或者payment_intent.succeeded的webhook事件回调中,从事件对象里的Checkout Session字段提取metadata
  • 如果需要将Session的metadata同步到Customer,可以在webhook回调中调用stripe.customers.update方法,将metadata写入对应Customer实体
注意事项
  • Stripe所有对象的metadata值仅支持字符串类型,如果传入数字、布尔值等其他类型会被自动转换为字符串
  • 单个metadata键的长度不超过40字符,值的长度不超过500字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:57:04