Files
gt-agent-company/docs/API.md
sexygoat 3c62cc1cd1 first
2026-03-31 18:41:52 +08:00

2071 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 企业端 / 代理端接口清单
baseUrl: https://api.example.com
> 所有接口统一走 `/api/auth` + `/api/admin/*`
> 使用 JWT 鉴权,通过 `user_type` 自动区分身份(企业 / 代理)
> 数据隔离由后端 GORM Callback 自动处理
---
# 🔐 认证接口(企业 + 代理共用)
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 登录 | POST | /api/auth/login | username + password返回 access_token / refresh_token / 权限 |
# 统一登录(后台+H5
## 接口信息
- **页面**/login
- **按钮名称**:登录
- **权限编码**auth_login
---
## URL
`POST /api/auth/login`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| username | string | 是 | 用户名 |
| password | string | 是 | 密码 |
| device | string | 否 | 设备标识 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
---
## data 字段(登录响应对象)
| 字段 | 类型 | 说明 |
|------|------|------|
| access_token | string | 访问令牌 |
| refresh_token | string | 刷新令牌 |
| expires_in | integer | 过期时间(秒) |
| user | object | 用户信息 |
---
## user 字段(用户信息对象)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | integer | 用户ID |
| username | string | 用户名 |
| phone | string | 手机号 |
| user_type | integer | 用户类型1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) |
| user_type_name | string | 用户类型名称 |
| enterprise_id | integer | 企业ID |
| enterprise_name | string | 企业名称 |
| shop_id | integer | 店铺ID |
| shop_name | string | 店铺名称 |
---
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"username": "admin",
"password": "password123",
"device": "web"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 3600,
"user": {
"id": 123,
"username": "admin",
"phone": "13800138000",
"user_type": 1,
"user_type_name": "超级管理员",
"enterprise_id": 1,
"enterprise_name": "测试企业",
"shop_id": 10,
"shop_name": "测试店铺"
}
}
}
```
---
## 认证
- **认证方式**:无需认证(开放接口)
- **响应中获取**access_token 用于后续请求的认证
---
## 使用说明
1. **登录流程**:提交用户名和密码获取 access_token
2. **Token 使用**:在后续请求 header 中使用 `Authorization: Bearer <access_token>`
3. **Token 刷新**:使用 refresh_token 刷新过期的 access_token
| 刷新 Token | POST | /api/auth/refresh-token | 使用 refresh_token 换新 token |
# 刷新 Token
## 接口信息
- **页面**/path/to/page
- **按钮名称**:刷新 Token
- **权限编码**permission_code
---
## URL
`POST /api/auth/refresh-token`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 登出 | POST | /api/auth/logout | 🔒 |
# 统一登出
## 接口信息
- **页面**/path/to/page
- **按钮名称**:统一登出
- **权限编码**permission_code
---
## URL
`POST /api/auth/logout`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 获取用户信息 | GET | /api/auth/me | 🔒 返回 user_type / shop_id / enterprise_id |
# 获取用户信息
## 接口信息
- **页面**/path/to/page
- **按钮名称**:获取用户信息
- **权限编码**permission_code
---
## URL
`GET /api/auth/me`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/auth/me
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 修改密码 | PUT | /api/auth/password | 🔒 |
# 修改密码
## 接口信息
- **页面**/path/to/page
- **按钮名称**:修改密码
- **权限编码**permission_code
---
## URL
`PUT /api/auth/password`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
---
# 🏢 企业端可用接口
| 模块 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 资产查询 | GET | /api/admin/assets/resolve/:identifier | 通过 ICCID / 虚拟号 / IMEI 查询 |
# 解析资产
## 接口信息
- **页面**/path/to/page
- **按钮名称**:解析资产
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/resolve/{identifier}`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/resolve/{identifier}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 实时状态 | GET | /api/admin/assets/:asset_type/:id/realtime-status | 查询持久化状态 |
# 资产实时状态
## 接口信息
- **页面**/path/to/page
- **按钮名称**:资产实时状态
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/{asset_type}/{id}/realtime-status`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/{asset_type}/{id}/realtime-status
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 刷新状态 | POST | /api/admin/assets/:asset_type/:id/refresh | 主动同步网关 |
# 刷新资产状态
## 接口信息
- **页面**/path/to/page
- **按钮名称**:刷新资产状态
- **权限编码**permission_code
---
## URL
`POST /api/admin/assets/{asset_type}/{id}/refresh`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 套餐列表 | GET | /api/admin/assets/:asset_type/:id/packages | 查询套餐记录 |
# 资产套餐列表
## 接口信息
- **页面**/path/to/page
- **按钮名称**:资产套餐列表
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/{asset_type}/{id}/packages`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码默认1 |
| page_size | integer | 否 | 每页条数默认50最大100 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/{asset_type}/{id}/packages?page=value&page_size=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 当前套餐 | GET | /api/admin/assets/:asset_type/:id/current-package | 当前生效套餐 |
# 当前生效套餐
## 接口信息
- **页面**/path/to/page
- **按钮名称**:当前生效套餐
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/{asset_type}/{id}/current-package`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/{asset_type}/{id}/current-package
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 设备停机 | POST | /api/admin/assets/device/:device_id/stop | 批量停机 |
# 设备停机
## 接口信息
- **页面**/path/to/page
- **按钮名称**:设备停机
- **权限编码**permission_code
---
## URL
`POST /api/admin/assets/device/{device_id}/stop`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 设备复机 | POST | /api/admin/assets/device/:device_id/start | 批量复机 |
# 设备复机
## 接口信息
- **页面**/path/to/page
- **按钮名称**:设备复机
- **权限编码**permission_code
---
## URL
`POST /api/admin/assets/device/{device_id}/start`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 单卡停机 | POST | /api/admin/assets/card/:iccid/stop | 单卡停机 |
# 单卡停机
## 接口信息
- **页面**/path/to/page
- **按钮名称**:单卡停机
- **权限编码**permission_code
---
## URL
`POST /api/admin/assets/card/{iccid}/stop`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 单卡复机 | POST | /api/admin/assets/card/:iccid/start | 单卡复机 |
# 单卡复机
## 接口信息
- **页面**/path/to/page
- **按钮名称**:单卡复机
- **权限编码**permission_code
---
## URL
`POST /api/admin/assets/card/{iccid}/start`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 企业卡列表 | GET | /api/admin/enterprises/:id/cards | 企业授权卡 |
# 企业卡列表
## 接口信息
- **页面**/path/to/page
- **按钮名称**:企业卡列表
- **权限编码**permission_code
---
## URL
`GET /api/admin/enterprises/{id}/cards`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码 |
| page_size | integer | 否 | 每页数量 |
| status | integer | 否 | 卡状态 |
| carrier_id | integer | 否 | 运营商ID |
| iccid | string | 否 | ICCID模糊查询 |
| virtual_no | string | 否 | 虚拟号(模糊查询) |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/enterprises/{id}/cards?page=value&page_size=value&status=value&carrier_id=value&iccid=value&virtual_no=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 企业设备列表 | GET | /api/admin/enterprises/:id/devices | 企业授权设备 |
# 企业设备列表
## 接口信息
- **页面**/path/to/page
- **按钮名称**:企业设备列表
- **权限编码**permission_code
---
## URL
`GET /api/admin/enterprises/{id}/devices`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码 |
| page_size | integer | 否 | 每页数量 |
| virtual_no | string | 否 | 虚拟号(模糊搜索) |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/enterprises/{id}/devices?page=value&page_size=value&virtual_no=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
---
## ❌ 企业端不可用接口
- 钱包相关(/assets/:type/:id/wallet
- 刷新资产(部分写操作)
- 订单创建 / 套餐购买
- 所有管理类接口(账号 / 角色 / 运营商等)
---
# 🏪 代理端可用接口
| 模块 | 方法 | 路径 |
|------|------|------|
| 资产查询 | GET | /api/admin/assets/resolve/:identifier |
| 实时状态 | GET | /api/admin/assets/:asset_type/:id/realtime-status |
| 刷新状态 | POST | /api/admin/assets/:asset_type/:id/refresh |
| 套餐列表 | GET | /api/admin/assets/:asset_type/:id/packages |
| 当前套餐 | GET | /api/admin/assets/:asset_type/:id/current-package |
| 设备停/复机 | POST | /api/admin/assets/device/:device_id/stop / start |
| 单卡停/复机 | POST | /api/admin/assets/card/:iccid/stop / start |
| 资产钱包 | GET | /api/admin/assets/:type/:id/wallet |
# 资产钱包概况
## 接口信息
- **页面**/path/to/page
- **按钮名称**:资产钱包概况
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/{asset_type}/{id}/wallet`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/{asset_type}/{id}/wallet
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 钱包流水 | GET | /api/admin/assets/:type/:id/wallet/transactions |
# 资产钱包流水列表
## 接口信息
- **页面**/path/to/page
- **按钮名称**:资产钱包流水列表
- **权限编码**permission_code
---
## URL
`GET /api/admin/assets/{asset_type}/{id}/wallet/transactions`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码默认1 |
| page_size | integer | 否 | 每页数量默认20最大100 |
| transaction_type | string | 否 | 交易类型过滤recharge/deduct/refund |
| start_time | string | 否 | 开始时间RFC3339 |
| end_time | string | 否 | 结束时间RFC3339 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/assets/{asset_type}/{id}/wallet/transactions?page=value&page_size=value&transaction_type=value&start_time=value&end_time=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 佣金概览 | GET | /api/admin/my/commission-summary |
# 我的佣金概览
## 接口信息
- **页面**/path/to/page
- **按钮名称**:我的佣金概览
- **权限编码**permission_code
---
## URL
`GET /api/admin/my/commission-summary`
---
## 请求参数
无请求参数
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/my/commission-summary
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 佣金明细 | GET | /api/admin/my/commission-records |
# 我的佣金明细
## 接口信息
- **页面**/path/to/page
- **按钮名称**:我的佣金明细
- **权限编码**permission_code
---
## URL
`GET /api/admin/my/commission-records`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码 |
| page_size | integer | 否 | 每页数量 |
| commission_source | string | 否 | 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) |
| iccid | string | 否 | ICCID模糊查询 |
| virtual_no | string | 否 | 设备虚拟号(模糊查询) |
| order_no | string | 否 | 订单号(模糊查询) |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/my/commission-records?page=value&page_size=value&commission_source=value&iccid=value&virtual_no=value&order_no=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 佣金统计 | GET | /api/admin/my/commission-stats |
# 我的佣金统计
## 接口信息
- **页面**/path/to/page
- **按钮名称**:我的佣金统计
- **权限编码**permission_code
---
## URL
`GET /api/admin/my/commission-stats`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| shop_id | integer | 否 | 店铺ID |
| start_time | string | 否 | 开始时间 |
| end_time | string | 否 | 结束时间 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/my/commission-stats?shop_id=value&start_time=value&end_time=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 每日佣金 | GET | /api/admin/my/commission-daily-stats |
# 我的每日佣金统计
## 接口信息
- **页面**/path/to/page
- **按钮名称**:我的每日佣金统计
- **权限编码**permission_code
---
## URL
`GET /api/admin/my/commission-daily-stats`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| shop_id | integer | 否 | 店铺ID |
| start_date | string | 否 | 开始日期YYYY-MM-DD |
| end_date | string | 否 | 结束日期YYYY-MM-DD |
| days | integer | 否 | 查询天数默认30天 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/my/commission-daily-stats?shop_id=value&start_date=value&end_date=value&days=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 发起提现 | POST | /api/admin/my/withdrawal-requests |
# 发起提现申请
## 接口信息
- **页面**/path/to/page
- **按钮名称**:发起提现申请
- **权限编码**permission_code
---
## URL
`POST /api/admin/my/withdrawal-requests`
---
## 请求参数
### Body 参数application/json
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| param_name | string | 是 | 参数说明 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```json
{
"param_name": "value"
}
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
| 提现记录 | GET | /api/admin/my/withdrawal-requests |
# 我的提现记录
## 接口信息
- **页面**/path/to/page
- **按钮名称**:我的提现记录
- **权限编码**permission_code
---
## URL
`GET /api/admin/my/withdrawal-requests`
---
## 请求参数
### Query 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | integer | 否 | 页码 |
| page_size | integer | 否 | 每页数量 |
| status | integer | 否 | 状态1=待审批, 2=已通过, 3=已拒绝) |
| start_time | string | 否 | 申请开始时间 |
| end_time | string | 否 | 申请结束时间 |
---
## 响应说明
### Response 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| code | integer | 响应码 |
| msg | string | 响应消息 |
| timestamp | string | 时间戳 |
| data | object | 返回数据 |
### data 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| field_name | string | 字段说明 |
---
## 错误响应
| HTTP 状态码 | 说明 |
|------------|------|
| 400 | 请求参数错误 |
| 401 | 未认证或认证已过期 |
| 403 | 无权访问 |
| 500 | 服务器内部错误 |
---
## 请求示例
```
GET /api/admin/my/withdrawal-requests?page=value&page_size=value&status=value&start_time=value&end_time=value
```
---
## 响应示例
```json
{
"code": 0,
"msg": "success",
"timestamp": "2024-03-30T10:30:00Z",
"data": {
"field_name": "value"
}
}
```
---
# 📊 接口可用性矩阵
```
┌────────────────────────┬──────────┬──────────┬───────────────┐
│ 接口模块 │ 企业端 │ 代理端 │ 备注 │
├────────────────────────┼──────────┼──────────┼───────────────┤
│ 认证(登录/登出/me │ ✅ │ ✅ │ 共用 │
│ 资产解析 │ ✅ │ ✅ │ │
│ 实时状态 │ ✅ │ ✅ │ │
│ 刷新资产 │ ❌ │ ✅ │ 企业只读 │
│ 套餐列表/当前套餐 │ ✅ │ ✅ │ │
│ 停复机(设备+单卡) │ ✅ │ ✅ │ │
│ 资产钱包/流水 │ ❌ │ ✅ │ 企业无钱包 │
│ 佣金/提现 │ ❌ │ ✅ │ 企业无佣金 │
│ 企业卡列表 │ ✅ │ ✅ │ │
│ 企业设备列表 │ ✅ │ ✅ │ │
│ 订单/购买/充值 │ ❌ │ ❌(*) │ *代理走后台 │
│ 管理类(账号/角色等) │ ❌ │ ❌(*) │ *后台管理 │
└────────────────────────┴──────────┴──────────┴───────────────┘
```
---
# ⚠️ 前端注意事项
企业端查询接口:
- `/api/admin/enterprises/:id/cards`
- `/api/admin/enterprises/:id/devices`
👉 `:id` 获取方式:
```js
const { enterprise_id } = await getUserInfo() // /api/auth/me
```
然后拼接:
```js
const url = `/api/admin/enterprises/${enterprise_id}/cards`
```
---
# ✅ 总结
- 所有接口统一鉴权JWT
- 企业 / 代理权限通过 `user_type` 自动区分
- 数据隔离后端自动处理(无需前端关心)
- 前端只需控制:
- 是否展示功能
- 是否调用接口