普通商品折扣、订单折扣与免邮要一起生效,先让每条折扣允许与另外两条的类别组合,再确认购物车分别满足三条规则。计算时先减商品优惠,再对更新后的商品小计计算订单优惠,最后处理运费。仅把三个码输入结账,不能保证它们会一起应用。Shopify 折扣组合规则
本文解决 Online Store 一次性购买中的三类原生折扣计算与冲突定位。官方资料核验日期为 2026-10-04。P20、O10、SHIPFREE 和所有金额都是假设夹具,尚未在店铺执行;下列结果是带前提的算术预期。
先确认店铺能提供这组三类组合
本例包含“商品折扣 + 订单折扣”。Shopify 对它要求店铺不使用 checkout.liquid 自定义或功能,并且不使用 Licensify;官方排查说明同时要求使用 Checkout Extensibility。符合条件却没有组合选项时,向 Shopify 支持核查店铺资格,不按本例承诺三条同时可用。当前资格与选项缺失排查
本例只有一条普通商品折扣,不涉及同一商品叠加多条商品折扣或买赠。前者属于 Plus 的额外配置范围,后者有独立限制;也不要把在线店铺样本直接复制到外部平台 checkout。组合范围和限制
用一个固定购物车建立三条规则
在获准的测试环境中使用一个美国目标市场、USD 和有效时段:普通一次性商品 A 为 100 USD,商品 B 为 50 USD,各一件;目标地址有一项 8 USD 的可用配送费率。暂不设置购买门槛,也不加入其他优惠。这样差异先集中在类别与计算次序。
| 代码 | 后台折扣类型与输入 | 折扣类别 |
|---|---|---|
| P20 | Amount off products;Fixed amount = 20 USD;Specific products = A | 商品 |
| O10 | Amount off orders;Percentage = 10 | 订单 |
| SHIPFREE | Free shipping;指定本例目标国家;不设置运费金额排除条件 | 运费 |
创建 P20 与 O10 的入口为 Discounts → Create discount → 对应 Amount off 类型 → Discount code,再填写 Value。P20 的商品范围仅为 A;本例 A 只有一件,因此不把多件商品的减额方式混入算例。两条都不设置最低购买要求,Eligibility 使用本例的目标市场,并记录实际起止时间。字段依据见 金额/比例折扣创建说明。
SHIPFREE 从 Discounts → Create discount → Free shipping → Discount code 创建,在 Countries 指定实际测试国家。运费金额排除条件是对配送费率金额的限制,不是订单消费门槛;本例不启用它,也不设最低购买要求。填写目标市场资格与相同有效窗口后保存。免邮字段与限制
把组合许可写成双方都允许的关系
在 Discounts 分别打开三条折扣,按下表设置 Combinations,保存后重新打开核对。不要只改 O10,就认为 P20 也已允许它。
| 当前记录 | 应允许的其他类别 | 为什么 |
|---|---|---|
| P20,商品折扣 | Order discounts、Shipping discounts | 接受 O10 和 SHIPFREE |
| O10,订单折扣 | Product discounts、Shipping discounts | 接受 P20 和 SHIPFREE |
| SHIPFREE,运费折扣 | Product discounts、Order discounts | 接受 P20 和 O10 |
这张表不需要开启商品+商品、订单+订单或运费+运费。每条记录必须允许与另一条的类别组合;现有折扣的编辑入口是 Discounts → 该折扣 → Combinations → Save。组合设置与编辑步骤
对于负责集成的技术人员,对应读取对象中的类别布尔字段为 productDiscounts、orderDiscounts、shippingDiscounts。它们描述可与哪些类别组合,不能单独证明商品资格、门槛或店铺资格都通过。本文未执行 API。2026-10 官方字段定义
算清商品小计,再把运费放到另一行
在前述假设条件全部满足时,计算顺序如下。商品优惠先应用、订单优惠基于其后的小计、运费优惠最后处理,是 Shopify 的官方顺序;金额是本文自己的夹具计算。计算顺序
- 商品原小计:
100 + 50 = 150 USD。 - P20 只减 A:
(100 − 20) + 50 = 130 USD。 - O10 对 130 计算 10%:
130 × 10% = 13 USD,商品折后小计为117 USD。 - SHIPFREE 把本例符合条件的 8 USD 运费降为零。商品折后小计加运费为
117 USD。
这里尚未计税或其他费用,117 USD 不是任何真实订单的最终支付额。若先对原小计打九折再减 20,得到 150 × 90% − 20 = 115,就用了错误次序;不要为凑成 115 去改后台折扣。
使用同一购物车,在付款前分别验证单码、两码和三码。Shopify 允许在结账输入折扣并查看结果后停止付款流程。付款前验证方式
| 本次仅输入这些代码 | 商品折后小计 | 运费 | 定位用途 |
|---|---|---|---|
| P20 | 130 USD | 8 USD | 验证商品对象与固定减额 |
| O10 | 135 USD | 8 USD | 验证订单折扣自身资格 |
| SHIPFREE | 150 USD | 0 USD | 验证国家、地址与配送费率 |
| P20 + O10 | 117 USD | 8 USD | 验证商品/订单双方许可与计算基数 |
| P20 + SHIPFREE | 130 USD | 0 USD | 验证商品/运费双方许可 |
| O10 + SHIPFREE | 135 USD | 0 USD | 验证订单/运费双方许可 |
| P20 + O10 + SHIPFREE | 117 USD | 0 USD | 验证完整组合 |
每行开始前清除上一轮代码并重新确认购物车,记录实际命中的自动优惠;否则无法知道差异由哪条规则引起。单码失败时先修该码,单码均通过而某一对失败时,才集中检查那两条的组合关系。
组合失败时,先区分许可失败与资格失败
| 看到的现象 | 首查位置 | 处理路径 |
|---|---|---|
| P20 单独也不生效 | P20 的 Applies to、商品/变体与有效期 | 用 A 一件的最小购物车重试,排除选错商品 |
| 单码都可用,P20 + O10 失败 | 两条的 Combinations 与店铺组合资格 | 按双方类别核对;选项缺失时找 Shopify 支持 |
| 输入代码后出现另一优惠或组合错误 | Discounts 中会命中该购物车的自动优惠 | 记录额外优惠及类别,在获准测试环境隔离它后复测 |
| 只有免邮失败 | SHIPFREE 的 Countries、运费金额排除条件及最低要求 | 使用正确地址与可用配送方式,分别核对费率金额和商品门槛 |
| 金额与预期差 2 USD | 商品/订单优惠的计算基数 | 对照 150 → 130 → 117 的顺序,勿把订单比例先算在 150 上 |
若多个优惠不能组合,Shopify 会选择对购物车更有利的优惠或组合;被替换的代码不一定是保存失败。组合报错还应检查会命中的自动优惠。涉及应用产生的折扣时,把实际类别和结果交给应用开发者核查支持情况,不在营业店随意卸载应用来猜原因。官方组合故障说明
给免邮加门槛后,必须重新验收
前面故意没有消费门槛。假设商家随后把 SHIPFREE 的最低购买金额设为 120 USD,仍允许 P20 与 O10 组合:本例折后商品金额只有 117 USD,不应因为原价 150 或加上 8 USD 运费达到 125 就判定免邮合格。假设配送费率仍为 8 USD,则商品小计加运费为 125 USD,税费仍另计。
免邮最低金额使用商品折后价格,税等其他费用不算入;因此“单独免邮通过,组合后免邮失败”可能是正常门槛结果,不是许可设置丢失。Shopify 免邮最低购买要求
订单折扣自己的最低金额使用另一组基数:商品折扣前,看所选购买类型的金额,排除买入的礼品卡;商品折扣后,看包括所有购买类型与买入礼品卡的购物车小计,两者都要满足。其他订单折扣不会降低用于判断这一门槛的小计。Amount off 的订单最低金额规则
本例只有普通一次性 A/B,若再假设把 O10 的门槛设为 140 USD,应同时检查 150 和 130:前者通过,后者不足,因此 O10 不应生效。不要用 O10 之后的 117 来判断 O10 自己的门槛,也不要把订单门槛套用成上面的免邮门槛。
把失败购物车交给能处理它的人
交接记录保留商品/变体与数量、市场/币种、地址所属国家、选中的配送费率、三条折扣类别与组合设置、额外自动优惠、验证时间、预期和实际各行金额。截图遮去个人信息;说明哪个单码或哪一对首次失败。
原生规则、资格或组合选项问题交 Shopify 支持;应用折扣问题同时附应用名称与版本给开发者。确认原因并修正一个变量后,用同一购物车重复失败步骤,再检查完整组合。算术符合预期只证明这组条件下的优惠计算;支付、税、退款和经营利润仍需各自的实际验收。