From a92b8746b263d666dbf9786a204efef8dcfb34fb Mon Sep 17 00:00:00 2001 From: chengma Date: Tue, 18 Aug 2026 09:36:46 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#261?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1-兼容多微信系统选择器并安全返回PDD核单.md | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md diff --git a/docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md b/docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md new file mode 100644 index 0000000..dfdb341 --- /dev/null +++ b/docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md @@ -0,0 +1,59 @@ +# 261 兼容多微信系统选择器并安全返回 PDD 核单 + +- 类型:缺陷 +- 父级大工单:#96 +- 所属 MVP / 版本:#97 真实采购首单闭环(不支付) +- 状态:已完成 +- 日期:2026-08-18 +- Gitea 工单: + +## 背景与目标 + +真实采购提交订单并进入不可逆阶段后,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.py` + - `C:/Python310/python.exe -m pytest -q test/test_pdd_u2_purchase_reconcile_adapter.py test/test_purchase_recovery.py test/test_purchase_task_service.py` + - `C:/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` 修复多微信选择器核单返回。