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

2.9 KiB
Raw Blame History

47 Admin:顺运宝登录接入验证码自动识别

背景与目标

#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)