# GGL 项目分析文档

## 一、项目概述

本项目是一个基于 **Webman（Workerman）** 框架构建的 **游戏聚合 + 支付平台** 后端系统，提供玩家端 API、第三方回调接口以及后台管理系统（ExAdmin）。

- **框架**: Webman (workerman/webman-framework ^1.5.0)
- **语言**: PHP >= 7.2
- **ORM**: Illuminate Database (Eloquent) ^8.83
- **后台管理**: ExAdmin (rockys/ex-admin-webman ^1.0)
- **HTTP 监听**: `http://0.0.0.0:8786`
- **进程数**: `cpu_count() * 4`

---

## 二、项目目录结构

```
ggl/
├── addons/webman/             # ExAdmin 后台管理模块
│   ├── controller/            # 后台控制器 (28个)
│   ├── model/                 # Eloquent 数据模型 (60+)
│   ├── middleware/            # 后台中间件
│   ├── database/              # 数据库迁移 & 种子
│   ├── service/               # 菜单等服务
│   ├── token/                 # Token 驱动
│   ├── traits/                # 公共 Trait
│   ├── validator/             # 验证器
│   ├── common/                # 公共组件 (登录/系统)
│   ├── echart/                # 图表组件
│   ├── form/                  # 表单组件
│   └── grid/                  # 列表组件
├── app/
│   ├── api/controller/v1/     # 玩家端 API 控制器
│   ├── external/              # 外部回调 API 控制器
│   ├── exception/             # 异常处理
│   ├── middleware/            # 应用中间件
│   ├── queue/redis/           # Redis 队列消费者
│   ├── service/               # 业务服务层
│   │   └── game/              # 游戏平台接口适配
│   └── functions.php          # 全局函数
├── config/                    # 配置文件
├── db/migrations/             # Phinx 数据库迁移
├── process/                   # 自定义进程
├── public/                    # Web 静态资源
├── resource/translations/     # 多语言资源 (zh_CN, en, Ma_my, cam_dia)
├── runtime/                   # 运行时文件 (日志/缓存)
├── support/                   # 框架辅助文件
├── composer.json
├── start.php                  # Linux 入口
└── windows.php                # Windows 入口
```

---

## 三、核心功能模块

### 3.1 玩家端功能

| 模块 | 功能描述 |
|------|----------|
| 用户认证 | 手机号注册、短信验证码、登录、登出、忘记密码 |
| 玩家信息 | 获取玩家信息、编辑昵称 |
| 银行卡管理 | 银行列表、添加/编辑/删除银行卡 |
| 充值功能 | 充值列表、充值项配置、玩家充值、上传凭证、SePay充值 |
| 提现功能 | 提现申请、SePay提现 |
| 账单记录 | Cash In/Out列表、充提记录、游戏记录 |
| 游戏中心 | 登录游戏、获取游戏地址 |
| 抽奖系统 | 奖品列表、抽奖、抽奖记录 |
| 数据中心 | 礼品中心 |
| 版本更新 | APP 版本检测更新 |

### 3.2 后台管理功能

| 模块 | 功能描述 |
|------|----------|
| 仪表盘 | 登录数据、玩家数据、充值/提现数据、图表统计 |
| 玩家管理 | 玩家列表、等级设置、标签管理、人工充值/提现、钱包管理、密码重置 |
| 游戏管理 | 游戏列表、进入游戏、奖品管理、每日库存补充、游戏服务配置 |
| 充值管理 | 充值记录、充值审核、充值方式配置、快捷支付配置 |
| 提现管理 | 提现记录、提现审核（通过/拒绝）、付款处理 |
| 渠道管理 | 渠道列表、渠道管理员、渠道配置 |
| 系统管理 | 菜单管理、角色权限管理、部门管理、岗位管理、系统设置 |
| 货币管理 | 货币列表、货币配置 |
| APP版本管理 | Android/iOS 版本管理、渠道配置、APK解压 |
| 附件管理 | 文件上传、分类管理 |
| 游戏记录 | 玩家游戏记录查询 |
| 配送记录 | 玩家配送记录查询 |

### 3.3 第三方集成

| 服务 | 说明 |
|------|------|
| SKL Pay | 支付充值、提现、回调通知 |
| One Pay | 支付服务 |
| Se Pay | 支付充值、提现服务 |
| 短信服务 | Weiqucloud 短信 API（含日本/台湾短信） |
| Facebook SDK | Facebook Graph SDK 集成 |
| WebSocket 推送 | webman/push 实时消息推送 |

### 3.4 游戏平台适配

通过 `GameServiceInterface` 统一接口 + `GameServiceFactory` 工厂模式，接入多个游戏平台：

| 游戏平台 | 接口文件 |
|----------|----------|
| MEGA888 | MeGa888ServiceInterface.php |
| KISS918 | Kiss918ServiceInterface.php |
| Joker | JokerServiceInterface.php |
| JiLi | JiLiServiceInterface.php |
| JDB | JDBServiceInterface.php |
| Pragmatic | PragmaticServiceInterface.php |
| LionKing | LionKingServiceInterface.php |
| Lucky365 | Lucky365ServiceInterface.php |
| MarioClub | MarioClubServiceInterface.php |
| MonkeyKing | MonkeyKingServiceInterface.php |
| NextSpin | NextSpinServiceInterface.php |
| BigGaming | BigGamingServiceInterface.php |
| CS | CSServiceInterface.php |

统一接口方法：`createPlayer()`、`getPlayer()`、`getSimpleGameList()`、`login()`

---

## 四、API 接口清单

### 4.1 玩家端 API（`/api/v1`）

> 请求方式：全部为 **POST**
> 中间件：`SiteAuthMiddleware`（需要 `Site-Id` 请求头）、`Lang`（多语言）、`AppVersionMiddleware`（版本校验）

#### 4.1.1 认证与用户

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/phone-register` | PlayerController@phoneRegister | 手机号注册 |
| `/api/v1/send-msg` | PlayerController@sendMsg | 发送短信验证码 |
| `/api/v1/login` | PlayerController@login | 玩家登录 |
| `/api/v1/logout` | IndexController@logout | 玩家登出 |
| `/api/v1/forget-password` | PlayerController@forgetPassword | 忘记密码 |
| `/api/v1/player-info` | PlayerController@playerInfo | 获取玩家信息 |
| `/api/v1/edit-player-name` | PlayerController@editPlayerName | 编辑玩家昵称 |

#### 4.1.2 银行卡管理

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/bank-list` | IndexController@bankList | 获取银行列表 |
| `/api/v1/bank-card-list` | IndexController@bankCardList | 获取用户银行卡列表 |
| `/api/v1/add-bank-card` | IndexController@addBankCard | 添加银行卡 |
| `/api/v1/edit-bank-card` | IndexController@editBankCard | 修改银行卡 |
| `/api/v1/delete-bank-card` | IndexController@deleteBankCard | 删除银行卡 |

#### 4.1.3 充值相关

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/recharge-list` | PlayerController@rechargeList | 获取充值列表 |
| `/api/v1/recharge-setting-list` | PlayerController@rechargeSettingList | 获取充值项配置列表 |
| `/api/v1/recharge-info` | PlayerController@rechargeInfo | 获取充值配置详情 |
| `/api/v1/player-recharge` | IndexController@playerRecharge | 玩家充值 |
| `/api/v1/upload-certificate` | IndexController@uploadCertificate | 上传充值凭证 |
| `/api/v1/complete-recharge` | PlayerController@completeRecharge | 完成充值 |
| `/api/v1/se-recharge-list` | PlayerController@seRechargeList | SePay充值列表 |
| `/api/v1/se-recharge` | PlayerController@seRecharge | SePay充值 |

#### 4.1.4 提现相关

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/withdrawal` | IndexController@playerWithdrawal | 玩家提现 |
| `/api/v1/se-withdrawal` | PlayerController@seWithdrawal | SePay提现 |

#### 4.1.5 账单与记录

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/cash-out-list` | IndexController@cashOutList | Cash Out 列表 |
| `/api/v1/cash-in-list` | IndexController@cashInList | Cash In 列表 |
| `/api/v1/game-record` | PlayerController@gameRecord | 游戏记录 |
| `/api/v1/deposit-withdrawal-records` | PlayerController@depositWithdrawalRecord | 充提记录 |

#### 4.1.6 游戏相关

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/login-game` | GameController@loginGame | 登录游戏（返回游戏地址）|
| `/api/v1/gametest` | GameController@gametest | 游戏测试接口 |

#### 4.1.7 抽奖系统

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/prize-list` | GameController@getPrizeList | 获取奖品列表 |
| `/api/v1/lottery` | GameController@lottery | 执行抽奖 |
| `/api/v1/draw-records` | GameController@getDrawRecords | 获取抽奖记录 |

#### 4.1.8 其他

| 接口路径 | 控制器方法 | 功能说明 |
|----------|-----------|----------|
| `/api/v1/get-app-update` | VersionController@getAppUpdate | 获取APP版本更新信息 |
| `/api/v1/channel-info` | IndexController@channelInfo | 获取渠道信息 |
| `/api/v1/gift-center` | PlayerController@giftCenter | 数据中心/礼品中心 |

---

### 4.2 外部回调接口（`/external`）

| 接口路径 | 请求方式 | 控制器方法 | 功能说明 |
|----------|---------|-----------|----------|
| `/external/login` | GET | ExternalApiController@login | 外部登录页面 |
| `/external/download` | GET | ExternalApiController@download | 外部下载页面 |
| `/external/skl-recharge-notify` | POST | ExternalApiController@sklRechargeNotify | SKL支付充值回调 |
| `/external/skl-withdrawal-notify` | POST | ExternalApiController@sklWithdrawalNotify | SKL支付提现回调 |
| `/external/skl-query/` | GET | ExternalApiController@sklQuery | SKL支付跳转查询 |

---

### 4.3 后台管理接口

后台基于 ExAdmin 自动生成 CRUD 路由，默认路径前缀为 `/admin` 和 `/agent`。

#### 主要管理模块

| 模块 | 控制器 | 主要功能 |
|------|--------|----------|
| 管理员 | AdminController | 管理员列表、修改密码、编辑信息、重置密码 |
| 仪表盘 | IndexController | 登录/玩家/充值/提现数据统计、图表 |
| 玩家管理 | PlayerController | 玩家CRUD、等级/标签、人工充提、钱包、记录查询 |
| 游戏管理 | GameController | 游戏CRUD、进入游戏、奖品管理、服务配置 |
| 充值记录 | RechargeRecordController | 充值记录查询、玩家详情 |
| 提现记录 | WithdrawRecordController | 提现记录查询、玩家详情 |
| 菜单管理 | MenuController | 菜单CRUD |
| 角色管理 | RoleController | 角色CRUD、权限分配 |
| 部门管理 | DepartmentController | 部门CRUD |
| 岗位管理 | PostController | 岗位CRUD |
| 系统设置 | SystemSettingController | 系统配置、结算日期 |
| 货币管理 | CurrencyController | 货币CRUD |
| APP版本 | AppVersionController | Android/iOS版本管理 |
| 附件管理 | AttachmentController | 文件上传、分类 |
| 游戏记录 | PlayGameRecordController | 游戏记录查询 |
| 配送记录 | PlayerDeliveryRecordController | 配送记录查询 |

#### 渠道端管理模块（`/agent`）

| 模块 | 控制器 | 主要功能 |
|------|--------|----------|
| 渠道仪表盘 | ChannelIndexController | 渠道数据统计 |
| 渠道玩家 | ChannelPlayerController | 玩家管理、推广员绑定 |
| 渠道管理 | ChannelController | 渠道CRUD |
| 渠道管理员 | ChannelAdminController | 渠道管理员CRUD |
| 渠道充值记录 | ChannelRechargeRecordController | 充值审核（通过/拒绝）、凭证查看 |
| 渠道充值配置 | ChannelRechargeController | 充值方式、快捷支付配置 |
| 渠道提现记录 | ChannelWithdrawRecordController | 提现审核、付款处理 |
| 渠道游戏 | ChannelGameController | 游戏管理 |
| 渠道岗位 | ChannelPostController | 岗位管理 |
| 渠道游戏记录 | ChannelPlayGameRecordController | 游戏记录 |
| 渠道配送记录 | ChannelPlayerDeliveryRecordController | 配送记录 |

---

## 五、中间件

### 5.1 应用中间件（API 请求）

| 中间件 | 作用 |
|--------|------|
| SiteAuthMiddleware | 站点/渠道验证，通过 `Site-Id` 请求头识别渠道 |
| Lang | 多语言处理 |
| AppVersionMiddleware | APP 版本校验 |

### 5.2 后台中间件

| 中间件 | 作用 |
|--------|------|
| AuthMiddleware | 后台管理员登录鉴权 |
| Permission | 角色权限校验 |
| LoadLangPack | 语言包加载 |
| RequestMiddleware | 请求预处理 |

---

## 六、数据模型

### 6.1 玩家相关

| 模型 | 说明 |
|------|------|
| Player | 玩家基础信息 |
| PlayerExtend | 玩家扩展信息 |
| PlayerBank | 玩家银行卡 |
| PlayerRechargeRecord | 充值记录 |
| PlayerWithdrawRecord | 提现记录 |
| PlayerDeliveryRecord | 配送记录 |
| PlayerLoginRecord | 登录记录 |
| PlayerRegisterRecord | 注册记录 |
| PlayerEditLog | 编辑日志 |
| PlayerTag | 玩家标签 |
| PlayerLevel | 玩家等级 |
| PlayerPromoter | 推广员 |
| PlayerGamePlatform | 玩家游戏平台关联 |
| PlayerGameRecord | 游戏记录 |
| PlayerLotteryRecord | 抽奖记录 |
| PlayerChipRecord | 筹码记录 |
| PlayerBankruptcyRecord | 破产记录 |
| PlayerPlatformCash | 平台现金 |
| PlayerMoneyEditLog | 资金变动日志 |
| PlayerWalletTransfer | 钱包转账 |

### 6.2 渠道相关

| 模型 | 说明 |
|------|------|
| Channel | 渠道 |
| ChannelRechargeMethod | 渠道充值方式 |
| ChannelRechargeMethodLang | 充值方式多语言 |
| ChannelRechargeSetting | 渠道充值配置 |
| ChannelFinancialRecord | 渠道财务记录 |

### 6.3 管理后台相关

| 模型 | 说明 |
|------|------|
| AdminUser | 管理员用户 |
| AdminRole | 管理角色 |
| AdminMenu | 管理菜单 |
| AdminConfig | 管理配置 |
| AdminDepartment | 部门 |
| AdminPost | 岗位 |
| AdminFileAttachment | 文件附件 |

### 6.4 业务相关

| 模型 | 说明 |
|------|------|
| Game | 游戏 |
| GamePlatform | 游戏平台 |
| GameType | 游戏类型 |
| Currency | 货币 |
| BankList | 银行列表 |
| Prize | 奖品 |
| DrawRecord | 抽奖记录 |
| Notice / Announcement | 公告/通知 |
| Activity / ActivityContent | 活动 |
| SepayRecharge | SePay充值记录 |
| Qrcode / QrcodeBatch / QrcodeOwner | 二维码管理 |
| PromoterProfitRecord | 推广员利润记录 |
| CommissionRecord | 佣金记录 |
| Broadcast | 广播消息 |
| AppVersion | APP版本 |
| SystemSetting | 系统设置 |
| ExternalApp | 外部应用 |
| ApiErrorLog | API 错误日志 |
| PhoneSmsLog | 短信日志 |

---

## 七、技术架构

### 7.1 核心依赖

| 依赖包 | 版本 | 用途 |
|--------|------|------|
| workerman/webman-framework | ^1.5.0 | Web 框架核心 |
| illuminate/database | ^8.83 | Eloquent ORM |
| rockys/ex-admin-webman | ^1.0 | 后台管理系统 |
| tinywan/jwt | ^1.6 | JWT 鉴权 |
| webman/push | ^1.0 | WebSocket 推送 |
| webman/redis-queue | ^1.2 | Redis 消息队列 |
| workerman/crontab | ^1.0 | 定时任务 |
| symfony/translation | ^5.4 | 多语言翻译 |
| gitfei1231/webman-api-sign | ^0.0.21 | API 签名验证 |
| facebook/graph-sdk | ^5.1 | Facebook 集成 |
| endroid/qr-code | ^4.6 | 二维码生成 |
| robmorgan/phinx | ^0.14.0 | 数据库迁移 |
| yzh52521/webman-lock | ^1.0 | 分布式锁 |

### 7.2 队列消费者

| 消费者 | 队列名 | 功能 |
|--------|--------|------|
| SendBroadcasts | broadcast_tasks | 广播消息发送 |
| CancelRecharge | - | 取消充值处理 |

### 7.3 多语言支持

- 简体中文 (zh_CN)
- 英语 (en)
- 马来语 (Ma_my)
- 柬埔寨语 (cam_dia)

### 7.4 存储

| 组件 | 配置 |
|------|------|
| MySQL | 默认数据库，utf8mb4 编码 |
| Redis | 127.0.0.1:6379，DB 1 |
| Redis Queue | 8 个消费进程，最大重试 5 次 |

---

## 八、异常处理

| 异常类 | 说明 |
|--------|------|
| ApiHandler | API 统一异常处理 |
| GameException | 游戏相关异常 |
| PlayerCheckException | 玩家校验异常 |
| PromoterCheckException | 推广员校验异常 |

---

## 九、支付服务

| 服务类 | 说明 |
|--------|------|
| SklPayServices | SKL 支付服务（充值/提现）|
| OnePayServices | OnePay 支付服务 |
| SePayServices | SePay 支付服务 |
| DrawService | 抽奖服务 |

---

## 十、部署与运行

```bash
# Linux 启动
php start.php start

# Linux 守护进程
php start.php start -d

# Windows 启动
php windows.php

# 停止
php start.php stop

# 重启
php start.php restart
```

默认监听地址：`http://0.0.0.0:8786`
