53 lines
2.9 KiB
Markdown
53 lines
2.9 KiB
Markdown
# 47 Admin:顺运宝登录接入验证码自动识别
|
||
|
||
- 类型:需求
|
||
- 父级大工单:#14
|
||
- 所属 MVP / 版本:#15 / MVP
|
||
- 状态:已完成
|
||
- 日期:2026-08-09
|
||
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/47>
|
||
|
||
## 背景与目标
|
||
|
||
#46 只能由操作员手工输入验证码,而顺运宝会话会过期。本任务接入可配置的托管 OCR:优先自动识别并登录,识别失败或服务不可用时保留手工输入兜底,避免 OCR 故障阻断同步。
|
||
|
||
## 最终方案
|
||
|
||
- 配置增加 `ocr_url` 和默认 5 次的 `ocr_max_attempts`;地址留空即禁用 OCR。
|
||
- OCR 使用独立、带超时的 HTTP 客户端,不携带顺运宝 Cookie;验证码图片只在内存中传递。
|
||
- 只接受过滤后恰好 4 位的字母数字结果;空结果或长度错误会换新验证码重试,不提交错误登录。
|
||
- OCR 不可达、响应异常或重试耗尽时降级到手工弹窗,并显示明确原因。
|
||
- 保留 #46 的手工登录、会话缓存、同步和字段映射逻辑。
|
||
- 更新顺运宝接口决策记录,说明托管 OCR 改变了原“不引入本机 OCR 服务”的前提,以及验证码图片会发送到所配置服务。
|
||
|
||
## 改了哪些
|
||
|
||
- `admin/config.example.yaml`、`admin/config/config.go`:OCR 地址、次数和默认值。
|
||
- `admin/syb/ocr.go`、`admin/syb/ocr_test.go`:独立 OCR 客户端及假服务测试。
|
||
- `admin/syb/client.go`、`admin/syb/client_test.go`:验证码重取、结果校验、自动登录与降级测试。
|
||
- `admin/handler/web/others.go`、`admin/templates/syb/list.html`:自动登录编排和手工降级原因。
|
||
- `docs/admin/00-getting-started.md`、`docs/admin/08-顺运宝接口.md`:配置和安全边界。
|
||
|
||
## 验收结果
|
||
|
||
| 验收标准 | 结果 |
|
||
|---|---|
|
||
| 合格的 4 位结果自动登录,空值和错误长度不提交登录 | 通过 |
|
||
| 每次重试重新取得验证码,达到上限后手工降级 | 通过 |
|
||
| OCR 留空、超时、不可达或异常响应均安全降级 | 通过 |
|
||
| OCR 客户端独立、带超时且不携带顺运宝 Cookie | 通过 |
|
||
| 验证码图片不落盘,手工输入路径保持可用 | 通过 |
|
||
| 测试只使用 `httptest`,不访问真实 OCR 或顺运宝 | 通过 |
|
||
| 配置和接口决策文档已更新 | 通过 |
|
||
| 五个页面和 Go 1.23 自动化检查通过 | 通过 |
|
||
|
||
## 测试
|
||
|
||
- 执行的命令:在 `admin/` 使用 Go 1.23.0 执行 `go build ./...`、`go test ./... -count=1`、`go vet ./...`。
|
||
- 结果:构建、全部测试和静态检查通过;空数据、错误长度、合格结果、服务异常、重试和 Cookie 隔离均由假服务覆盖。
|
||
- **没验证到的部分**:本次验收未请求真实 OCR 服务或真实顺运宝账号,未重新执行真实浏览器中的自动登录与手工降级流程;用户已明确通过验收。
|
||
|
||
## 相关提交
|
||
|
||
- `2e686b1` feat: 顺运宝登录接入验证码自动识别 (#47)
|