一个基于 FastAPI 的 ChatGPT Team 管理系统,围绕「账号导入 → 兑换分配 → 质保售后 → 库存预警」完整流程设计,适合需要稳定管理 Team 车位与兑换业务的场景。
git clone https://github.com/loLollipop/team-manage-refresh.git
cd team-manage-refresh
cp .env.example .env
docker compose up -dgit pull && docker compose down && docker compose up -d --buildgit fetch origin
git checkout main
git reset --hard origin/main
docker compose down && docker compose up -d --build-
Team 账号管理
- 单个/批量导入 Team 账号(支持 Access Token / Refresh Token / Session Token / Client ID)
- 智能识别和提取 AT Token、邮箱、Account ID(支持从混合文本中提取)
- 自动同步 Team 信息(名称、订阅计划、到期时间、成员数)
- Team 成员管理(查看、添加、删除成员)
- Team 状态监控(可用/已满/已过期/错误)
- 支持 OAuth 授权链接生成与回调解析,便于获取和整理导入凭据
-
兑换码管理
- 单个/批量生成兑换码
- 自定义兑换码和有效期
- 支持质保兑换码(可配置质保天数)
- 兑换码状态筛选(未使用/已使用/已过期)
- 导出兑换码为文本文件
- 删除未使用的兑换码
-
使用记录查询
- 多维度筛选(邮箱、兑换码、Team ID、日期范围)
- 分页展示(每页20条记录)
- 统计数据(总数、今日、本周、本月)
-
系统设置
- 代理配置(HTTP/SOCKS5)
- 管理员密码修改
- 日志级别动态调整
- Token 预刷新频率与刷新窗口配置(降低过期导致的可用性问题)
- 库存预警 Webhook(基于剩余可用车位自动通知补货系统)
- 顶部导航分区切换(点击标签仅显示当前设置板块,无需长页面滚动)
- 公告通知管理(支持 Markdown 公告,用户访问兑换页时弹窗展示)
-
福利车位(独立池)
- 福利 Team 与常规 Team 完全分池管理(导入、列表、兑换逻辑独立)
- 福利通用兑换码为 settings 管理的虚拟码(新码生成会立即使旧码失效)
- 福利通用码卡片支持单行紧凑展示、悬停查看完整码,并可一键复制
- 福利通用码剩余次数按“可邀请席位”统计(
max_members - 1),更贴合实际可拉人数量 - 控制台保留原始 Team ID 展示,福利页使用独立“编号”便于单独核对
-
售后与风控能力
- 质保查询:支持按邮箱或兑换码追溯历史记录
- 设备身份验证:支持用户一键开启 Device Code Auth
- Team 封禁关联追踪:辅助判断是否可复用或重新分配
- 库存预警与自动导入
- 当可用兑换码低于设置阈值时,自动触发 Webhook 通知
- 支持第三方程序通过 API 自动导入新 Team 账号
- 内置定时任务:Token 预刷新 + Team 周期状态同步(默认 7 天维度)
- 详细对接说明见 integration_docs.md
-
兑换流程
- 输入邮箱和兑换码
- 自动验证兑换码有效性
- 展示可用 Team 列表
- 手动选择或自动分配 Team
- 自动发送 Team 邀请到用户邮箱
- 兑换首页显示常规车位与福利车位剩余数量
-
公告弹窗
- 管理员启用公告后,用户打开兑换页会自动弹出公告
- 公告内容支持 Markdown(标题、列表、加粗、链接)
- 后端框架: FastAPI 0.109+
- Web 服务器: Uvicorn
- 数据库: SQLite + SQLAlchemy 2.0 + aiosqlite
- 模板引擎: Jinja2
- HTTP 客户端: curl-cffi(模拟浏览器指纹,绕过 Cloudflare 防护)
- 调度任务: APScheduler(Token 预刷新、Team 周期同步)
- 认证: Session-based(bcrypt 密码哈希)
- 加密: cryptography(AES-256-GCM)
- JWT 解析: PyJWT
- 前端: HTML + CSS + 原生 JavaScript
- Python 3.10+
- pip(Python 包管理器)
- 操作系统:Windows / Linux / macOS
git clone https://github.com/loLollipop/team-manage-refresh.git
cd team-manage-refresh# Windows
python -m venv venv
venv\Scripts\activate
# Linux/macOS
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txt复制 .env.example 为 .env 并修改配置:
cp .env.example .env编辑 .env 文件:
# 应用配置
APP_NAME=GPT Team 管理系统
APP_VERSION=0.1.0
APP_HOST=0.0.0.0
APP_PORT=8008
DEBUG=True
# 数据库配置(默认使用 SQLite)
DATABASE_URL=sqlite+aiosqlite:///team_manage.db
# 安全配置(生产环境请修改)
SECRET_KEY=your-secret-key-here-change-in-production
ADMIN_PASSWORD=admin123
# 日志配置
LOG_LEVEL=INFO
# 代理配置(可选)
PROXY_ENABLED=False
PROXY=
# JWT 配置
JWT_VERIFY_SIGNATURE=Falsepython init_db.py# 开发模式(自动重载)
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8008
# 或者直接运行
python app/main.py- 用户兑换页面: http://localhost:8008/
- 管理员登录页面: http://localhost:8008/login
- 管理员控制台: http://localhost:8008/admin
- 福利车位管理页面: http://localhost:8008/admin/welfare
默认管理员账号:
- 用户名:
admin - 密码:
admin123(请在首次登录后修改)
项目支持使用 Docker 快速部署,确保环境一致性并简化配置。
确保你的系统已安装:
- Docker
- Docker Compose
- 克隆项目并进入目录。
- 配置
.env文件(参考上述"配置环境变量"章节)。 - 运行 Docker Compose 命令:
# 构建并启动容器
docker compose up -dDocker 配置中已自动将宿主机的 team_manage.db 文件映射到容器内部,因此你的数据会自动保存在项目根目录下,容器删除后数据依然存在。
# 查看日志
docker compose logs -f
# 停止并移除容器
docker compose down
# 重新构建镜像
docker compose build --no-cacheteam-manage/
├── app/ # 应用主目录
│ ├── main.py # FastAPI 入口文件
│ ├── config.py # 配置管理
│ ├── database.py # 数据库连接
│ ├── models.py # SQLAlchemy 模型
│ ├── routes/ # 路由模块
│ │ ├── admin.py # 管理员路由
│ │ ├── user.py # 用户路由
│ │ ├── api.py # API 端点
│ │ ├── auth.py # 认证路由
│ │ └── redeem.py # 兑换路由
│ ├── services/ # 业务逻辑服务
│ │ ├── auth.py # 认证服务
│ │ ├── chatgpt.py # ChatGPT API 集成
│ │ ├── encryption.py # 加密服务
│ │ ├── redeem_flow.py # 兑换流程服务
│ │ ├── redemption.py # 兑换码管理服务
│ │ ├── settings.py # 系统设置服务
│ │ └── team.py # Team 管理服务
│ ├── utils/ # 工具模块
│ │ ├── jwt_parser.py # JWT Token 解析
│ │ └── token_parser.py # Token 正则匹配
│ ├── dependencies/ # FastAPI 依赖
│ │ └── auth.py # 认证依赖
│ ├── templates/ # Jinja2 模板
│ │ ├── base.html # 基础布局
│ │ ├── auth/ # 认证页面
│ │ ├── admin/ # 管理员页面
│ │ └── user/ # 用户页面
│ └── static/ # 静态文件
│ ├── css/ # 样式文件
│ └── js/ # JavaScript 文件
├── init_db.py # 数据库初始化脚本
├── requirements.txt # Python 依赖
├── Dockerfile # Docker 镜像构建文件
├── docker-compose.yml # Docker 服务编排文件
├── .dockerignore # Docker 忽略文件
├── .env.example # 环境变量示例
├── CLAUDE.md # Claude Code 指南
├── 需求.md # 项目需求文档
├── 任务.md # 任务跟踪文档
├── 接口.md # API 接口文档
└── README.md # 项目说明文档
默认使用 SQLite 数据库,数据库文件为 team_manage.db。如需使用其他数据库,请修改 DATABASE_URL。
如果需要通过代理访问 ChatGPT API,可以在管理员面板的"系统设置"中配置代理:
- 支持 HTTP 代理:
http://proxy.example.com:8080 - 支持 SOCKS5 代理:
socks5://proxy.example.com:1080
生产环境部署前,请务必修改以下配置:
SECRET_KEY: 用于 Session 签名,请使用随机字符串ADMIN_PASSWORD: 管理员初始密码,首次登录后请立即修改DEBUG: 生产环境请设置为False
-
登录管理员面板
- 访问 http://localhost:8008/login
- 使用默认账号登录(admin/admin123)
- 首次登录后建议修改密码
-
导入 Team 账号
- 进入"Team 管理" → "导入 Team"
- 单个导入支持两种模式:
- 一键获取 Token(授权链接 → 粘贴回调 → 解析自动填充 → 导入)
- 已有 Token 直接填写(手动模式)
- 批量导入支持 JSON 文件一键选择导入
- 系统会自动识别并尽量补全邮箱、Account ID 等信息
-
生成兑换码
- 进入"兑换码管理" → "生成兑换码"
- 单个生成:可自定义兑换码和有效期
- 批量生成:设置数量和有效期
- 生成后可复制或下载
-
查看使用记录与售后状态
- 进入"使用记录"
- 可按邮箱、兑换码、Team ID、日期范围筛选
- 查看统计数据(总数、今日、本周、本月)
- 需要售后时,可通过质保查询快速定位原始兑换记录
-
系统设置与公告
- 进入"系统设置"可配置代理、修改密码、调整日志级别、Token 刷新与库存预警
- 设置页支持顶部导航标签切换,仅显示当前板块,便于快速操作
- 进入"公告通知"可编辑 Markdown 公告并控制是否启用弹窗
-
访问兑换页面
-
输入信息
- 填写邮箱地址
- 输入兑换码
-
选择 Team
- 系统展示可用 Team 列表
- 手动选择 Team 或点击"自动选择"
-
完成兑换
- 系统自动发送邀请到邮箱
- 查看兑换结果(Team 名称、到期时间)
-
接受邀请
- 检查邮箱收到的 ChatGPT Team 邀请邮件
- 点击邮件中的链接接受邀请
详细的 API 接口文档请参考 接口.md。
主要接口:
POST /auth/login- 管理员登录POST /auth/logout- 管理员登出POST /redeem/verify- 验证兑换码POST /redeem/confirm- 确认兑换GET /admin- 管理员控制台GET /admin/teams/import- Team 导入页面GET /admin/codes- 兑换码列表GET /admin/records- 使用记录POST /warranty/check- 查询兑换码/邮箱质保状态POST /warranty/enable-device-auth- 开启设备身份验证
# 删除旧数据库文件
rm team_manage.db
# 重新初始化
python init_db.py- 检查网络连接
- 配置代理(如需)
- 检查 AT Token 是否有效
- 查看日志文件排查错误
- 确保 AT Token 格式正确
- 检查 Token 是否过期
- 验证 Token 是否有 Team 管理权限
本仓库当前采用 MIT License。
欢迎提交 Issue 和 Pull Request!
注意: 本系统仅用于合法的 ChatGPT Team 账号管理,请遵守 OpenAI 的服务条款。