Files
soul-yongping/开发文档/8、部署/佣金问题-快速诊断和修复.md

5.0 KiB
Raw Blame History

佣金计算问题 - 快速诊断和修复

🚨 问题描述

用户反馈:"推广者应该获取支付金额的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:

-- 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元 → 计算错误


请告诉我上述三个问题的实际情况,我会立即定位并修复!