Files
cmautobuy/docs/task/47-顺运宝验证码自动识别.md
T
2026-08-09 21:22:49 +08:00

53 lines
2.9 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.
# 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)