5.0 KiB
5.0 KiB
佣金计算问题 - 快速诊断和修复
🚨 问题描述
用户反馈:"推广者应该获取支付金额的90%,但却是10%"
🔍 快速诊断
方法1: 检查管理后台配置
- 登录管理后台:
https://soul.quwanzhi.com/admin - 进入「推广设置」页面:
/admin/referral-settings - 查看「分销比例」输入框中的数值
如果显示 10 → 配置错误,应该改为 90
如果显示 90 → 配置正确,问题在其他地方
方法2: 检查实际佣金
- 找一个推荐关系的订单
- 查看推荐人获得的佣金
示例:
- 用户B购买1元商品(无折扣)
- 推荐人A应得:0.90元(90%)
- 如果实际只得:0.10元 → 说明比例算反了
方法3: 检查小程序显示
打开小程序「分销中心」,查看推广规则:
应该显示:
好友成功付款后,你获得 90% 收益
如果显示:
好友成功付款后,你获得 10% 收益
→ 说明后端返回的 shareRate 值错误
🔧 修复方案
修复1: 如果管理后台配置值错误
步骤:
- 进入管理后台
/admin/referral-settings - 将「分销比例」改为 90
- 点击「保存配置」
- 刷新小程序验证
修复2: 如果数据库配置值错误
手动修复SQL:
-- 1. 查看当前配置
SELECT config_value FROM system_config WHERE config_key = 'referral_config';
-- 2. 如果 distributorShare 不是 90,手动更新
UPDATE system_config
SET config_value = JSON_SET(
config_value,
'$.distributorShare',
90
)
WHERE config_key = 'referral_config';
-- 3. 验证修改
SELECT config_value FROM system_config WHERE config_key = 'referral_config';
修复3: 如果计算公式错误
检查文件: app/api/miniprogram/pay/notify/route.ts
第395行,当前代码应该是:
const commission = Math.round(amount * distributorShare * 100) / 100
如果错误写成了:
// ❌ 错误1:算反了
const commission = Math.round(amount * (1 - distributorShare) * 100) / 100
// ❌ 错误2:没有先除100
const distributorShare = config.distributorShare // 90(没除100)
const commission = amount * distributorShare / 100 // 1 * 90 / 100 = 0.9(看似对,但后续会错)
🧪 验证步骤
验证1: 手动计算
假设配置 distributorShare = 90:
// 读取配置
const configValue = 90
// 转换为小数
const distributorShare = configValue / 100 // = 0.9
// 计算佣金(购买1元)
const commission = 1.00 * 0.9 // = 0.90元
// 返回给小程序
const shareRate = distributorShare * 100 // = 90
预期:
- 购买1元 → 推荐人得 0.90元
- 小程序显示:90% 返利
验证2: 查看实际订单
SQL查询:
SELECT
o.order_sn,
o.amount as 订单金额,
rb.total_commission as 累计佣金,
rb.purchase_count as 购买次数,
o.amount * 0.9 as 预期佣金90percent,
o.amount * 0.1 as 如果是10percent
FROM orders o
JOIN referral_bindings rb ON o.user_id = rb.referee_id
WHERE o.status = 'paid'
AND rb.purchase_count > 0
ORDER BY o.pay_time DESC
LIMIT 5;
对比:
- 如果
total_commission ≈ 预期佣金90percent→ 计算正确 - 如果
total_commission ≈ 如果是10percent→ 计算错误(算反了)
🔍 代码审查
关键代码1: 读取配置
文件: app/api/miniprogram/pay/notify/route.ts 第357-360行
const config = await getConfig('referral_config')
if (config?.distributorShare) {
distributorShare = config.distributorShare / 100 // ✅ 应该是这样
}
如果错误写成:
distributorShare = config.distributorShare // ❌ 没除100
关键代码2: 计算佣金
文件: app/api/miniprogram/pay/notify/route.ts 第395行
const commission = Math.round(amount * distributorShare * 100) / 100
// ✅ 正确:1 * 0.9 = 0.9
如果错误写成:
const commission = Math.round(amount * (1 - distributorShare) * 100) / 100
// ❌ 错误:1 * (1 - 0.9) = 0.1(算反了)
关键代码3: 返回比例
文件: app/api/referral/data/route.ts 第198行
shareRate: Math.round(distributorShare * 100)
// ✅ 正确:0.9 * 100 = 90
🚀 立即检查
请你帮我确认一下:
问题1: 管理后台的配置值
进入 https://soul.quwanzhi.com/admin/referral-settings,看看「分销比例」输入框中显示的是:
- 90(正确)
- 10(错误)
- 0.9(错误)
问题2: 小程序显示的比例
打开小程序「分销中心」,查看推广规则显示的是:
- "你获得 90% 收益"(正确)
- "你获得 10% 收益"(错误)
问题3: 实际佣金金额
如果有测试订单,查看:
- 购买金额:1.00元
- 推荐人获得:_____ 元
如果是 0.90元 → 计算正确
如果是 0.10元 → 计算错误
请告诉我上述三个问题的实际情况,我会立即定位并修复!