在 OPCwiki 多用户 AI 平台中,邀请返佣系统的设计经历多次迭代。本文总结从零搭建到稳定运行的核心经验。
一、完整数据流
邀请人复制链接 https://wiki.opcgrow.org/?ref=54d59269 ↓ 好友打开 → Login.tsx 用 useSearchParams 提取 ref=54d59269 ↓ 存入 cookie: opc_ref=54d59269 (max-age=30天) ↓ 好友注册 → body.ref_code = 54d59269 ↓ 后端 auth.py → register 端点接收 Cookie + ref_code ↓ 写入 referred_by → 触发 process_referral_registration ↓ stats[ref_code].count += 1 (注册时触发统计) ↓ 好友充值 → payment.py 回调 → process_referral_reward ↓ 邀请人 balance += amount × 10% (充值回调触发奖励)
二、关键架构
2.1 邀请追踪
邀请链接通过 URL 参数传递 ?ref=CODE,前端用 useSearchParams 提取后存入 document.cookie(30 天有效)。注册时自动填入 body.ref_code,确保无论好友何时注册都能追踪到。
2.2 统计与奖励分离
统计触发(注册时):process_referral_registration(ref_code) —— 仅更新 count,不涉及金额。
奖励触发(充值到账时):process_referral_reward(payer_user_id, amount) —— 查邀请人 + 余额 +10% 奖励。
2.3 API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/user/invite-info | 返回邀请链接 + 统计数据 |
| POST | /api/user/invite/{ref_code} | 记录邀请点击,设置 cookie |
三、三个关键 Bug 及修复
Bug 1:邀请客户数始终为 0
根因:get_invite_info 用 user["user_id"](全长度 UID)查 referrals.json 的 stats,但 stats 的 key 是 ref_code(前 8 位)。字段不匹配 → 永远查不到。
修复
ref_code = db_user.get("ref_code", user["user_id"][:8])
stats = ref_data.get("stats", {}).get(ref_code, {})
Bug 2:注册时 ref_code 未传递
根因:前端 Login.tsx 的 handleSubmit 中,注册和登录共用 /auth/login 端点,ref_code 没被 register 端点接收。
修复
注册调 /auth/register,登录调 /auth/login,两路独立。后端 register 端点同时接受请求体 ref_code 和 Cookie opc_ref 作为兜底。
Bug 3:Docker 构建缓存导致修不生效
根因:前端代码修改后 docker compose up --build backend 仍加载旧版本 dist。
修复
cd /www/opcwiki/web/frontend && rm -rf dist node_modules/.vite && npm run build && cd /www/opcwiki && docker compose -f docker-compose.full.yml build --no-cache backend && docker compose -f docker-compose.full.yml up -d backend
关键:--no-cache 强制清空 Docker build 缓存,rm -rf dist 确保 Vite 重编所有文件。
四、数据文件结构
| 文件 | 路径 | 关键字段 |
|---|---|---|
| 用户主数据 | /app/data/users.json | ref_code, referred_by, balance |
| 邀请统计 | /app/data/referrals.json | stats[ref_code]={count, reward} |
五、部署检查清单
- 所有用户均有
ref_code(UID 前 8 位) - 被邀请用户
referred_by非空 referrals.json的 stats key 与 ref_code 一致- 前端 Login.tsx 注册调 /auth/register(非 /auth/login)
- Docker 部署使用 --no-cache 构建
—— 基于 OPCwiki v6 商业版实战经验整理 ——
评论区
0 条评论 · 评论需审核通过后显示
发表评论