Files
cmautobuy/docs/task/124-等待微信返回后只读核单.md
T

3.4 KiB

124 等待微信中间页返回并准确报告只读核单失败

背景与目标

真实下单后可能先进入微信登录/支付中间页,约 20 秒后才返回 PDD 待付款页。 旧代码开始只读核单后只等待约 0.4 秒,页面仍处于过渡状态便报找不到订单 入口;读取失败又被错误显示成“未找到符合时间范围的订单”。

本任务让 Client 在安全截止时间内等待 PDD 待付款页稳定,并把读取失败与 成功扫描但没有候选订单分开报告。

最终方案

  • 控件树能明确识别微信等外部业务包时,直接启动 PDD,不再调用可能阻塞的 app_current();控件树不明确时才使用该查询兜底。
  • 启动 PDD、只读返回或白名单订单导航后,最多等待 30 秒并持续读取控件树。
  • 过渡页面暂时没有唯一入口时继续等待;返回键和每个白名单导航入口最多操作一次。
  • 页面稳定后继续使用 #122 的单订单多视口读取和严格字段匹配。
  • 验证码、PDD 登录页、风控、用户停止和超时仍安全停止,不点击支付、取消订单, 也不重新下单。
  • Adapter 读取异常保存为 unknown,界面显示具体读取原因;只有成功完成扫描且 没有候选时才显示“未找到符合条件的订单”。
  • 已进入 reconcile_manual_review 的旧任务不自动重置,手动只读重新核单不在本工单范围。

改了哪些

  • client/src/pdd_u2_purchase_reconcile_adapter.py:增加外部包识别、30 秒过渡 状态轮询、一次返回与导航保护、可测试时钟。
  • client/src/purchase_reconcile_service.py:区分读取异常和空候选,并返回具体错误。
  • client/test/test_pdd_u2_purchase_reconcile_adapter.py:覆盖微信返回、过渡页、 单次返回、超时、取消和安全阻断页面。
  • client/test/test_purchase_recovery.py:验证读取失败归类和用户提示。

验收结果

验收标准 结果
微信中间页返回后最多等待 30 秒 通过
短暂空白或过渡控件树不立即失败 通过
页面稳定后继续现有只读订单扫描 通过
超时、取消、登录、验证和风控安全停止 通过
读取失败显示具体原因,不再误报时间范围 通过
Client 自动化测试通过 通过,354 项

测试

  • 执行的命令:
    • C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_reconcile_adapter.py src/purchase_reconcile_service.py
    • C:/Python310/python.exe -m unittest discover -s test -p test_pdd_u2_purchase_reconcile_adapter.py -v
    • C:/Python310/python.exe -m unittest discover -s test -p test_purchase_recovery.py -v
    • C:/Python310/python.exe -m unittest discover -s test -v
    • git diff --check
  • 结果:语法检查通过;定向测试分别通过 11 项和 8 项;完整 Client 测试 354 项全部通过;差异检查通过。
  • 没验证到的部分:没有创建新的真实订单验证微信中间页自动返回。已有任务 PUR-85b9af23ba5d50a1 已进入人工核对状态,本任务没有重置它、重新核单、支付、 取消订单或再次下单。

相关提交

  • 4999aa7 fix: 等待微信返回后再只读核单 (#124)