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

如何获取Stripe结账会话中用户实际购买的商品数量?

问题:如何获取Stripe结账会话中用户实际选择的购买数量?

我开发了一个Web应用,用户需要购买信用包才能使用,比如5000个信用点的套餐售价4.99美元。我用Stripe管理支付流程,通过以下代码创建了允许用户调整购买数量的结账会话:

const session = await stripe.checkout.sessions.create({
  customer: customer.id,
  mode: "payment",
  line_items: [
    {
      price: priceId,
      quantity: 1,
      adjustable_quantity: {
        enabled: true,
        minimum: 1,
        maximum: 10,
      },
    },
  ],
  success_url: successUrl,
  expand: ['line_items'],
});

console.log("session.line_items.data", session.line_items.data)

支付完成后,我想获取用户实际选择的购买数量,但在session.line_items.data里找不到正确数值——打印出来的内容里quantity显示为1,可我在结账时输入的明明是大于1的数量:

session.line_items.data [
  {
    id: 'li_1NkQLWKr7t8UXDrfh27ztJyS',
    object: 'item',
    amount_discount: 0,
    amount_subtotal: 499,
    amount_tax: 0,
    amount_total: 499,
    currency: 'usd',
    description: 'Pack of 5000 credits',
    price: {
      id: 'price_1NkPz7Kr7t8UXDrfWPexeF0Y',
      object: 'price',
      active: true,
      billing_scheme: 'per_unit',
      created: 1693308085,
      currency: 'usd',
      custom_unit_amount: null,
      livemode: false,
      lookup_key: null,
      metadata: {},
      nickname: null,
      product: 'prod_OXUzBNts9jZ47m',
      recurring: null,
      tax_behavior: 'unspecified',
      tiers_mode: null,
      transform_quantity: null,
      type: 'one_time',
      unit_amount: 499,
      unit_amount_decimal: '499'
    },
    quantity: 1
  }
]

解决方法

  • 创建会话时的line_items是初始配置:你当前打印的是创建结账会话时设置的初始数量,并非用户修改后的最终数据。
  • 通过Webhooks获取支付完成后的真实数据:支付成功后,Stripe会触发checkout.session.completed事件。在该事件的payload中,展开line_items或关联的payment_intent,即可获取用户实际购买的数量。
  • 事后重新检索结账会话:如果未使用Webhooks,可在用户跳转回success_url时,通过会话ID重新调用检索接口获取最新数据。示例代码:
// 在success页面的后端验证逻辑中执行
const session = await stripe.checkout.sessions.retrieve(
  sessionId, // 从success_url的参数中提取会话ID
  { expand: ['line_items'] }
);
console.log(session.line_items.data[0].quantity); // 此处为用户实际购买的数量
  • 注意数据更新时机:只有用户完成支付后,Stripe才会更新会话的实际订单数据,因此必须在支付完成后再去获取最新的line_items信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:27:46