1. 页面概览

报文实验室是 LightSwift 的报文构造与解析工具页,路由 /swift/messages,对应源码 action/web/src/views/SwiftMessagePage.vue(M5.4c)。核心能力分四块:报文生成(按类型表单生成 pacs.008 / pacs.002 / mt103 / aero.pacs.001 报文,结果支持 XML 原文 / JSON 结构化 / MT 文本三种视图);报文解析(粘贴报文原文显示结构化 JSON);报文校验(返回 {valid, errors[]} 红绿提示);国密签名 / 验签(SM3 摘要 + SM2 签名,展示签名 hex 与哈希)。

生成与签名结果会记录到本地历史表,可回查报文全文或载入解析区。一句话总结:报文实验室是 LightSwift 全报文类型的生成、解析、校验与国密签名验签一体化工作台。

2. 访问入口

3. 界面布局

+--------------------------------------------------------------+
| 子导航:工作台 | 报文实验室(激活) | GAC 报文工具 | HCC 管控台     |
+--------------------------------------------------------------+
| 页头:报文实验室  报文类型 n 种  [刷新类型]                      |
+--------------------------------------------------------------+
| 报文生成(card):报文类型▾ 币种▾ 金额(元)                     |
|   按类型切换业务字段(pacs/aero/mt103/pacs.002 各自表单块)      |
|   [生成报文]                                                    |
+--------------------------------------------------------------+
| 生成结果(card,生成后出现):XML 原文 | JSON 结构化 | MT 文本     |
|   SM3 摘要 + [解析为 JSON][校验][签名]                          |
+--------------------------------------------------------------+
| 报文解析 / 校验(card):textarea + [解析][校验] + 结果区        |
+--------------------------------------------------------------+
| 国密签名 / 验签(card):报文原文 + SM2 私钥/公钥 hex + 签名 hex  |
|   [签名][验签] + 签名/哈希/记录ID 与验签结果                    |
+--------------------------------------------------------------+
| 最近生成 / 签名报文(card):本地历史表(回查 / 载入解析)        |
+--------------------------------------------------------------+

各板块职责:子导航与页头提供页面切换与类型刷新;生成表单按所选报文类型动态切换字段;生成结果卡用三个 tab 展示不同格式并附带 SM3 摘要;解析/校验卡用于对任意报文原文做结构化与合法性检查;签名/验签卡完成国密 SM3+SM2 操作;历史表本地记录最近生成/签名项,可回查全文。

4. 交互元素

控件位置含义与作用
报文类型下拉框报文生成取值来自 GET /messages/types(pacs.008 / pacs.002 / mt103 / aero.pacs.001),切换即换表单字段
币种下拉框 / 金额输入报文生成金额单位为元,提交时 yuanToFen 转定点分 amount_cents(int64 字符串);mt103 时币种置灰
生成报文按钮报文生成POST /messages/generate,成功后自动切到对应格式 tab 并写入历史
结果 tab(XML 原文 / JSON 结构化 / MT 文本)生成结果format 展示原文或提示切换;JSON 结构化需先点「解析为 JSON」
解析为 JSON / 校验 / 签名生成结果对生成报文调 POST /messages/parse/validate/sign
解析 / 校验按钮解析卡对粘贴文本调 POST /messages/parse(结果 JSON 化展示)与 /validate(红/绿提示 + errors 列表)
签名 / 验签按钮签名卡POST /messages/sign(SM2 私钥 hex,可留空触发后端提示)与 /verify(需公钥 hex + 签名 hex)
回查 / 载入解析历史表GET /messages/{id} 展示报文全文,或把 content 载入解析区 textarea

5. 后端关联

API 客户端swiftClient.js,baseURL /swift-api/v1,timeout 30000;成功 {code:0, data} 自动解包。

端点表

方法路径用途
GET/messages/types报文类型 / 币种 / aero 服务类型元数据
POST/messages/generatemsg_type 生成报文,返回 {msg_id, msg_type, format, content, hash}
POST/messages/parse解析报文原文 {content} 返回结构化 JSON
POST/messages/validate校验报文,返回 {valid, errors[], msg_type}
POST/messages/signSM3 摘要 + SM2 签名,返回 {signature, hash, record_id}
POST/messages/verify验签 {content, pub_key_hex, signature} 返回 {valid}
GET/messages/:id按 ID 回查报文全文

关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:报文类型加载失败 / 类型数为 0

现象:页头显示「报文类型 0 种」或弹「报文类型加载失败」。

原因GET /messages/types 失败,后端 18084 未启动或 token 失效。

处理:确认后端进程存活、重新登录后再进页面;Network 面板查看 401/404。

问题 2:生成失败提示金额相关错误

现象:点「生成报文」报错。

原因:金额非正数或格式非法,yuanToFen 返回 "0" 后端拒绝。

处理:金额输入需大于 0 的数字(默认 50000000),重新生成。

问题 3:验签一直失败

现象:「验签」结果始终为「验签失败:签名与报文不匹配」。

原因:公钥 hex / 签名 hex 与报文原文不匹配,或签名 hex 为空、私钥留空导致签名未生成。

处理:先用「签名」生成一组 {signature, hash},再原样回填签名 hex 与对应 HCC 证书公钥验签。

问题 4:刷新页面后历史记录消失

现象:历史表为空,之前生成的报文找不到。

原因:历史为前端内存记录,刷新即丢。

处理:生成前先记下 msg_id,刷新后可点「回查」用 GET /messages/{id} 找回,或在 GAC 页发起支付让报文落到后端。

8. 已知缺陷与边界

说明
历史仅内存刷新页面历史清空,无持久化
私钥无获取接口仿真环境无公开私钥获取入口,演示可留空让后端提示
JSON 结构化需手动触发生成后 JSON tab 默认无数据,必须点「解析为 JSON」
无报文删除历史表只提供回查与载入解析,无删除操作