Files
luo 4f281da778
All checks were successful
构建并部署前端到生产环境 / build-and-deploy (push) Successful in 1m11s
feat: 7月迭代
2026-07-27 18:13:19 +08:00

278 lines
10 KiB
Markdown
Raw Permalink 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.
# C 端所需接口文档
## 1. 通用约定
- 测试环境:`https://cmp-api.boss160.cn`
- 鉴权:除特别说明外,所有接口都需要登录后的 JWT。
```http
Authorization: Bearer <token>
Content-Type: application/json
```
- `identifier`:资产标识符,可传 SN、IMEI、虚拟号、ICCID 或 MSISDN长度 150。
- 金额单位:分。页面展示时转换为元,提交时仍传整数分。
- 成功响应:`code = 0`
- 错误响应:`400` 参数错误、`401` 未认证或过期、`403` 无权访问、`500` 服务端错误。
通用成功响应格式:
```json
{
"code": 0,
"data": {},
"msg": "success",
"timestamp": "2026-07-27T10:00:00+08:00"
}
```
错误响应格式:
```json
{
"code": 1001,
"data": {},
"msg": "参数验证失败",
"timestamp": "2026-07-27T10:00:00+08:00"
}
```
## 2. 接口清单
| 用途 | 方法 | 路径 |
| --- | --- | --- |
| 获取资产信息 | GET | `/api/c/v1/asset/info` |
| 充值前校验 | GET | `/api/c/v1/wallet/recharge-check` |
| 创建套餐订单 | POST | `/api/c/v1/orders/create` |
| 创建充值订单 | POST | `/api/c/v1/wallet/recharge` |
| 订单列表 | GET | `/api/c/v1/orders` |
| 订单详情 | GET | `/api/c/v1/orders/{id}` |
## 3. 获取资产信息
### 请求
```http
GET /api/c/v1/asset/info?identifier=1234567890
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `identifier` | string | 是 | 资产标识符150 个字符 |
### `data` 关键返回字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `asset_id` | integer | 资产 ID |
| `asset_type` | string | `card` 卡、`device` 设备 |
| `identifier` | string | 当前资产标识符 |
| `iccid` / `msisdn` | string | 卡 ICCID / 手机号 |
| `sn` / `imei` / `virtual_no` | string | 设备序列号 / IMEI / 虚拟号 |
| `device_name` / `device_model` | string | 设备名称 / 型号 |
| `carrier_name` / `carrier_type` | string | 运营商名称 / 类型(`CMCC``CUCC``CTCC``CBN` |
| `status` / `status_name` | integer / string | 资产归属状态:`1` 在库、`2` 已分销;卡沿用卡状态枚举 |
| `activation_status` / `activation_status_name` | integer / string | 激活状态:`0` 未激活、`1` 已激活 |
| `network_status` / `network_status_name` | integer / string | 网络状态:`0` 停机、`1` 开机 |
| `real_name_status` / `real_name_status_name` | integer / string | 实名状态:`0` 未实名、`1` 已实名 |
| `realname_policy` | string | 实名策略:`none``before_order``after_order` |
| `effective_realname_policy` | string | 当前实际生效的实名策略 |
| `realname_required` | boolean | 当前资产是否需要实名 |
| `allowed_payment_methods` | string[] | 允许的支付方式:`wallet``wechat``alipay` |
| `wallet_balance` | integer | 钱包余额,单位为分 |
| `current_package_id` | integer | 当前主套餐 ID无套餐时为 `0`,可用于续费 |
| `current_package` | string | 当前套餐名称,无套餐时为空 |
| `current_package_activated_at` | datetime / null | 当前主套餐开始时间 |
| `current_package_expires_at` | datetime / null | 当前主套餐到期时间 |
| `estimated_final_expires_at` | datetime / null | 预计最终到期时间 |
| `days_until_final_expiry` | integer/null | 距预计最终到期的上海自然日天数 |
| `expiry_estimate_status` | string | `exact` 精确、`waiting_activation` 待激活、`none` 无套餐、`invalid_data` 数据异常 |
| `is_expiring` | boolean | 是否临期(精确推算且剩余 015 天) |
| `enable_virtual_data` | boolean | 当前主套餐是否启用虚流量 |
| `real_total_mb` / `real_used_mb` | integer | 真实总量 / 真实已用量,单位 MB |
| `virtual_total_mb` / `virtual_used_mb` | integer / number | 业务停机阈值 / 展示已用量,单位 MB |
| `reduction_pct` | number | 展示增幅比例:`real_total_mb / virtual_total_mb - 1` |
| `cards` | object[] | 设备绑定卡列表,包含 ICCID、MSISDN、网络状态、实名状态、插槽位置等 |
| `device_realtime` | object/null | 设备实时信息包含在线状态、电量、信号、WiFi、客户端数等 |
页面流量展示建议:总量使用 `real_total_mb`;已用量在 `enable_virtual_data = true` 时使用 `virtual_used_mb`,否则使用 `real_used_mb`
## 4. 充值前校验
### 请求
```http
GET /api/c/v1/wallet/recharge-check?identifier=1234567890
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `identifier` | string | 是 | 资产标识符 |
### `data` 返回字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `allowed_payment_methods` | string[]/null | 当前允许的支付方式:`wallet``wechat``alipay` |
| `need_force_recharge` | boolean | 是否必须先完成强制充值 |
| `force_recharge_amount` | integer | 强制充值金额,单位为分 |
| `min_amount` | integer | 最小充值金额,单位为分 |
| `max_amount` | integer | 最大充值金额,单位为分 |
| `message` | string | 页面提示信息 |
| `trigger_type` | string | 强制充值触发类型 |
## 5. 创建套餐订单
### 请求
```http
POST /api/c/v1/orders/create
```
```json
{
"identifier": "1234567890",
"package_ids": [1001, 1002],
"payment_method": "wechat",
"app_type": "miniapp"
}
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `identifier` | string | 是 | 资产标识符 |
| `package_ids` | integer[] | 是 | 套餐 ID 列表 |
| `payment_method` | string | 是 | `wallet``wechat``alipay` |
| `app_type` | string | 微信支付时是 | `official_account` 公众号、`miniapp` 小程序 |
### `data` 返回字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `idempotent` | boolean | 是否返回了已存在的待支付订单 |
| `order_type` | string | `package` 套餐订单、`recharge` 充值订单 |
| `order` | object | 订单信息,见下表 |
| `linked_package_info` | object | 关联套餐和强制充值信息 |
| `recharge` | object/null | 自动充值信息 |
| `pay_config` | object/null | 微信支付参数 |
| `payment_link` | object/null | 支付宝或其他网页支付链接 |
`order` 主要字段:`order_id``order_no``created_at``payment_method``payment_status``payment_status_name``total_amount`
- `payment_status``1` 待支付、`2` 已支付、`3` 已取消、`4` 已退款。
- `linked_package_info``force_recharge_amount``package_names``total_package_amount``wallet_credit`,金额均为分。
- `recharge``recharge_id``recharge_no``amount``status``status_name``auto_purchase_status`
- `pay_config``app_id``nonce_str``package``pay_sign``sign_type``timestamp`
- `payment_link``copy_link``qr_link``payment_no``pay_expire_at`
## 6. 创建充值订单
### 请求
```http
POST /api/c/v1/wallet/recharge
```
```json
{
"amount": 1000,
"identifier": "1234567890",
"payment_method": "wechat",
"app_type": "miniapp"
}
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `amount` | integer | 是 | 充值金额110000000 分 |
| `identifier` | string | 是 | 资产标识符 |
| `payment_method` | string | 是 | `wechat` 微信支付、`alipay` 支付宝 |
| `app_type` | string | 微信支付时是 | `official_account``miniapp` |
### `data` 返回字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `recharge` | object | 充值信息:`recharge_id``recharge_no``amount``status` |
| `pay_config` | object/null | 微信支付参数:`app_id``nonce_str``package``pay_sign``sign_type``timestamp` |
| `payment_link` | object/null | 支付链接:`copy_link``qr_link``payment_no``pay_expire_at` |
`recharge.status``0` 待支付、`1` 已支付、`2` 已关闭。
## 7. 订单列表
### 请求
```http
GET /api/c/v1/orders?identifier=1234567890&page=1&page_size=10
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `identifier` | string | 是 | 资产标识符 |
| `payment_status` | integer | 否 | `1` 待支付、`2` 已支付、`3` 已取消、`4` 已退款 |
| `page` | integer | 是 | 页码,从 1 开始 |
| `page_size` | integer | 是 | 每页数量1100 |
### `data` 返回字段
```json
{
"items": [],
"page": 1,
"size": 10,
"total": 0
}
```
`items[]` 字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `order_id` / `order_no` | integer / string | 订单 ID / 订单号 |
| `asset_id` / `asset_type` | integer / string | 资产 ID / `card``device` |
| `asset_identifier` | string | 下单时资产标识快照;设备优先虚拟号,其次 IMEI |
| `package_ids` / `package_names` | array | 套餐 ID / 名称列表 |
| `payment_method` | string | `wallet``wechat``alipay` |
| `payment_status` / `payment_status_name` | integer / string | 支付状态及中文名称 |
| `total_amount` | integer | 订单总金额,单位为分 |
| `created_at` | string | 创建时间 |
## 8. 订单详情
### 请求
```http
GET /api/c/v1/orders/{id}
```
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `id` | integer | 是 | 订单 ID放在 URL 路径中 |
### `data` 返回字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `order_id` / `order_no` | integer / string | 订单 ID / 订单号 |
| `asset_id` / `asset_type` | integer / string | 资产 ID / `card``device` |
| `asset_identifier` | string | 下单时资产标识快照 |
| `packages` | object[] | 订单套餐明细 |
| `payment_method` | string | 支付方式 |
| `payment_status` / `payment_status_name` | integer / string | 支付状态及中文名称 |
| `total_amount` | integer | 订单总金额,单位为分 |
| `created_at` | string | 创建时间 |
| `paid_at` | string/null | 支付时间 |
| `completed_at` | string/null | 完成时间 |
`packages[]` 字段:`package_id``package_name``package_type``formal` 正式套餐、`addon` 加油包)、`price`(分)、`quantity`
## 9. 前端调用流程
1. 登录后保存 JWT后续请求统一携带 `Authorization: Bearer <token>`
2. 进入资产页面调用资产信息接口,并使用返回的 `allowed_payment_methods` 渲染支付方式。
3. 充值先调用充值前校验;若 `need_force_recharge = true`,使用后端返回的强制充值金额和提示。
4. 套餐购买或续费调用创建订单接口,`package_ids` 使用当前资产的 `current_package_id` 或历史订单的 `package_ids`
5. 充值调用创建充值订单接口。微信支付时必须传 `app_type`
6. 页面展示支付链接或支付参数后,支付结果通过订单详情等查询接口确认;不要仅根据前端跳转结果判断已支付。