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
相关产品推荐
相关产品推荐

