购物车提示“优惠券代码已应用”,总价却完全没变化。这里的“成功”通常只表示系统找到了可用规则并把 code 写进 quote,不代表购物车里一定存在满足折扣 Action 的商品。
用一辆最简单的购物车复现
我会先清空购物车,只放一个确认应该参与活动的简单商品,并用无痕窗口登录正确客户组。复杂购物车里混着 bundle、赠品、虚拟商品和免折 SKU,很难看出是哪条条件排除了折扣。
后台逐项核对 Website、Customer Groups、起止日期、Uses per Customer 和 Coupon Uses。日期要按商店时区理解,不要拿服务器 UTC 直接判断。规则过期或次数用尽时通常不会正常应用,但自定义模块可能保留前端成功提示,所以仍要查。
Conditions和Actions不是一回事
Conditions 决定整辆购物车是否进入规则,Actions 下方的条件决定哪些行真正打折。最常见的是上面按分类判断通过,下面又把该分类排除了;或者配置“仅匹配以下条件的商品”,但用的是不可用于促销规则的属性。
检查商品在当前 store view 的真实属性值,不要只看 All Store Views。可配置商品还要确认条件落在父商品还是子商品,购物车里的实际 item 对应哪个 SKU。
优先级和Stop Further Rules会让后面的规则看似失效
临时停掉其他购物车规则,只留这一条测试。如果折扣出现,就按 sort order 逐个恢复,并检查前一条是否开启 Discard subsequent rules。多张优惠同时存在时,也要确认系统是否允许叠加。
代码层我会观察 quote 的 coupon_code、applied_rule_ids 以及各 item 的 discount_amount。coupon_code 有值而 applied_rule_ids 为空,说明规则校验没通过;规则 ID 已应用但金额为零,则继续看 Action 计算和商品行。
bin/magento cache:clean config full_page
bin/magento indexer:status
购物车规则本身不像目录价格规则那样只靠一次 reindex 就能解决。修复后要重新触发 collect totals,最好新建购物车验证,避免旧 quote 保存的金额干扰。最终至少测试游客、目标客户组、临界金额和被排除 SKU 四种情况,确认规则不是只在“刚好那辆购物车”里有效。

