购物车页优惠码已生效,结账填写地址后折扣归零。先检查规则条件,而不是在前端强行把coupon_code写回Quote。
处理步骤
步骤1:保存应用优惠码前后的quote、quote_address和salesrule验证日志。记录customer_group_id、website_id、国家、地区、邮编、subtotal以及shipping_method。
步骤2:在Sales Rule中逐层检查Website、客户组、有效期、Uses、Coupon Uses以及Conditions。配送国家条件在地址未知时可能暂时通过,填写后才会被正确判定失败。
步骤3:若条件应当通过,检查自定义total collector或地址保存插件是否清空coupon_code、覆盖applied_rule_ids,或者错误地用billing address验证实体购物车。
步骤4:修正规则或插件后重新collect totals。不要只修改discount_amount,折扣必须由规则重新计算并同步到base金额和item分摊。
命令与数据检查
SELECT entity_id,coupon_code,customer_group_id,store_id,subtotal,grand_total,applied_rule_ids FROM quote WHERE entity_id=:quote_id;
SELECT address_type,country_id,region_id,postcode,shipping_method,subtotal,discount_amount FROM quote_address WHERE quote_id=:quote_id;
SELECT rule_id,name,is_active,from_date,to_date,conditions_serialized,actions_serialized FROM salesrule WHERE coupon_type<>1;上线前验证
测试允许/禁止国家、边界金额、访客/登录客户和切换配送方式;符合条件时优惠码保留,不符合时页面给出明确提示而非静默消失。
多币种规则通常以base金额判断,验证时同时记录subtotal与base_subtotal。

