Magento 2 输入优惠券后提示无效,通常不是代码故障,而是购物车价格规则的某个范围或条件没有满足。排查时应使用具体购物车复现,不要只看规则名称和优惠码。

规则是否真正可用

  • 状态为启用。
  • 当前日期位于生效和结束日期之间。
  • 选择了当前网站。
  • 包含当前客户组;游客属于 NOT LOGGED IN。
  • Coupon 选项与实际使用方式一致。
  • 优惠码没有多余空格,大小写按当前系统行为测试。

检查使用次数

规则可能设置每张优惠券使用次数、每位客户使用次数和规则总次数。订单取消是否返还次数取决于业务流程和扩展实现,不能假设取消后一定立即恢复。

可在后台查看优惠券报告或规则数据。不要直接修改计数表来“恢复”优惠券,否则可能造成审计和并发问题。

条件没有匹配

常见条件包括小计、商品属性、分类、SKU、配送国家和付款方式。需要注意:

  • 商品属于子分类不一定自动满足父分类条件。
  • 可配置商品条件可能匹配父商品或子商品,取决于属性位置。
  • 小计可能是折扣前、折扣后、含税或不含税口径。
  • 条件组合中的 ALL 与 ANY 会改变匹配逻辑。

规则优先级和停止处理

更高优先级的规则如果启用了“停止后续规则处理”,后面的优惠券可能不会执行。给相关规则设置清晰的 Priority,并测试多个规则同时存在的情况。

前端提示不等于后端没有应用

自定义主题或结账扩展可能没有刷新 totals,导致页面仍显示原金额。打开浏览器 Network,检查 coupon API 和 totals 响应;最终以后端 totals segment 为准。

缓存处理

bin/magento cache:clean config full_page

保存规则后如仍不生效,先重新加载一个全新的购物车,避免旧 Session 中保存的地址、客户组或报价状态影响测试。

验证清单

  1. 创建低金额和达标金额两个购物车。
  2. 分别测试游客与目标客户组。
  3. 测试规则单独启用和与其他规则共同启用。
  4. 检查购物车、结账页、订单和邮件中的折扣金额。
  5. 达到使用次数后确认优惠券按预期失效。