Invertase Stripe支付扩展计量定价问题:未设置quantity却收到需移除该字段的错误提示
Invertase Stripe支付扩展计量定价问题:未设置quantity却收到需移除该字段的错误提示
我之前也踩过这个一模一样的坑!你遇到的问题其实是Invertase Stripe扩展的一个隐性默认逻辑在搞鬼——哪怕你代码里半字没提quantity,当你用单个price字段创建订阅型结账会话时,扩展会自动给你往Stripe Checkout Session的line_items里塞一个默认的quantity: 1,而计量(metered)定价的订阅完全不允许存在这个字段,这就直接触发了Stripe的报错。
先看你的代码,你在创建checkout_sessions文档时只传了price、mode这些参数,确实没碰quantity,但架不住扩展好心办坏事自动给你加了。那怎么解决呢?
核心解决方案:用line_items数组替代单个price字段
你需要把原来直接传price的写法,改成显式传入line_items数组,并且在数组的对象里只写price,完全不要加quantity。这样扩展就会严格按照你提供的参数生成Stripe Checkout Session,不会自作主张加多余的字段。
修改后的代码片段如下:
// 1️⃣ Create the Checkout-Session request doc const sessionRef = await addDoc(collection(db, 'stripe_customers', user.uid, 'checkout_sessions'), { // 把单个price字段替换成line_items数组 line_items: [ { price: PRICE_ID } ], mode: 'subscription', success_url: window.location.href, cancel_url: window.location.href, metadata: { storeId: user.uid }, });
额外需要确认的几个点
- 确保你的价格确实是计量类型:去Stripe Dashboard里检查
PRICE_ID对应的价格,确认它的「Usage type」是「Metered」,如果是「Licensed」的话,这个报错逻辑就反过来了,必须传quantity。 - 更新扩展到最新版本:旧版本的Invertase Stripe扩展可能存在这个自动填充quantity的bug,升级到最新版能避免很多莫名其妙的问题。
- 别瞎试
quantity: null或0:Stripe对计量定价的line item要求是「完全不存在quantity字段」,不管你给的是null还是0,只要这个字段存在就会报错,所以千万不要画蛇添足。
排查小技巧
如果修改后还是有问题,可以去Firebase控制台做两件事:
- 查看
stripe_customers/{uid}/checkout_sessions下新建的文档,看看有没有被扩展偷偷加上quantity字段; - 打开扩展的日志页面,查看扩展处理这个结账会话文档时的具体参数,确认有没有把quantity塞到line_items里。
内容来源于stack exchange
相关产品推荐
相关产品推荐

