优惠券与活动价
优惠券
后台 优惠券与礼品卡 → 优惠券 → 新建。
字段说明
| 字段 | 说明 |
|---|---|
| 优惠码 | 用户结账输入的字符串,可手填或自动生成,大小写不敏感 |
| 类型 | fixed(立减 ¥N)/ percent(打 N 折) |
| 面额 / 折扣 | fixed=20 → 减 20 元;percent=80 → 打 8 折 |
| 最小订单金额 | 满 ¥N 才可用 |
| 适用商品 | 留空 = 全场;勾选指定商品 = 仅这些可用 |
| 适用会员等级 | 留空 = 所有;否则限 ≥ X 级 |
| 总发行量 | 全平台总共能用 N 次 |
| 单用户上限 | 同一用户最多用 N 次 |
| 有效期 | 起止时间 |
用户使用
结账页输入优惠码 → 实时计算折后价 → 提交订单时一并写入 coupon_usages 表(防重复)。
订单退款时,用过的优惠码不归还使用次数(用户已经"消费"了一次机会)。
活动价(基于会员等级的折扣)
跟优惠券不同——优惠券是输码触发,会员价是自动按等级给折。
后台 商品管理 → SKU 编辑 → 会员价:
| 等级 | 售价 |
|---|---|
| LV0(默认) | ¥199 |
| LV1 | ¥179 |
| LV2 | ¥159 |
| LV3 | ¥99 |
下单时按用户当前 member_level_id 自动取对应价。不显示在划线价旁,直接当售价。
会员价 + 优惠券可叠加。先按会员价取基价,再 apply 优惠券。如不想叠加,优惠券里设"适用商品"限定某些 SKU。
排查
| 现象 | 原因 |
|---|---|
| 输码提示"无效" | 拼写;过期;超过单用户上限;不符合商品/会员限制 |
| 订单退款后用户说"我码没还" | 这是预期行为(防刷) |
| 会员价不生效 | 用户 member_level_id 没刷新(后台手动改完用户级别后让他登出再登) |
SQL 速查
sql
-- 看某优惠码已用了几次
SELECT count(*) FROM coupon_usages WHERE coupon_id = (SELECT id FROM coupons WHERE code = 'SAVE20');
-- 某用户用了哪些券
SELECT c.code, cu.created_at, cu.order_no
FROM coupon_usages cu JOIN coupons c ON c.id = cu.coupon_id
WHERE cu.user_id = 42;