# 佣金计算问题 - 快速诊断和修复 ## 🚨 问题描述 用户反馈:"推广者应该获取支付金额的90%,但却是10%" --- ## 🔍 快速诊断 ### 方法1: 检查管理后台配置 1. 登录管理后台:`https://soul.quwanzhi.com/admin` 2. 进入「推广设置」页面:`/admin/referral-settings` 3. 查看「分销比例」输入框中的数值 **如果显示 10** → 配置错误,应该改为 **90** **如果显示 90** → 配置正确,问题在其他地方 --- ### 方法2: 检查实际佣金 1. 找一个推荐关系的订单 2. 查看推荐人获得的佣金 **示例**: - 用户B购买1元商品(无折扣) - 推荐人A应得:0.90元(90%) - 如果实际只得:0.10元 → 说明比例算反了 --- ### 方法3: 检查小程序显示 打开小程序「分销中心」,查看推广规则: **应该显示**: ``` 好友成功付款后,你获得 90% 收益 ``` **如果显示**: ``` 好友成功付款后,你获得 10% 收益 ``` → 说明后端返回的 `shareRate` 值错误 --- ## 🔧 修复方案 ### 修复1: 如果管理后台配置值错误 **步骤**: 1. 进入管理后台 `/admin/referral-settings` 2. 将「分销比例」改为 **90** 3. 点击「保存配置」 4. 刷新小程序验证 --- ### 修复2: 如果数据库配置值错误 **手动修复SQL**: ```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行,当前代码应该是**: ```typescript const commission = Math.round(amount * distributorShare * 100) / 100 ``` **如果错误写成了**: ```typescript // ❌ 错误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`: ```javascript // 读取配置 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查询**: ```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行 ```typescript const config = await getConfig('referral_config') if (config?.distributorShare) { distributorShare = config.distributorShare / 100 // ✅ 应该是这样 } ``` **如果错误写成**: ```typescript distributorShare = config.distributorShare // ❌ 没除100 ``` --- ### 关键代码2: 计算佣金 **文件**: `app/api/miniprogram/pay/notify/route.ts` 第395行 ```typescript const commission = Math.round(amount * distributorShare * 100) / 100 // ✅ 正确:1 * 0.9 = 0.9 ``` **如果错误写成**: ```typescript const commission = Math.round(amount * (1 - distributorShare) * 100) / 100 // ❌ 错误:1 * (1 - 0.9) = 0.1(算反了) ``` --- ### 关键代码3: 返回比例 **文件**: `app/api/referral/data/route.ts` 第198行 ```typescript 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元** → 计算错误 --- **请告诉我上述三个问题的实际情况,我会立即定位并修复!**