Page:
T-236
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
1
T-236
ila edited this page 2026-08-07 16:36:49 +08:00
同步来源:
docs/tasks/T-236.md· commitafc651f75a3a
id: T-236 title: 顺运宝验证码错误有限重试 phase: 2 deps:
- T-235
status: DONE
created: 2026-07-29
context_ref:
81f75ccwork_branch: null write_paths: - docs/tasks/T-236.md
- docs/api.md
- docs/current-state.md
- docs/integrations/shunyunbao-contract.md
- backend-api/internal/platform/shunyunbao/**
问题 / 背景
顺运宝验证码由 OCR 自动识别,单次识别可能因字符相似、图片噪声或验证码刷新而被 ERP 明确 拒绝。当前实现只尝试一次;ERP 返回“图片验证码不正确”后,货运导入立即失败,采购人员只能 重新提交整个导入操作。
方案
- 首次登录被 ERP 明确判定为验证码错误后,最多再重试 6 次,即单次认证流程最多执行 7 次 登录尝试。
- 每次重试都重新获取验证码图片、重新调用 OCR,并使用新验证码发起登录;不复用已被拒绝 的验证码或识别文本。
- 仅识别 ERP
status=false且消息精确为已知验证码错误的登录响应。账号密码错误、OCR 服务异常、网络错误、协议错误和其他登录拒绝均立即停止,不盲目重试。 - 整个认证流程受 20 秒总预算约束;先达到总预算或调用方 deadline 时立即停止,即使尚未 用完 6 次重试。
- 受控 ERP diagnostics 只记录尝试序号和脱敏结果,不记录验证码图片、ticket、Cookie、 token、账号密码或登录响应正文。
验收要点
- 前 6 次验证码错误、第 7 次成功时认证成功,验证码获取、OCR 和登录均各执行 7 次。
- 连续 7 次验证码错误后返回稳定的
ERP_LOGIN_REJECTED,不执行第 8 次。 - 非验证码登录拒绝、OCR/网络/协议错误不触发重试。
- 重试期间每次使用新验证码,且整个认证不突破 20 秒或调用方 deadline。
- diagnostics 可定位尝试次数,但不泄露验证码、凭证、Cookie、token 或响应正文。
- 标准 Go 测试、race、vet 和三个入口构建通过。
边界
- 不增加 Redis 或其他 ERP 会话持久化;成功会话仍按 T-235 仅保存在当前 Go 进程内存中。
- 不修改 OCR endpoint、ERP 账号密码来源、货运字段、数据库或采购流程。
- 不在自动测试中访问真实 ERP;使用脱敏本机 fixture 验证重试协议。
执行记录
- 2026-07-29:创建任务。确认“重试 6 次”定义为首次失败后额外重试 6 次,最多 7 次登录; 仅对 ERP 明确返回的验证码错误执行全新验证码/OCR 尝试,并设置 20 秒总预算。
- 2026-07-29:实现精确验证码拒绝分类和受锁有限认证循环。脱敏 fixture 覆盖第 7 次成功、 连续 7 次耗尽、其他登录拒绝不重试和诊断尝试序号;标准 Go 测试、race、vet 及 api/migrate/authctl 构建均通过。