Stripe webhook返回line_item的price ID与后台不一致、无法获取nickname问题咨询
问题原因
你遇到的Price ID不一致、nickname为空的核心原因是:你在创建Stripe Checkout Session时使用了price_data动态生成临时价格,而非直接传入后台提前创建好的固定Price ID。
Stripe会为每个price_data生成一次性的 ad-hoc 临时Price对象:
- 该Price仅关联当前Checkout Session,每次生成的ID都不固定
- 临时Price默认
active为false,不会继承你后台提前创建的Price的nickname、metadata等配置 - 关联的Product也是自动生成的临时对象,和你后台创建的原始Product没有关联
解决方法
推荐优先使用第一种方案,兼容性最高:
- 方案1:创建Checkout Session时直接传入后台已创建的固定Price ID
修改你生成Checkout Session的代码,line_items配置中去掉price_data参数,替换为price: '你后台对应尺寸的Price ID'(比如示例里的price_1JxC8kFE4oPSz5YOc391IZ9I)。无需修改现有Webhook逻辑,后续在邮件模板中直接取值即可:<% @order.line_items.data.each do |line| %> <p>商品名称:<%= line.description %></p> <p>商品尺寸:<%= line.price.nickname %></p> <p>购买数量:<%= line.quantity %></p> <% end %> - 方案2:如果业务必须使用动态价格无法提前创建固定Price
在创建Checkout Session的price_data或line_item的metadata中主动写入尺寸信息,示例配置:
后续在邮件模板中从metadata取值即可:line_items: [ { price_data: { currency: 'eur', product_data: {name: 'Soleil Levant'}, unit_amount: 4000, metadata: {size: 'S'} # 主动写入尺寸 }, quantity: 1 } ]<p>商品尺寸:<%= line.price.metadata['size'] %></p>
内容的提问来源于stack exchange,提问作者JoCoz
相关产品推荐
相关产品推荐

