Stripe Checkout Session创建是否支持直接传入订单总价
Stripe Checkout Session 总价配置问题解答
stripe.checkout.session.create 接口不存在可直接传入订单总价的独立配置字段。Stripe Checkout的订单总金额由行项目明细、优惠折扣规则自动计算汇总,不支持跳过明细校验直接传入自定义总价。
针对你提到的「商品单价保持固定、仅在订单总价层面抵扣折扣」的业务场景,可通过以下两种官方支持的方案实现,不需要修改原有商品的单价配置:
- 方案1:使用接口原生折扣配置项
保持line_items内原有商品的unit_amount为固定单价不变,创建Session时通过discounts字段传入提前创建好的折扣券(支持固定金额抵扣、比例抵扣两种规则),Stripe会自动在总价层面计算抵扣金额,结算页会单独展示折扣扣减项,原商品单价仍按你配置的固定值展示。如果需要支持用户手动输入促销码,不需要提前绑定折扣券,直接将allow_promotion_codes设为true即可。
核心配置示例:const session = await stripe.checkout.sessions.create({ line_items: [ { price_data: { currency: "usd", unit_amount: 500, // 保持原商品固定单价,无需修改 product_data: { name: "name of the product", }, }, quantity: 1, }, ], mode: "payment", success_url: "http://example.com/success", cancel_url: "http://example.com/", // 总价层面折扣配置 discounts: [ { coupon: "你提前创建的折扣券ID" } ], // 开启用户自输促销码时注释上面的discounts,打开下面配置 // allow_promotion_codes: true, }); - 方案2:添加负向折扣行项目
如果你的折扣规则是动态计算的,无法提前创建固定折扣券,可以在line_items中新增一条折扣类的自定义行,将该行的unit_amount设为负数的抵扣金额即可。注意Stripe要求负向行的总抵扣额不能超过正向商品的总金额,这种方式同样不会改动原有商品的单价配置,结算页会单独列示折扣行,最终汇总金额就是你需要的实付总价。
核心配置片段示例:line_items: [ { price_data: { currency: "usd", unit_amount: 500, // 原商品固定单价,无需修改 product_data: { name: "name of the product", }, }, quantity: 1, }, // 新增折扣抵扣行 { price_data: { currency: "usd", unit_amount: -100, // 对应抵扣1美元,按实际折扣金额传负值即可 product_data: { name: "订单专属折扣", }, }, quantity: 1, } ]
注意:不要通过调整商品单价、凑算数量的方式硬匹配目标总价,会导致订单明细和实际商品定价不一致,后续对账、退款、交易争议处理都会出现数据异常。
内容的提问来源于stack exchange,提问作者Tyler Momoh
相关产品推荐
相关产品推荐

