2.9 KiB
2.9 KiB
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 服务或真实顺运宝账号,未重新执行真实浏览器中的自动登录与手工降级流程;用户已明确通过验收。
相关提交
2e686b1feat: 顺运宝登录接入验证码自动识别 (#47)