AML/docs/KYC/Scanner/Scanner_Integration.md

215 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 扫描仪集成分析
## 前端扫描仪架构
```
ViewerScanModalComponent (UI组件)
PassportService (扫描服务层)
PassportReader.js (扫描仪SDK/驱动 - 位于 assets/js/)
WebSocket 连接
```
## 当前实现的 PassportReader.js
### WebSocket 连接
- **地址**: `ws://127.0.0.1:90`
- **消息协议**: JSON
### 请求格式
```javascript
{ Type: "Request", Command: "Get/Set", Operand: "OnLineStatus", Param: "True/False" }
{ Type: "Notify", Command: "Trigger", Operand: "ManualRecog", Param: "2" }
```
### 响应格式
```javascript
{ Type: "Notify", Operand: "CardContentText", Param: { ... } } // 文字结果
{ Type: "Notify", Operand: "Images", Param: { ... } } // 图片结果
{ Type: "Reply", Command: "Get", Operand: "OnLineStatus", Succeeded: "Y/N" }
```
---
## 第二款SDK: DKePassport (智能读证终端)
### WebSocket 连接
- **地址**: `ws://127.0.0.1:9090`
- **消息协议**: JSON
### 请求格式
```javascript
{ "command": "get", "operand": "name" } // 获取设备名称
{ "command": "set", "operand": "auto", "param": 1 } // 设置自动模式
{ "command": "scan", "param": "{\"timeout\":5}" } // 扫描证件
{ "command": "getPhoto", "param": 5 } // 获取照片
```
### 响应格式
```javascript
{
"data": {
"guestType": "100", // 旅客类型
"name": "张三", // 姓名
"sex": "1", // 性别
"birthday": "1990-01-01", // 出生日期
"cardType": "11", // 证件类型
"cardNo": "123456789012345678", // 证件号码
"nation": "01", // 民族
"nationalityArea": "CHN", // 国籍/地区
"curPhoto": "base64...", // 证件头像
"photo": "base64...", // 现场头像
...
}
}
```
### 支持的命令
| command | operand/param | 说明 |
|---------|----------------|------|
| get | name | 获取设备名称 |
| get | serialNo | 获取序列号 |
| get | model | 获取型号 |
| get | type | 获取类型 |
| set | auto=1 | 设置自动模式 |
| set | timeout=5 | 设置超时 |
| scan | timeout=5 | 扫描证件 |
| read | 5 | 读取数据 |
| readCode | 5 | 读取条码 |
| getPhoto | 5 | 获取照片 |
| scanRaw | - | 高级扫描 |
### 证件类型映射 (cardType)
```javascript
// 国内旅客
'11': '身份证'
'12': '居住证'
'13': '户口本'
'55': '港澳台居民居住证'
'93': '国内护照'
'95': '港澳通行证'
// 港澳台旅客
'16': '台湾居民来往大陆通行证'
'60': '港澳居民来往内地通行证'
// 国外旅客
'14': '国外护照'
'34': '外国人永久居留身份证'
```
### 旅客类型映射 (guestType)
```javascript
'100': '国内旅客'
'200': '港澳台旅客'
'300': '国外旅客'
```
## 关键差异对比
| 项目 | 当前SDK (Sinosecu) | 新SDK (DKePassport) |
|------|-------------------|---------------------|
| WebSocket端口 | 90 | 9090 |
| 请求格式 | `{Type, Command, Operand, Param}` | `{command, operand, param}` |
| 响应格式 | `{Type, Operand, Param}` | `{data: {...}}` |
| 图片字段 | `Param` (通过 onImageResult) | `curPhoto`, `photo` (在data内) |
| 触发扫描 | `triggerManualRead()` | `scan` 命令 |
## 替换影响分析
### 情况新SDK (DKePassport) 替代当前SDK
**需要修改的文件**:
| 文件 | 改动程度 | 说明 |
|------|----------|------|
| `assets/js/PassportReader.js` | **完全重写** | 新SDK命令格式完全不同 |
| `passport.service.ts` | **需要调整** | 回调适配新响应格式 |
| `viewer-scan-modal.component.ts` | **大概率不变** | UI逻辑不变 |
| 后端 | **大概率不变** | 前端传过来的数据格式需确认 |
### 适配层设计建议
为了最小化改动,建议创建适配层:
```javascript
// 新的 DKePassportReader.js
export class DKePassportReader {
constructor(options = {}) {
this.host = options.host || "ws://127.0.0.1:9090"
// ... 新SDK实现
}
// 适配现有接口
connect() {
// WebSocket连接
}
setParameter(param, value) {
// 转换: VIZ -> auto, RFID -> ?
}
onTextResult(data) {
// 将新格式转换为旧格式
}
onImageResult(images) {
// 从 data.curPhoto 获取图片
}
}
```
### PassportService 接口兼容方案
新SDK需要适配 `passport.service.ts` 的期望接口:
```typescript
// passport.service.ts 期望的接口
passportReader.onTextResult = (result) => { ... }
passportReader.onImageResult = (images) => { ... }
```
需要 `DKePassportReader` 在收到 `{data: {...}}` 时:
1.`data` 解析为符合现有期望的格式
2. 触发 `onTextResult``onImageResult` 回调
## 建议实施步骤
1. **创建新文件**: `assets/js/DKePassportReader.js`
2. **实现适配层**: 将DKePassport响应格式转换为现有格式
3. **修改 `passport.service.ts`**: 使用新Reader类
4. **测试**: 验证扫描流程完整性
## 相关文件路径
### 前端
| 文件 | 说明 |
|------|------|
| `AML_Frontend/src/assets/js/PassportReader.js` | 当前扫描仪SDK |
| `AML_Frontend/src/app/components/components-viewer/viewer-scan-modal/viewer-scan-modal.component.ts` | 扫描弹窗UI |
| `AML_Frontend/src/app/components/components-viewer/viewer-scan-modal/services/passport.service.ts` | 扫描服务层 |
| `AML_Frontend/src/app/modules/configuration/components/set-scan/set-scan.component.ts` | 扫描设置组件 |
### 新SDK参考
| 文件 | 说明 |
|------|------|
| `docs/KYC/Scanner/DKePassport-release-1.3.0/智能读证终端网页.html` | DKePassport SDK演示页面 |
## 版本信息
**文档版本**: v1.1
**创建日期**: 2026-04-30
**更新日期**: 2026-04-30