3.5 KiB
3.5 KiB
261 兼容多微信系统选择器并安全返回 PDD 核单
- 类型:缺陷
- 父级大工单:#96
- 所属 MVP / 版本:#97 真实采购首单闭环(不支付)
- 状态:已完成
- 日期:2026-08-18
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/261
背景与目标
真实采购提交订单并进入不可逆阶段后,Android 设备安装多个微信时会显示系统应用选择器。原核单流程只尝试启动 PDD,选择器仍覆盖在前台,最终核单超时并转人工。
本次目标是在只读核单阶段严格识别已确认的 Android 微信应用选择器,只按一次返回键回到 PDD,随后继续原有待付款订单核对。不得选择微信、点击支付、重新下单或增加重新核单功能。
最终方案
- 使用
android前台包、白名单标题和微信候选三个控件树证据识别应用选择器。 - 使用
ChooserActivity或ResolverActivity校验已知系统选择器 Activity;未知 Activity 不执行返回操作并安全停止。 - 选择器返回使用独立的一次性门禁,不与原有 PDD 支付页返回门禁共用。
- 按一次返回后允许 PDD 短暂加载;若选择器仍存在,返回明确错误并停止,不重复返回或启动 PDD。
- 保留原外部应用恢复、支付页最多返回一次以及登录、验证和风控停止规则。
最终实现与建单方案一致,没有修改 Admin、数据库、接口、存量任务状态或不可逆标记。
改了哪些
client/src/pdd_u2_purchase_reconcile_adapter.py:增加 Android 微信应用选择器识别、Activity 白名单、一次安全返回和失败诊断。client/test/test_pdd_u2_purchase_reconcile_adapter.py:增加选择器正常关闭、返回后仍存在、未知 Activity 和未知系统页面等脱敏合成控件树测试。
验收结果
| 验收标准 | 结果 |
|---|---|
| 严格识别 Android 微信应用选择器后只按一次返回 | 通过 |
| 返回后允许短暂加载并继续识别 PDD 待付款详情 | 通过 |
| 不点击微信、选择器按钮或“去支付” | 通过 |
| 一次返回后选择器仍存在时停止并返回明确错误 | 通过 |
| 未知 Activity 和未知系统页面不执行自动返回 | 通过 |
| 原外部跳转、PDD 支付页一次返回及安全停止规则保持通过 | 通过 |
| 不增加重新核单,不改变存量状态,不重新下单或付款 | 通过 |
测试
- 执行的命令:
C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_reconcile_adapter.py test/test_pdd_u2_purchase_reconcile_adapter.pyC:/Python310/python.exe -m pytest -q test/test_pdd_u2_purchase_reconcile_adapter.py test/test_purchase_recovery.py test/test_purchase_task_service.pyC:/Python310/python.exe -m pytest -q test- 设置
QT_QPA_PLATFORM=offscreen后创建MainWindow。
- 结果:语法检查通过;定向及采购恢复测试 43 项全部通过;离屏界面冒烟输出
OK。完整 Client 测试有 2 项与本工单无关的既有失败:工作区版本为0.1.2,更新模块测试仍固定期待0.1.0。 - 没验证到的部分:未执行真机验证。为避免对已经进入不可逆阶段的订单产生额外操作,本次没有重新提交订单、触发支付或改动存量人工审核任务。
遗留问题
- Client 版本号与两项更新模块测试的固定预期不一致,不属于 #261 范围,需要由对应版本发布任务处理。
相关提交
ff92528修复多微信选择器核单返回。