# 大富翁-摇色子 对接文档 本文覆盖**平台侧对接接口**(`/api/v1/*`,使用 `auth-token` 鉴权)以及(可选)**玩家侧接口**(`/api/*`,使用 `token` 鉴权)。 --- ## 1. 基本约定 ### 1.1 服务地址(Base URL) 由部署方提供: - 测试环境:`https://dice-api.h55555game.top` 下文所有路径均为相对路径,如:`/api/v1/getGameUrl`。 ### 1.2 请求方式与编码 - **请求方法**:项目路由多数使用 `Route::any`,对接建议统一使用 **POST**(便于 body 传参);个别接口文档中标注了 GET 参数。 - **编码**:`UTF-8` - **Content-Type**:建议 `application/x-www-form-urlencoded` 或 `application/json`(以平台实际实现为准) - **必带凭证**:所有 `/api/v1/*` 接口均需带 `api-key`(与服务端 `.env` 中 `API_KEY` 一致);除 `/api/v1/authToken` 外另需 `auth-token`。详见 §2.2。 ### 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) 平台侧接口需统一携带请求头 **`api-key`**(与服务端 `.env` 中 `API_KEY` 一致),业务接口另需 **`auth-token`**。 1. **获取 `auth-token`**(同时携带 `api-key`) 2. **携带 `api-key` + `auth-token` 调用 `/api/v1/*` 业务接口** ### 2.1 获取 auth-token - **路径**:`/api/v1/authToken` - **方法**:GET / POST 均可(建议 GET,参数放 query) - **说明**:用于平台调用 v1 业务接口的授权 token(JWT) #### 请求参数(query/body) | 参数名 | 必填 | 类型 | 说明 | | --- | --- | --- |---------------------------------------------------| | agent_id | 是 | string | 平台/代理标识(后台查看对应管理员agent_id) | | secret | 是 | string | 双方约定的密钥(服务端配置 `xF75oK91TQj13s0UmNIr1NBWMWGfflNO`) | | time | 是 | int/string | Unix 时间戳(秒),服务端会做时间容忍校验 | | signature | 是 | string | 签名:`md5(agent_id + secret + time)` | - **agent_id**:通过后台获取系统管理-用户管理-代理ID![http://dice-api.h55555game.top/storage/20260317/20a0d49f016bcc89afa794ed217e762fe3ef6481.png](server/public/img.png) - **secret**:xF75oK91TQj13s0UmNIr1NBWMWGfflNO(服务器配置) - **后台地址**:https://dice.h55555game.top 账号: zhuguan 密码:123456 #### 签名规则 - **签名字符串**:直接拼接 `agent_id.secret.time`(无分隔符) - **算法**:MD5(32 位小写/大写均可,按实现一致即可) 示例(伪代码): ```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 平台 api-key(所有 /api/v1/* 必填) - **取值**:与服务端环境变量 `API_KEY` 完全一致(部署在 `server/.env`) - **适用范围**:所有 `/api/v1/*` 接口(含 `/api/v1/authToken` 与业务接口) - **携带方式**(任选其一,按优先级读取,先命中即采用): 1. 请求头 `api-key: `(**推荐**) 2. URL 查询参数 `api_key=`(或 `api-key=`) 3. body 表单/JSON 字段 `api_key`(或 `api-key`) - **未携带或错误**:`401` / `403` ### 2.3 调用 v1 业务接口(携带 auth-token) 除 `/api/v1/authToken` 外,其余 `/api/v1/*` 接口需要携带: - `api-key: <与 API_KEY 一致>`(请求头 / query / body 任选其一,参见 2.2) - `auth-token: `(仅支持请求头) 当 `auth-token` 过期或失效,返回 `code=402`,需要重新调用 `/api/v1/authToken` 获取新 token。 --- ## 3. 平台 v1 业务接口清单(/api/v1) ### 3.1 获取游戏地址 - **路径**:`/api/v1/getGameUrl` - **方法**:POST - **请求头**:`api-key`、`auth-token` - **说明**:根据平台用户名创建/登录玩家并生成登录 JWT,返回可直接打开的游戏地址。 #### 请求参数(body) | 参数名 | 必填 | 类型 | 说明 | | --- | --- | --- | --- | | username | 是 | string | 玩家唯一账号(平台侧用户名) | | time | 否 | int/string | 默认当前时间戳 | | lang | 否 | string | `zh` / `en`,默认 `zh` | #### 响应示例 ```json { "code": 200, "message": "success", "data": { "url": "https://dice-game.h55555game.top/?token=...&lang=zh" } } ``` ### 3.2 获取用户信息 - **路径**:`/api/v1/getPlayerInfo` - **方法**:POST - **请求头**:`api-key`、`auth-token` #### 请求参数 | 参数名 | 必填 | 类型 | 说明 | | --- | --- | --- | --- | | username | 是 | string | 玩家账号 | #### 响应说明 返回玩家基础信息(已隐藏敏感字段,如 `password` 等)。 ### 3.3 获取游戏记录 - **路径**:`/api/v1/getPlayerGameRecord` - **方法**:POST - **请求头**:`api-key`、`auth-token` #### 请求参数 | 参数名 | 必填 | 类型 | 说明 | | --- | --- | --- | --- | | username | 否 | string | 不传则不按用户筛选;数据仅来自「最近 7 天」时间窗(见下) | | start_create_time | 否 | string | 开始时间;与 `end_create_time` 均不传时,服务端默认最近 7 天 | | end_create_time | 否 | string | 结束时间 | | limit | 否 | int | 返回条数上限,默认 20;小于 1 或大于 2000 时按 20 处理 | **时间规则**:仅允许查询「当前服务器时间起向前 7 天」内的 `create_time`;`start_create_time` 与 `end_create_time` 的跨度不得超过 7 天;`end_create_time` 晚于当前时间时按当前时间截断。非法区间返回参数错误。 #### 响应说明 返回游玩记录列表(按 `id` 倒序,最多 `limit` 条),并附带 `dice_player`(包含 `id/username/phone`)。 ### 3.4 获取钱包流水 - **路径**:`/api/v1/getPlayerWalletRecord` - **方法**:POST - **请求头**:`api-key`、`auth-token` 参数与时间规则同 3.3(无 `page`,仅 `limit` 限制条数),返回钱包流水列表(附带 `dice_player`)。 ### 3.5 获取中奖券获取记录 - **路径**:`/api/v1/getPlayerTicketRecord` - **方法**:POST - **请求头**:`api-key`、`auth-token` 参数与时间规则同 3.3,返回中奖券记录列表(附带 `dice_player`)。 ### 3.6 平台钱包转入/转出 - **路径**:`/api/v1/setPlayerWallet` - **方法**:POST - **请求头**:`api-key`、`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 `。 ### 4.2 需要 token 的接口 请求头携带(任选一种): - `token: ` - `Authorization: Bearer ` 接口列表: - `/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 | 未授权 | 未携带 `api-key`、`auth-token` 或 `token` | | 402 | token 无效或已过期 | `auth-token/token` 过期、签名错误、被挤下线等 | | 403 | 鉴权失败 | `api-key` 无效、`secret` 错误、签名验证失败、时间戳无效等 | | 404 | 资源不存在 | 用户不存在等 | | 422 | 业务逻辑错误 | 余额不足、业务校验失败等 | | 500 | 服务器内部错误 | 服务端异常或配置缺失 | --- ## 6. 联调建议 - **时间戳校验**:`/api/v1/authToken` 会校验 `time` 与服务器时间差(默认容忍 300 秒),请确保平台服务器时间同步。 - **token 失效处理**:当 `code=402` 时,按业务类型重新获取 `auth-token` 或重新登录获取 `token`。 - **语言**:如需英文提示,请在请求头带 `lang: en`。