Spaces:
Paused
Paused
File size: 13,811 Bytes
bb457a9 4e5a541 bb457a9 4e5a541 bb457a9 4e5a541 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 | ---
title: GPT Team 车位管理与兑换系统
sdk: docker
app_port: 7860
---
# GPT Team 车位管理与兑换系统
一个基于 FastAPI 的 ChatGPT Team 管理系统,围绕「账号导入 → 兑换分配 → 质保售后 → 库存预警」完整流程设计,适合需要稳定管理 Team 车位与兑换业务的场景。
## 🚀 Docker 一键部署 & 更新
### 一键部署
```bash
git clone https://github.com/tibbar213/team-manage.git
cd team-manage
cp .env.example .env
docker compose up -d
```
### 一键更新
```bash
git pull && 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](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
## 🤗 Hugging Face Spaces 部署
本项目已适配 Hugging Face 的 Docker Spaces,部署要点如下:
1. 在 Hugging Face 创建 Space,SDK 选择 `Docker`。
2. Space 会注入环境变量 `PORT`,应用会自动监听该端口。
3. 在 Space 的 Variables/Secrets 中设置 `DATABASE_URL=sqlite+aiosqlite:////data/team_manage.db`(启用持久化存储时)。
4. 在 Space 的 Variables/Secrets 中设置 `SECRET_KEY` 与 `ADMIN_PASSWORD`(生产环境必须修改)。
## 📋 系统要求
- Python 3.10+
- pip(Python 包管理器)
- 操作系统:Windows / Linux / macOS
## 🚀 快速开始
### 1. 克隆项目
```bash
git clone https://github.com/tibbar213/team-manage.git
cd team-manage
```
### 2. 创建虚拟环境
```bash
# Windows
python -m venv venv
venv\Scripts\activate
# Linux/macOS
python3 -m venv venv
source venv/bin/activate
```
### 3. 安装依赖
```bash
pip install -r requirements.txt
```
### 4. 配置环境变量
复制 `.env.example` 为 `.env` 并修改配置:
```bash
cp .env.example .env
```
编辑 `.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=False
```
### 5. 初始化数据库
```bash
python init_db.py
```
### 6. 启动应用
```bash
# 开发模式(自动重载)
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8008
# 或者直接运行
python app/main.py
```
### 7. 访问应用
- **用户兑换页面**: http://localhost:8008/
- **管理员登录页面**: http://localhost:8008/login
- **管理员控制台**: http://localhost:8008/admin
- **福利车位管理页面**: http://localhost:8008/admin/welfare
**默认管理员账号**:
- 用户名: `admin`
- 密码: `admin123`(请在首次登录后修改)
---
## 🐳 Docker 部署 (推荐)
项目支持使用 Docker 快速部署,确保环境一致性并简化配置。
### 1. 准备工作
确保你的系统已安装:
- Docker
- Docker Compose
### 2. 快速启动
1. 克隆项目并进入目录。
2. 配置 `.env` 文件(参考上述"配置环境变量"章节)。
3. 运行 Docker Compose 命令:
```bash
# 构建并启动容器
docker compose up -d
```
### 3. 数据持久化
Docker 配置中已自动将宿主机的 `team_manage.db` 文件映射到容器内部,因此你的数据会自动保存在项目根目录下,容器删除后数据依然存在。
### 4. 常用命令
```bash
# 查看日志
docker compose logs -f
# 停止并移除容器
docker compose down
# 重新构建镜像
docker compose build --no-cache
```
## 📁 项目结构
```
team-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`
### 安全配置
**生产环境部署前,请务必修改以下配置**:
1. `SECRET_KEY`: 用于 Session 签名,请使用随机字符串
2. `ADMIN_PASSWORD`: 管理员初始密码,首次登录后请立即修改
3. `DEBUG`: 生产环境请设置为 `False`
## 📖 使用指南
### 管理员操作流程
1. **登录管理员面板**
- 访问 http://localhost:8008/login
- 使用默认账号登录(admin/admin123)
- 首次登录后建议修改密码
2. **导入 Team 账号**
- 进入"Team 管理" → "导入 Team"
- 单个导入支持两种模式:
- 一键获取 Token(授权链接 → 粘贴回调 → 解析自动填充 → 导入)
- 已有 Token 直接填写(手动模式)
- 批量导入支持 JSON 文件一键选择导入
- 系统会自动识别并尽量补全邮箱、Account ID 等信息
3. **生成兑换码**
- 进入"兑换码管理" → "生成兑换码"
- 单个生成:可自定义兑换码和有效期
- 批量生成:设置数量和有效期
- 生成后可复制或下载
4. **查看使用记录与售后状态**
- 进入"使用记录"
- 可按邮箱、兑换码、Team ID、日期范围筛选
- 查看统计数据(总数、今日、本周、本月)
- 需要售后时,可通过质保查询快速定位原始兑换记录
5. **系统设置与公告**
- 进入"系统设置"可配置代理、修改密码、调整日志级别、Token 刷新与库存预警
- 设置页支持顶部导航标签切换,仅显示当前板块,便于快速操作
- 进入"公告通知"可编辑 Markdown 公告并控制是否启用弹窗
### 用户兑换流程
1. **访问兑换页面**
- 访问 http://localhost:8008/
2. **输入信息**
- 填写邮箱地址
- 输入兑换码
3. **选择 Team**
- 系统展示可用 Team 列表
- 手动选择 Team 或点击"自动选择"
4. **完成兑换**
- 系统自动发送邀请到邮箱
- 查看兑换结果(Team 名称、到期时间)
5. **接受邀请**
- 检查邮箱收到的 ChatGPT Team 邀请邮件
- 点击邮件中的链接接受邀请
## 🔌 API 接口
详细的 API 接口文档请参考 [接口.md](接口.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` - 开启设备身份验证
## 🐛 故障排除
### 数据库初始化失败
```bash
# 删除旧数据库文件
rm team_manage.db
# 重新初始化
python init_db.py
```
### 无法访问 ChatGPT API
1. 检查网络连接
2. 配置代理(如需)
3. 检查 AT Token 是否有效
4. 查看日志文件排查错误
### 导入 Team 失败
1. 确保 AT Token 格式正确
2. 检查 Token 是否过期
3. 验证 Token 是否有 Team 管理权限
## 📄 许可证
本仓库当前采用 [MIT License](./LICENSE)。
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
---
**注意**: 本系统仅用于合法的 ChatGPT Team 账号管理,请遵守 OpenAI 的服务条款。
|