API 接口文档
Base URL:
/api认证方式:Bearer Token(Sanctum) 所有请求/响应均为Content-Type: application/json
目录
- 认证
- 登录
- 退出登录
- 玩家管理
- 创建玩家
- 玩家积分变更(充值/兑换)
- 订单记录查询
- 游戏记录查询
- 获取玩家余额
- 重置玩家密码
- 游戏
- 游戏列表
- 获取游戏链接
- 踢出游戏中玩家
- 代理管理
- 获取代理余额
- 重置代理密码
- 创建代理
- 代理积分变更(充值/兑换)
- 代理订单记录查询
认证
1. 登录
GET / POST /api/login
无需认证。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 账号名 |
| password | string | 是 | 登录密码 |
响应示例
成功 (200)
{
"code": 200,
"userinfo": {
"AgentID": 1001,
"AgentAccount": "agent01",
"Score": 9999.00
},
"token": "1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
失败 (422)
{
"code": 422,
"message": "Password error"
}
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 200 | 200 | — | 登录成功 |
| 422 | 422 | Account does not exist | 账号不存在 |
| 422 | 422 | Password error | 密码错误 |
| 422 | 422 | Account is frozen | 账号已冻结 |
2. 退出登录
GET /api/logout
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
响应示例
成功 (200)
{
"code": 200,
"message": "success"
}
玩家管理
3. 创建玩家
POST /api/create_player
需要 Bearer Token 认证 同一账号名并发请求将被拒绝(幂等锁 3 秒)
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| account | string | 是 | 玩家账号,长度 6~24 位 |
| password | string | 是 | 玩家密码,长度 6~24 位 |
| recharge_amount | integer | 否 | 注册时同步充值金额(元),默认为 0 |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"userinfo": {
"account": "player001",
"password": "123456"
}
}
失败
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 422 | 422 | Player already exists for this account name | 账号已存在 |
| 422 | 422 | Score input error | 充值金额有误 |
| 422 | 422 | Insufficient score | 代理积分余额不足 |
| 429 | 429 | Duplicate request | 重复请求(并发锁) |
| 500 | 500 | Internal Server Error. Something went wrong | 服务器内部错误 |
4. 玩家积分变更(充值/兑换)
POST /api/change_score
需要 Bearer Token 认证 同一 user_id 并发请求将被拒绝(Redis 锁 3 秒)
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| type | integer | 否 | 操作类型:1 充值(默认),2 兑换 |
| recharge_amount | integer | 是 | 操作金额(元),必须大于 0 |
| remark | string | 否 | 备注,最大 512 字符 |
响应示例
成功 (200)
{
"code": 200,
"message": "success"
}
失败
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 422 | 422 | Exception operation, please try again | 并发锁冲突,请稍后重试 |
| 422 | 422 | Account does not exist | 玩家不存在或无权限操作 |
| 422 | 422 | Score input error | 金额有误 |
| 422 | 422 | Insufficient score | 充值时代理余额不足 / 兑换时玩家积分不足 |
| 500 | 500 | Internal Server Error. Something went wrong | 服务器内部错误 |
5. 订单记录查询
POST /api/order_records
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| start_date | string | 是 | 查询开始日期,格式 Y-m-d,如 2024-01-01 |
| end_date | string | 是 | 查询结束日期,格式 Y-m-d,须 >= start_date |
| type | integer | 否 | 记录类型:1 充值记录(默认),2 兑换记录 |
| per_page | integer | 否 | 每页条数,可选值:10、20、50、100、200 |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"total": 100,
"lists": [
{
"UserID": 10001,
"SourceScore": 100.00,
"ChangeScore": 50.00,
"TargetScore": 150.00,
"InsertTime": "2024-01-15 12:30:00",
"OpID": 1001
}
]
}
}
字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| UserID | int | 玩家 ID |
| SourceScore | float | 变更前积分(元) |
| ChangeScore | float | 变更积分(元,正数充值/负数兑换) |
| TargetScore | float | 变更后积分(元) |
| InsertTime | string | 操作时间 |
| OpID | int | 操作代理 ID |
6. 游戏记录查询
POST /api/game_records
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| start_date | string | 是 | 查询开始日期,格式 Y-m-d,如 2024-01-01 |
| end_date | string | 是 | 查询结束日期,格式 Y-m-d,须 >= start_date |
| per_page | integer | 否 | 每页条数,可选值:10、20、50、100、200 |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"total": 50,
"lists": [
{
"UserID": 10001,
"Accounts": "player001",
"NickName": "player001",
"Profit": 200,
"Gain": 500,
"Loss": 300,
"StartTime": "2024-01-15 10:00:00",
"EndTime": "2024-01-15 10:30:00",
"scoreInfo": {
"Score": 15000,
"UserID": 10001
}
}
]
}
}
字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| UserID | int | 玩家 ID |
| Accounts | string | 玩家账号 |
| NickName | string | 玩家昵称 |
| Profit | int | 盈利(积分,分为单位) |
| Gain | int | 赢分(积分,分为单位) |
| Loss | int | 输分(积分,分为单位) |
| StartTime | string | 游戏开始时间 |
| EndTime | string | 游戏结束时间 |
| scoreInfo | object | 当前积分信息 |
游戏
7. 游戏列表
GET /api/game_list
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"ip_list": ["192.168.1.1"],
"slot": [
[101, 1, [[100, 8000, 0, 1001]], 0]
],
"chess": [
[201, 2, [[200, 8001, 0, 1002]], 0]
]
}
}
data 字段说明
| 字段名 | 说明 |
|---|---|
| ip_list | 服务器 IP 列表,游戏房间的 ServerAddr 以下标索引引用 |
| 其他分类键 | 各游戏类型分组,每条记录格式:[KindID, TypeID, [房间列表], MaintainStatus] |
房间列表字段(数组索引对应):
| 索引 | 说明 |
|---|---|
| 0 | MinEnterScore(最低入场积分) |
| 1 | ServerPort(服务器端口) |
| 2 | IP 索引(对应 ip_list 数组下标) |
| 3 | ServerID(服务器 ID) |
失败 (500)
{
"code": 500,
"message": "Internal Server Error. Something went wrong",
"data": []
}
8. 获取游戏链接
POST /api/get_game_url
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| game_id | integer | 是 | 游戏 KindID |
| back_url | string | 是 | 回调地址 |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"game_url": "https://yoloh5.play8.cyou/play85/?UserID=10001&token=xxxx&ChannelID=10022&userGUID=xxxx&GameID=101&ServerID=1001&ServerAddr=192.168.1.1&serverPort=8000&lang=en&apiType=1"
}
失败
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 422 | 422 | Account does not exist | 玩家不存在 |
| 422 | 422 | Game not available | 游戏房间不可用 |
| 500 | 500 | Internal Server Error. Something went wrong | 服务器内部错误 |
9. 踢出游戏中玩家
POST /api/kick_player
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success"
}
失败
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 422 | 422 | Account does not exist | 玩家不存在 |
| 500 | 500 | Internal Server Error. Something went wrong | 服务器内部错误 |
10. 获取玩家余额
POST /api/get_player_balance
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"user_id": 1,
"balance": 1,
"query_time": "xxxx-xx-xx xx:xx:xx.xxxx"
}
}
16. 重置玩家密码
POST /api/reset_player_password
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_id | integer | 是 | 玩家 UserID |
| new_password | string | 是 | 新密码(长度6-24) |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success"
}
代理管理
11. 获取代理余额
POST /api/get_agent_balance
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| agent_id | integer | 是 | 玩家 UserID |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"agent_id": 1,
"balance": 1,
"query_time": "xxxx-xx-xx xx:xx:xx.xxxx"
}
}
12. 重置代理密码
POST /api/reset_agent_password
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| agent_id | integer | 是 | 代理ID |
| new_password | string | 是 | 新密码(长度6-24) |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success"
}
13. 创建代理
POST /api/create_agent
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| account | string | 是 | 账号(6-24位,必须包含数字和字母) |
| password | string | 是 | 密码(6-24位) |
| recharge_amount | integer | 否 | 充值金额 |
| role | string | 是 | store或者distributor |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"userinfo": {
"score": "xxx",
"account": "xxxxxx",
"password": "xxxxxx"
}
}
14. 代理积分变更(充值/兑换)
POST /api/change_agent_score
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| agent_id | integer | 是 | 代理ID |
| type | integer | 是 | 1-充值 2-兑换 |
| amount | integer | 否 | 金额 |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"agent_id": 13654,
"before_balance": 10,
"change_amount": -10,
"after_balance": 0
}
}
通用错误码
| HTTP 状态码 | code | 说明 |
|---|---|---|
| 200 | 200 | 请求成功 |
| 401 | — | 未认证,Token 无效或已过期 |
| 422 | 422 | 参数校验失败或业务逻辑错误 |
| 429 | — | 请求过于频繁(并发锁) |
| 500 | 500 | 服务器内部错误 |
15. 代理订单记录查询
POST /api/change_agent_score
需要 Bearer Token 认证
请求头
Authorization: Bearer {token}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| agent_id | integer | 否 | 代理ID |
| type | integer | 否 | 1-充值 2-兑换 |
| start_date | date | 是 | 开始日期 |
| end_date | date | 是 | 结束日期 |
| per_page | integer | 否 | 每页显示条数 |
| lang | string | 否 | 语言,可选值:en(默认)、cn、vn、pt |
响应示例
成功 (200)
{
"code": 200,
"message": "success",
"data": {
"total": 2,
"lists": [
{
"AgentID": 13654,
"SourceScore": "10.00",
"ChangeScore": "-10.00",
"TargetScore": "0.00",
"InsertTime": "2026-05-18 13:56:23",
"OpID": 10102,
"type": 2
},
{
"AgentID": 13654,
"SourceScore": "0.00",
"ChangeScore": "10.00",
"TargetScore": "10.00",
"InsertTime": "2026-05-18 13:55:52",
"OpID": 10102,
"type": 1
}
]
}
}
通用错误码
| HTTP 状态码 | code | 说明 |
|---|---|---|
| 200 | 200 | 请求成功 |
| 401 | — | 未认证,Token 无效或已过期 |
| 422 | 422 | 参数校验失败或业务逻辑错误 |
| 429 | — | 请求过于频繁(并发锁) |
| 500 | 500 | 服务器内部错误 |
认证说明
除 /api/login 外,所有接口均需在请求头中携带 Token:
Authorization: Bearer {登录接口返回的 token}
Token 采用 Laravel Sanctum 实现,每次登录会删除旧 Token 并生成新 Token,同一账号不支持多端同时在线。