Ai_GirlFriend/开发/2026年2月3日/邀请码问题诊断.md
2026-02-03 18:00:47 +08:00

6.9 KiB
Raw Blame History

邀请码功能问题诊断

快速诊断步骤

第 1 步:检查数据库字段

mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql

预期结果:应该看到 4 个字段

  • invite_code - VARCHAR(10)
  • invited_by - VARCHAR(10)
  • invite_count - INT(11)
  • invite_reward_total - DECIMAL(10,2)

如果字段不完整:执行修复脚本

mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql

第 2 步:测试后端 API

2.1 测试获取邀请信息

# 替换 YOUR_TOKEN 为实际的用户 token
curl -X GET "http://localhost:30101/config/invite/info" \
  -H "token: YOUR_TOKEN"

预期响应

{
  "code": 1,
  "data": {
    "invite_code": "ABC123",
    "invite_count": 0,
    "invite_reward_total": 0.0,
    "invite_url": "https://your-domain.com/register?invite=ABC123"
  }
}

如果返回 401 错误token 无效或过期 如果返回 500 错误:检查 Python 服务日志

2.2 测试使用邀请码

# 替换 YOUR_TOKEN 和 INVITE_CODE
curl -X POST "http://localhost:30101/config/invite/apply" \
  -H "token: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"invite_code": "ABC123"}'

预期响应

{
  "code": 1,
  "data": {
    "message": "邀请码使用成功您获得了5.0金币",
    "reward": 5.0,
    "balance": 5.0
  }
}

第 3 步:检查 Python 服务日志

# Windows
# 查看控制台输出

# Linux
sudo journalctl -u aigirlfriend-python -n 50 -f
# 或
sudo tail -f /var/log/aigirlfriend-python.log

关键日志

  • 认证调试 - 查看 token 是否正确解析
  • 用户中心调试 - 查看是否成功获取用户信息
  • 任何 ERRORException 信息

第 4 步:检查数据库数据

mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql

这会显示:

  1. 最近 10 个用户的邀请码信息
  2. 有邀请码的用户列表
  3. 使用了邀请码的用户列表
  4. 邀请相关的金币日志
  5. 邀请数据统计

常见问题排查

问题 1字段类型错误最常见

错误表现:邀请码功能不工作,用户没有获得金币

原因:数据库字段类型不正确

  • invited_by 应该是 varchar(10) 但实际是 int
  • invite_reward_total 应该是 decimal(10,2) 但实际是 int

检查方法

mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql

预期结果

字段名                |类型           |
-------------------+-------------+
invite_code        |varchar(10)  |  ✅
invited_by         |varchar(10)  |  ✅ 应该是这个
invite_count       |int(11)      |  ✅
invite_reward_total|decimal(10,2)|  ✅ 应该是这个

如果类型错误

mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_field_types.sql

问题 2字段已存在错误

错误信息Duplicate column name 'invite_code'

原因:字段已经存在

解决:使用智能修复脚本

mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql

问题 2用户没有获得金币

可能原因

A. 邀请码不存在

-- 检查邀请码是否存在
SELECT id, username, invite_code 
FROM nf_user 
WHERE invite_code = 'ABC123';

B. 用户已使用过邀请码

-- 检查用户是否已使用过邀请码
SELECT id, username, invited_by 
FROM nf_user 
WHERE id = 用户ID;

C. 使用了自己的邀请码

  • 检查邀请码是否是用户自己的

D. API 调用失败

  • 检查前端是否正确调用了 /config/invite/apply 接口
  • 检查 token 是否正确传递
  • 查看浏览器控制台的网络请求

问题 3前端没有调用邀请码接口

检查点

  1. 登录页面 (xuniYou/pages/login/index.vue)

    • 第 412 行:检查是否有邀请码判断
    • 第 434 行:检查 applyInviteCode() 方法
  2. 浏览器控制台

    • 打开开发者工具 → Network 标签
    • 登录时查看是否有 /config/invite/apply 请求
    • 查看请求参数和响应
  3. 手动测试

    // 在浏览器控制台执行
    uni.request({
        url: 'http://localhost:30101/config/invite/apply',
        method: 'POST',
        header: {
            'Content-Type': 'application/json',
            'token': uni.getStorageSync('token')
        },
        data: {
            invite_code: 'ABC123'
        },
        success: (res) => {
            console.log('邀请码响应:', res);
        }
    });
    

问题 4Python 服务认证失败

检查 token 传递

前端应该使用以下任一方式传递 token

  • Authorization: Bearer {token}
  • X-Token: {token}
  • token: {token} (header)
  • token: {token} (cookie)

当前前端使用token: {token} (header)

验证

# 查看 Python 日志中的认证调试信息
# 应该看到:
# 认证调试 - token_header: YOUR_TOKEN
# 认证调试 - 提取的 token: YOUR_TOKEN

完整测试流程

1. 准备两个测试账号

  • 用户 A邀请人18800000001
  • 用户 B被邀请人18800000002

2. 用户 A 获取邀请码

  1. 登录用户 A
  2. 进入"我的" → "邀请好友"
  3. 记录邀请码例如ABC123
  4. 记录当前金币余额

3. 用户 B 使用邀请码

  1. 退出登录
  2. 使用用户 B 登录
  3. 在登录页面输入邀请码ABC123
  4. 登录成功

4. 验证结果

-- 查看用户 A 的数据
SELECT id, username, invite_code, invite_count, invite_reward_total, money 
FROM nf_user 
WHERE username = '18800000001';

-- 查看用户 B 的数据
SELECT id, username, invited_by, money 
FROM nf_user 
WHERE username = '18800000002';

-- 查看金币日志
SELECT 
    l.user_id,
    u.username,
    l.money,
    l.before,
    l.after,
    l.memo,
    FROM_UNIXTIME(l.createtime) AS time
FROM nf_user_money_log l
LEFT JOIN nf_user u ON l.user_id = u.id
WHERE l.memo LIKE '%邀请%'
ORDER BY l.createtime DESC
LIMIT 10;

预期结果

  • 用户 Ainvite_count +1invite_reward_total +10money +10
  • 用户 Binvited_by = 'ABC123'money +5
  • 金币日志中有两条记录

如果问题仍未解决

收集以下信息:

  1. 数据库字段检查结果

    mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql
    
  2. Python 服务日志(最近 50 行)

    # 复制日志内容
    
  3. 浏览器控制台错误

    • Network 标签中的请求详情
    • Console 标签中的错误信息
  4. 测试 API 的响应

    curl -X GET "http://localhost:30101/config/invite/info" \
      -H "token: YOUR_TOKEN"
    
  5. 数据库测试结果

    mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
    

联系支持

提供以上信息可以帮助快速定位问题。