佣金比例与二级分销
佣金比例与二级分销
本文讲清各种比例的含义、什么时候触发、上级的"间推"佣金怎么计算。
四种比例
每个分销商有 4 个比例字段,存在 mod_reseller_admins:
| 字段 | 触发场景 | 计算谁的订单 |
|---|---|---|
new_order_rate | 客户首笔已付发票 | 该分销商自己的客户 |
renewal_rate | 后续所有已付发票(续费) | 该分销商自己的客户 |
indirect_new_order_rate | 客户首笔已付发票 | 该分销商 下级 的客户 |
indirect_renewal_rate | 续费已付发票 | 该分销商 下级 的客户 |
比例按发票 金额总额 计算(含税,发票全额)。所有比例保留 2 位小数,范围 0–100%。
二级分销举例
设定: - 分销商 A(上级)—— new_order_rate=5, renewal_rate=3, indirect_new_order_rate=2, indirect_renewal_rate=1 - 分销商 B(A 的下级)—— new_order_rate=8, renewal_rate=5, 间推比例 0/0
A 的客户付了 100 元首单: - A 拿:100 × 5% = 5 元(level=1 直推) - B 拿:无(B 不是 A 的上级)
B 的客户付了 100 元首单: - B 拿:100 × 8% = 8 元(level=1 直推) - A 拿:100 × 2% = 2 元(level=2 间推,用的是 A 的 indirect_new_order_rate)
注意:间推比例取自 上级 的记录,不是下级的。所以 A 决定自己能从 B 出单里拿多少。
佣金什么时候记录
WHMCS 的 InvoicePaid 钩子在每张已付发票时触发。钩子逻辑: 1. 查发票客户被分配给哪个分销商。 2. 找到的话,按 new_order_rate 或 renewal_rate 计算直推佣金(level=1)。 3. 若该分销商有上级,按上级的 indirect_*_rate 计算间推佣金(level=2)。 4. 插入 mod_reseller_commissions,状态 pending,幂等由 (invoice_id, admin_id, level) UNIQUE 键保证。
UNIQUE 键意味着同一张发票重复触发 InvoicePaid 也不会产生重复佣金。
直推佣金取决于客户分配
只有当付款发票的客户 已分配给分销商(mod_reseller_customers.admin_id IS NOT NULL)时才会生成佣金记录。客户在资源池里(admin_id 为空)时即使有付款也不会产生佣金。
要追溯补佣金:让分销商从客户池认领,或者通过管理员客户池视图分配。
修改比例后的影响
修改比例只影响 未来 的佣金计算。佣金表里已有的记录不会重算。需要补差的话最简单的办法是在 佣金 标签直接手动改单行金额。
防环保护
上级下拉控制: - 分销商不能选自己。 - 分销商不能选已经是自己下级的人(防止循环)。
直接 POST 绕过 UI 也会被服务端拒绝并记一条审计日志。