6.9 KiB
6.9 KiB
邀请码功能问题诊断
快速诊断步骤
第 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 是否正确解析用户中心调试- 查看是否成功获取用户信息- 任何
ERROR或Exception信息
第 4 步:检查数据库数据
mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
这会显示:
- 最近 10 个用户的邀请码信息
- 有邀请码的用户列表
- 使用了邀请码的用户列表
- 邀请相关的金币日志
- 邀请数据统计
常见问题排查
问题 1:字段类型错误(最常见!)
错误表现:邀请码功能不工作,用户没有获得金币
原因:数据库字段类型不正确
invited_by应该是varchar(10)但实际是intinvite_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:前端没有调用邀请码接口
检查点:
-
登录页面 (
xuniYou/pages/login/index.vue)- 第 412 行:检查是否有邀请码判断
- 第 434 行:检查
applyInviteCode()方法
-
浏览器控制台
- 打开开发者工具 → Network 标签
- 登录时查看是否有
/config/invite/apply请求 - 查看请求参数和响应
-
手动测试
// 在浏览器控制台执行 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); } });
问题 4:Python 服务认证失败
检查 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 获取邀请码
- 登录用户 A
- 进入"我的" → "邀请好友"
- 记录邀请码(例如:ABC123)
- 记录当前金币余额
3. 用户 B 使用邀请码
- 退出登录
- 使用用户 B 登录
- 在登录页面输入邀请码:ABC123
- 登录成功
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;
预期结果:
- 用户 A:
invite_count+1,invite_reward_total+10,money+10 - 用户 B:
invited_by= 'ABC123',money+5 - 金币日志中有两条记录
如果问题仍未解决
收集以下信息:
-
数据库字段检查结果
mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql -
Python 服务日志(最近 50 行)
# 复制日志内容 -
浏览器控制台错误
- Network 标签中的请求详情
- Console 标签中的错误信息
-
测试 API 的响应
curl -X GET "http://localhost:30101/config/invite/info" \ -H "token: YOUR_TOKEN" -
数据库测试结果
mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
联系支持
提供以上信息可以帮助快速定位问题。