API对接文档

This commit is contained in:
2026-03-17 16:11:56 +08:00
parent 150d31eac5
commit 683bd5d97a

272
API对接文档.md Normal file
View File

@@ -0,0 +1,272 @@
# 大富翁-摇色子 对接文档
本文覆盖**平台侧对接接口**`/api/v1/*`,使用 `auth-token` 鉴权)以及(可选)**玩家侧接口**`/api/*`,使用 `token` 鉴权)。
---
## 1. 基本约定
### 1.1 服务地址Base URL
由部署方提供:
- 测试环境:`https://dice-api.yuliao666.com`
[//]: # (- 生产环境:`https://api.example.com`)
下文所有路径均为相对路径,如:`/api/v1/getGameUrl`
### 1.2 请求方式与编码
- **请求方法**:项目路由多数使用 `Route::any`,对接建议统一使用 **POST**(便于 body 传参);个别接口文档中标注了 GET 参数。
- **编码**`UTF-8`
- **Content-Type**:建议 `application/x-www-form-urlencoded``application/json`(以平台实际实现为准)
### 1.3 统一返回结构
所有接口统一返回 JSON
```json
{
"code": 200,
"message": "success",
"data": {}
}
```
- `code`:业务状态码(见“返回 code 对照表”)
- `message`:提示信息(可根据请求头 `lang` 返回中英文)
- `data`:成功时返回数据;失败时通常不返回该字段
### 1.4 多语言lang
服务端会根据请求头 `lang` 翻译 `message`(以及部分接口字段):
- `lang: zh`(默认)
- `lang: en`
> 注意:平台 v1 接口的 `getGameUrl` 还支持 body 参数 `lang``zh/en`),用于拼接游戏地址语言参数。
---
## 2. 鉴权与对接流程(平台侧 /api/v1
平台侧接口分两步:
1. **获取 `auth-token`**
2. **携带 `auth-token` 调用 `/api/v1/*` 业务接口**
### 2.1 获取 auth-token
- **路径**`/api/v1/authToken`
- **方法**GET / POST 均可(建议 GET参数放 query
- **说明**:用于平台调用 v1 业务接口的授权 tokenJWT
#### 请求参数query/body
| 参数名 | 必填 | 类型 | 说明 |
| --- | --- | --- |---------------------------------------------------|
| agent_id | 是 | string | 平台/代理标识后台查看对应管理员agent_id |
| secret | 是 | string | 双方约定的密钥(服务端配置 `xF75oK91TQj13s0UmNIr1NBWMWGfflNO` |
| time | 是 | int/string | Unix 时间戳(秒),服务端会做时间容忍校验 |
| signature | 是 | string | 签名:`md5(agent_id + secret + time)` |
#### 签名规则
- **签名字符串**:直接拼接 `agent_id.secret.time`(无分隔符)
- **算法**MD532 位小写/大写均可,按实现一致即可)
示例(伪代码):
```text
signature = md5(agent_id + secret + time)
```
#### 响应示例
```json
{
"code": 200,
"message": "success",
"data": {
"authtoken": "xxxx.yyyy.zzzz"
}
}
```
#### 失败场景
- 缺少参数:`code=400`
- 密钥错误/签名错误/时间戳无效:`code=403`
- 服务端未配置密钥或生成失败:`code=500`
### 2.2 调用 v1 业务接口(携带 auth-token
`/api/v1/authToken` 外,其余 `/api/v1/*` 接口需要在请求头携带:
- `auth-token: <authtoken>`
`auth-token` 过期或失效,返回 `code=402`,需要重新调用 `/api/v1/authToken` 获取新 token。
---
## 3. 平台 v1 业务接口清单(/api/v1
### 3.1 获取游戏地址
- **路径**`/api/v1/getGameUrl`
- **方法**POST
- **请求头**`auth-token`
- **说明**:根据平台用户名创建/登录玩家并生成登录 JWT返回可直接打开的游戏地址。
#### 请求参数body
| 参数名 | 必填 | 类型 | 说明 |
| --- | --- | --- | --- |
| username | 是 | string | 玩家唯一账号(平台侧用户名) |
| password | 否 | string | 默认 `123456` |
| time | 否 | int/string | 默认当前时间戳 |
| lang | 否 | string | `zh` / `en`,默认 `zh` |
#### 响应示例
```json
{
"code": 200,
"message": "success",
"data": {
"url": "https://dice-game.xxx/?token=...&lang=zh"
}
}
```
### 3.2 获取用户信息
- **路径**`/api/v1/getPlayerInfo`
- **方法**POST
- **请求头**`auth-token`
#### 请求参数
| 参数名 | 必填 | 类型 | 说明 |
| --- | --- | --- | --- |
| username | 是 | string | 玩家账号 |
#### 响应说明
返回玩家基础信息(已隐藏敏感字段,如 `password` 等)。
### 3.3 获取游戏记录
- **路径**`/api/v1/getPlayerGameRecord`
- **方法**POST
- **请求头**`auth-token`
#### 请求参数
| 参数名 | 必填 | 类型 | 说明 |
| --- | --- | --- | --- |
| username | 否 | string | 不传则查询全量(按时间/分页) |
| start_create_time | 否 | string | 开始时间(与数据库存储格式一致) |
| end_create_time | 否 | string | 结束时间(与数据库存储格式一致) |
| page | 否 | int | 默认 1 |
| limit | 否 | int | 默认 20最大 100 |
#### 响应说明
返回游玩记录列表,并附带 `dice_player`(包含 `id/username/phone`)。
### 3.4 获取钱包流水
- **路径**`/api/v1/getPlayerWalletRecord`
- **方法**POST
- **请求头**`auth-token`
参数与分页规则同 3.3,返回钱包流水列表(附带 `dice_player`)。
### 3.5 获取中奖券获取记录
- **路径**`/api/v1/getPlayerTicketRecord`
- **方法**POST
- **请求头**`auth-token`
参数与分页规则同 3.3,返回中奖券记录列表(附带 `dice_player`)。
### 3.6 平台钱包转入/转出
- **路径**`/api/v1/setPlayerWallet`
- **方法**POST
- **请求头**`auth-token`
- **说明**:平台为玩家加币/扣币,生成钱包流水。
#### 请求参数
| 参数名 | 必填 | 类型 | 说明 |
| --- | --- | --- | --- |
| username | 是 | string | 玩家账号 |
| coin | 是 | number | 转入:`>0`;转出:`<0`;不允许为 0 |
#### 业务规则
-`coin < 0` 且余额不足时:`code=422``message=余额不足,无法转出`
---
## 4. 玩家侧接口(可选 /api
若甲方平台需要在**服务端**直接调用“购买抽奖券/开局”等接口,可按本节对接(此类接口需要 `token`,与 `auth-token` 不同)。
### 4.1 获取 token玩家登录
- **路径**`/api/user/Login`
- **方法**POST
- **说明**:创建/登录玩家并返回登录 token 以及游戏地址。
请求参数:`username``password`(必填),`lang/coin/time`(可选)。
响应 `data.token` 可用于后续 `/api/*` 请求头 `token``Authorization: Bearer <token>`
### 4.2 需要 token 的接口
请求头携带(任选一种):
- `token: <token>`
- `Authorization: Bearer <token>`
接口列表:
- `/api/user/logout`
- `/api/user/info`
- `/api/user/balance`
- `/api/user/walletRecord`
- `/api/user/playGameRecord`
- `/api/game/config`
- `/api/game/buyLotteryTickets`
- `/api/game/lotteryPool`
- `/api/game/playStart`
---
## 5. 返回 code 对照表
项目定义的统一状态码如下(与 HTTP 语义对齐):
| code | 含义 | 常见场景 |
| --- | --- | --- |
| 200 | 成功 | 请求成功 |
| 400 | 请求参数错误 | 缺参、参数格式不合法、范围错误 |
| 401 | 未授权 | 未携带 `auth-token``token` |
| 402 | token 无效或已过期 | `auth-token/token` 过期、签名错误、被挤下线等 |
| 403 | 鉴权失败 | `secret` 错误、签名验证失败、时间戳无效等 |
| 404 | 资源不存在 | 用户不存在等 |
| 422 | 业务逻辑错误 | 余额不足、业务校验失败等 |
| 500 | 服务器内部错误 | 服务端异常或配置缺失 |
---
## 6. 联调建议
- **时间戳校验**`/api/v1/authToken` 会校验 `time` 与服务器时间差(默认容忍 300 秒),请确保平台服务器时间同步。
- **token 失效处理**:当 `code=402` 时,按业务类型重新获取 `auth-token` 或重新登录获取 `token`
- **语言**:如需英文提示,请在请求头带 `lang: en`