Files
junhong_cmp_fiber/docs/前端建设/C端H5页面接口矩阵.md
break 5ba227eff5
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m8s
111
2026-07-29 14:58:28 +08:00

177 lines
9.5 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.
# C 端 H5 页面接口矩阵
> C 端是独立 H5使用个人客户体系和 `/api/c/v1`,不复用管理 Web/H5 的账号密码登录、菜单或角色。
## 一、C 端产品定位
当前 C 端是“围绕资产提供查询、充值、购包和设备控制”的服务 H5不是完整电商商城。
客户通常从资产二维码、设备标签或外部链接进入,通过资产标识完成验证和微信身份登录。登录后可查看本人绑定的卡或设备,并围绕该资产操作。
首期不应设计购物车、商品分类、收货地址簿等页面,因为当前没有对应后端能力。
## 二、进入与登录流程
```mermaid
sequenceDiagram
participant U as 客户
participant H as C端H5
participant A as 后端
participant W as 微信
U->>H: 扫码或输入资产标识
H->>A: POST /auth/verify-asset
A-->>H: asset_token、资产类型、微信配置
H->>W: 公众号OAuth或小程序登录
W-->>H: code
H->>A: POST /auth/wechat-login 或 miniapp-login
A-->>H: JWT、客户信息、need_bind_phone
alt 需要绑定手机号
H->>A: POST /auth/send-code
H->>A: POST /auth/bind-phone
end
H->>A: GET /asset/info
A-->>H: 资产首页数据
```
关键约束:
- `verify-asset` 支持 ICCID、虚拟号、MSISDN、IMEI、SN。
- 设备内绑定卡不能以独立卡身份登录,应提示客户使用设备标识。
- `asset_token` 是短期登录凭证,不等同于登录后的 JWT。
- C 端 JWT 由签名和 Redis 当前 Token 双重校验;同一客户后登录可能使旧会话失效。
- C 端没有 Refresh Token 接口,认证失效后重新走资产验证和微信登录。
## 三、页面矩阵
### 3.1 启动、登录和账户
| 页面 | 输入 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 启动初始化 | 当前完整 URL | `app_id`、JSSDK 配置、环境错误 | 初始化微信能力 | `GET /wechat/appid``GET /wechat/jssdk-config` |
| 资产验证 | 资产标识 | 资产类型、脱敏资产摘要、登录提示 | 验证并获取 `asset_token` | `POST /auth/verify-asset` |
| 微信登录 | `asset_token`、OAuth `code` | 客户、是否新用户、是否需绑手机、Token | 公众号/小程序登录 | `POST /auth/wechat-login``POST /auth/miniapp-login` |
| 手机号绑定 | 手机号、验证码 | 绑定结果 | 发送验证码、绑定、更换手机号 | `/auth/send-code``/auth/bind-phone``/auth/change-phone` |
| 个人资料 | 无或昵称、头像 | 客户 ID、昵称、头像、手机号、状态 | 查看、更新 | `GET|PUT /profile` |
| 退出登录 | 无 | 无 | 使当前 Token 失效 | `POST /auth/logout` |
公开接口必须在没有 Bearer Token 时也能访问:微信配置、资产验证、微信/小程序登录、发送验证码。
### 3.2 资产首页
| 区块 | 关键展示字段 | 交互 | 接口 |
| --- | --- | --- | --- |
| 资产身份 | `asset_type`、主标识、ICCID/虚拟号/IMEI/SN、设备名 | 复制标识 | `GET /asset/info` |
| 状态 | 业务状态、网络/在线状态、实名状态及名称、最后同步时间 | 刷新 | `GET /asset/info``POST /asset/refresh` |
| 流量 | 总量、已用、剩余、使用比例、周期 | 查看套餐历史 | `GET /asset/info``GET /asset/package-history` |
| 当前套餐 | 套餐名、类型、生效/到期、预计最终到期、排队信息 | 查看可购套餐 | `GET /asset/info` |
| 钱包 | 余额、冻结金额、资产类型 | 充值、查看流水 | `GET /wallet/detail` |
| 实名 | `effective_realname_policy``realname_required``realname_status` | 去实名 | `GET /asset/info``GET /realname/link` |
| 支付能力 | `allowed_payment_methods` | 控制购买和充值按钮 | `GET /asset/info` |
前端不得根据“卡还是设备”自行推断实名策略和支付方式。
### 3.3 套餐购买
| 页面 | 主要输入/筛选 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 可购套餐 | 资产标识、分页/类型(以 OpenAPI 为准) | 套餐 ID、名称、系列、类型、流量、周期、售价、上下架/可购状态、有效期说明 | 选择套餐 | `GET /asset/packages` |
| 下单确认 | 资产标识、套餐 ID、支付方式、应用类型 | 资产、套餐、价格、实名要求、强充提示、允许支付方式 | 创建订单 | `POST /orders/create` |
| 支付 | 订单 ID | 应付金额、支付方式、订单状态 | 钱包支付、微信支付、支付宝支付 | `POST /orders/:id/pay` |
| 订单列表 | 状态、分页 | 订单号、资产、套餐、金额、支付方式、状态名称、创建时间 | 查看详情 | `GET /orders` |
| 订单详情 | 订单 ID | 订单、套餐、资产、金额、支付、状态时间、权益结果 | 重新支付 | `GET /orders/:id` |
调用顺序:
1. 先查询 `/asset/info`,取得实名策略和允许支付方式。
2. 查询 `/asset/packages`
3. 提交 `/orders/create`
4. 如果响应已包含强充支付参数,按响应拉起支付。
5. 普通待支付订单调用 `/orders/:id/pay`
6. 钱包支付成功后直接刷新详情;第三方支付返回页面后重新查询订单详情。
当前没有独立 C 端支付状态接口,也没有客户端主动取消订单接口。页面通过订单详情确认后端最终状态。
### 3.4 钱包与充值
| 页面 | 输入/筛选 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 钱包详情 | 资产标识 | 资产类型/ID、余额、冻结金额、可用余额 | 进入充值 | `GET /wallet/detail` |
| 钱包流水 | 类型、时间、分页 | 流水号、变动金额、前后余额、业务类型、关联订单、状态、时间 | 查看关联业务 | `GET /wallet/transactions` |
| 充值校验 | 资产标识、金额/场景 | 最低/最高金额、允许支付方式、实名/强充规则 | 进入充值 | `GET /wallet/recharge-check` |
| 创建充值 | 资产、金额、支付方式、应用类型、幂等请求标识 | 充值单号、支付参数或支付宝链接、状态 | 拉起支付 | `POST /wallet/recharge` |
| 充值记录 | 状态、分页 | 充值单号、金额、方式、支付状态、到账状态、时间 | 查看详情 | `GET /wallet/recharges``GET /recharge-orders` |
| 充值详情 | 充值订单 ID | 金额、资产、渠道、第三方单号、支付/到账时间、状态名称 | 刷新状态 | `GET /recharge-orders/:id` |
充值只使用接口返回的支付方式。钱包不能给自己钱包充值,因此强充和普通充值通常只提供微信、支付宝等第三方方式。
### 3.5 实名
| 页面 | 输入 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 实名引导 | 资产标识 | 是否需要实名、实名状态、模式、运营商、提示 | 获取实名链接 | `GET /realname/link` |
可能的策略:
- `none`:无需实名。
- `before_order`:未实名时禁止充值或购买。
- `after_order`:可先购买,支付后继续引导实名。
页面必须使用 `effective_realname_policy`,不能只读资产原始策略。
### 3.6 设备控制
仅设备资产显示该模块。
| 页面/动作 | 输入 | 展示字段 | 接口 |
| --- | --- | --- | --- |
| 卡槽列表 | 设备标识 | 卡槽号、ICCID、运营商、网络/实名/激活状态、当前卡 | `GET /device/cards` |
| 切卡 | 设备标识、目标卡/卡槽 | 操作结果、当前卡 | `POST /device/switch-card` |
| 配置 WiFi | SSID、密码等 DTO 字段 | 操作结果 | `POST /device/wifi` |
| 重启 | 设备标识 | 操作结果 | `POST /device/reboot` |
| 恢复出厂 | 设备标识、确认 | 操作结果 | `POST /device/factory-reset` |
重启、切卡、WiFi、恢复出厂都应防止重复点击恢复出厂必须二次确认。
### 3.7 换货
| 页面 | 输入 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 待处理换货提醒 | 当前登录资产 | 换货单号、旧资产、状态、提交期限 | 进入收货信息 | `GET /exchange/pending` |
| 收货信息 | 收件人、手机号、地区、详细地址 | 换货摘要 | 提交 | `POST /exchange/:id/shipping-info` |
C 端不能创建、发货、完成或取消换货,只负责查询待补资料换货单并提交收货信息。
### 3.8 通知
| 页面 | 筛选/输入 | 展示字段 | 操作 | 接口 |
| --- | --- | --- | --- | --- |
| 未读提示 | 无 | 未读数 | 打开通知中心 | `GET /notifications/unread-count` |
| 通知列表 | 类型、状态、分页 | 类型、标题、内容、风险、关联资源、时间、已读状态 | 标记已读 | `GET /notifications``PUT /notifications/:id/read` |
| 全部已读 | 无 | 无 | 全部标记已读 | `PUT /notifications/read-all` |
## 四、全局交互状态
C 端至少统一处理:
- 首次加载、局部刷新、空数据和网络异常。
- Token 失效后回到资产验证入口,并保留当前进入链接。
- 403 表示当前客户未绑定该资产或无权操作,不显示“资产不存在”的差异提示。
- 支付取消、支付失败、支付结果未知和支付成功。
- Gateway 操作已提交但结果未知,禁止无限自动重试。
- 订单、充值、换货使用后端 `status_name` 展示中文状态。
## 五、当前缺口
以下页面没有现成接口支撑,不纳入首期:
- 独立商品详情和商品分类。
- 购物车。
- 收货地址簿。
- 客户主动取消订单。
- 客户主动申请退款。
- 客户资产列表和主动切换当前资产。
- 独立支付状态查询。
若产品要求其中任一能力,应先作为独立后端用例设计,不能只在前端模拟。