前台提示“优惠券已应用”,输入框也保留 coupon code,但订单汇总没有折扣。这里要区分“代码格式通过”与“规则真正作用于商品”。Magento 会按网站、客户组、时间、条件和 Action 商品逐层过滤。
- 记录 quote_id、store_id、客户组和 coupon code;
- 查看规则有效时间和 action 类型;
- 确认 Conditions 控制购物车,Actions 控制哪些商品获得折扣;
- 重新 collect totals,比较前后数据。
SELECT entity_id, store_id, customer_group_id, coupon_code,
subtotal, discount_amount, grand_total
FROM quote WHERE entity_id=456;
SELECT r.rule_id, r.name, r.is_active, r.from_date, r.to_date,
r.simple_action, r.discount_amount, r.stop_rules_processing
FROM salesrule r
JOIN salesrule_coupon c ON c.rule_id=r.rule_id
WHERE c.code='SAVE10';
网站和客户组要查关系表
SELECT * FROM salesrule_website WHERE rule_id=12;
SELECT * FROM salesrule_customer_group WHERE rule_id=12;
SELECT website_id, code FROM store_website;
SELECT customer_group_id, customer_group_code FROM customer_group;
游客使用 NOT LOGGED IN 组;登录前后 group 改变,旧 Quote 可能需要重新收集 totals。多网站环境中,优惠券属于规则覆盖的网站,不是 Store View 名称。
用商品级数据找出被 Action 排除的 SKU
SELECT item_id, sku, product_type, parent_item_id, qty,
row_total, discount_amount, applied_rule_ids
FROM quote_item
WHERE quote_id=456
ORDER BY item_id;
applied_rule_ids 没有目标 rule_id,说明规则未命中;有 rule_id 但折扣为零,继续查 action 类型、最大折扣、step quantity 和固定金额。可配置商品要明确匹配 parent 还是 child。
SELECT address_id, address_type, country_id, region_id, postcode,
subtotal, discount_amount, grand_total
FROM quote_address WHERE quote_id=456;
包含配送国家、邮编或运费方式的规则,在地址未完整前可能先显示代码已接受,随后才被排除。修复后测试游客、登录客户、临界日期和最低金额上下两组购物车。

