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

Firebase Stripe扩展多订阅价格生成Checkout Session失败问题

问题:Firebase Stripe扩展集成时多订阅价格无法生成Checkout Session

我在集成Firebase与Stripe扩展,已经在Stripe上创建了一个产品,设置了月付和年付两个周期性订阅价格。之前用单个订阅价格时,通过price参数能正常生成Stripe Checkout Session,但把两个订阅价格放到line_items里传递时,生成失败,提示请求Payload有问题。

相关代码:

const checkoutSessionRef = collection(
  firestore,
  `users/${uid}/checkout_sessions`,
);
const docData = {
  success_url: url,
  cancel_url: url,

  line_items: [
    {
      price: montlyPriceId,
      quantity: 1,
    },
    {
      price: yearlyPriceId,
      quantity: 1,
    },
  ],
};

await addDoc(checkoutSessionRef, docData);

注:移除line_items,只用price: priceId传递单个价格就能正常工作。


Checkout Session多订阅选项官方说明(翻译)

  • 若要让顾客在Checkout中选择不同订阅方案(如月付/年付),不可通过line_items传入多个订阅价格。
  • 正确方式是设置mode: 'subscription',并通过prices参数传入多个订阅价格(这些价格必须归属同一个Stripe产品)。
  • 传入多个价格后,Stripe Checkout会自动生成选择器,供顾客挑选所需订阅方案。

解决方案

错误原因是Stripe Checkout不允许在line_items中同时添加多个订阅价格,订阅模式下提供多选项需用prices参数替代line_items,同时指定mode: 'subscription'。修改后代码如下:

const checkoutSessionRef = collection(
  firestore,
  `users/${uid}/checkout_sessions`,
);
const docData = {
  success_url: url,
  cancel_url: url,
  mode: 'subscription', // 必须明确指定订阅模式
  prices: [montlyPriceId, yearlyPriceId], // 传入同一产品下的多个订阅价格ID
};

await addDoc(checkoutSessionRef, docData);

关键注意点

  • prices参数仅在mode: 'subscription'时生效,且所有价格必须属于同一个Stripe产品(你的月付、年付价格已符合要求)。
  • 此方式创建的Checkout Session会让用户二选一订阅方案,而非同时购买两个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:40:10