hn-readcard-go/README.md
2026-08-06 11:23:33 +08:00

105 lines
3.7 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.

# readcard-go
`card-read-service` 的 Go 版本,保持原有 HTTP 接口和响应格式并增加业务失败、panic、DLL 崩溃与异常退出日志。
## 构建和运行
### 打包环境要求
执行打包操作的电脑必须已经安装 Go 开发环境,并且 `go` 命令已加入系统 `PATH`。可以在命令行中执行以下命令检查:
```powershell
go version
```
能够正常输出 Go 版本信息即可,例如:
```text
go version go1.26.5 windows/amd64
```
不需要另外安装 32 位 Go。厂商 `CardReaderDLL.dll` 是 32 位 DLL打包脚本会自动设置 `GOOS=windows``GOARCH=386``CGO_ENABLED=0`,使用常规的 64 位 Go 环境即可生成 32 位程序。
最终使用 `dist/readcard-go.exe` 的电脑不需要安装 Go 环境,但必须复制完整的 `dist` 目录,不能只复制 exe 文件。
### 执行打包
在 PowerShell 中执行:
```powershell
.\build.ps1 -Version "1.0.0"
.\dist\readcard-go.exe
```
也可以直接双击项目根目录下的 `一键打包.bat`。脚本会自动调用 PowerShell 完成测试、构建和厂商依赖复制,成功后自动打开 `dist` 发布目录;打包版本可修改批处理文件顶部的 `BUILD_VERSION`
在 macOS 中可使用 `一键打包.sh` 交叉编译 Windows 32 位产物:
```bash
chmod +x ./一键打包.sh
./一键打包.sh
```
只检查打包环境、不执行构建:
```bash
./一键打包.sh --check
```
macOS 脚本会检查 Go 版本和 `windows/386` 目标,编译 Windows 测试程序(不在 macOS 上运行),生成 `dist/readcard-go.exe`,并复制 `config.json` 和完整的厂商 DLL 目录。最终产物仍需在 Windows 真机上验证。
构建脚本会运行测试、生成 `dist/readcard-go.exe`,并把原项目的 `package/DWCardReaderDLL` 复制到发布目录。开发运行可执行:
```powershell
.\run.ps1
```
启动后:
- 健康检查:`GET http://127.0.0.1:17880/health`
- 免 PIN 读卡:`POST http://127.0.0.1:17880/api/card/read-nopin`
- 嘉兴带 PIN 读卡:`POST http://127.0.0.1:17880/api/card/read`
- HMAC-SM3`POST http://127.0.0.1:17880/api/hmac-sm3`
免 PIN 读卡示例:
```powershell
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:17880/api/card/read-nopin `
-ContentType "application/json" `
-Body '{"reader_type":"ZJ_HZ_310000"}'
```
## 日志
日志默认写入程序目录下的 `logs`
- `service-组件-YYYY-MM-DD.log`启动、配置、DLL 加载、HTTP 失败、读卡失败、panic 堆栈和自动重启记录。
- `crash-YYYY-MM-DD.log`:工作进程写到标准错误的 Go runtime/native crash 信息。
日志达到 `log_max_file_mb` 后自动生成 `-001``-002` 分卷;日志目录超过 `log_max_total_mb` 时优先删除最旧分卷,同时仍按 `log_retention_days` 清理过期日志。默认单文件最大 20MB、目录总量最大 200MB、保留 30 天。
程序默认由守护进程启动工作进程。若 DLL 导致工作进程直接崩溃,守护进程会记录 PID、退出码、运行时长并自动重启30 秒内连续崩溃达到 `max_rapid_restarts` 后停止,避免无限重启。日志不会记录身份证号、卡号、密钥或请求正文。
## 配置
`config.json`
```json
{
"host": "127.0.0.1",
"port": 17880,
"dll_dir": "package/DWCardReaderDLL",
"cors_origin": "*",
"log_dir": "logs",
"log_retention_days": 30,
"log_max_file_mb": 20,
"log_max_total_mb": 200,
"restart_delay_ms": 1500,
"max_rapid_restarts": 5
}
```
支持环境变量:`CARD_HOST``CARD_PORT``CARD_DLL_DIR``CARD_CORS_ORIGIN``CARD_LOG_DIR``CARD_LOG_MAX_FILE_MB``CARD_LOG_MAX_TOTAL_MB`。调试时设置 `CARD_NO_SUPERVISOR=1` 可直接运行工作进程。
接口行为和 `reader_type` 列表请参照原项目 `card-read-service/README.md`