真实采购已经单击提交并写入不可逆标记后,PDD 发起微信支付 Intent。Android 设备安装多个微信时会显示系统应用选择器。当前核单代码只尝试重新启动 PDD,没有关闭覆盖在 PDD 上方的系统选择器,随后一直等待并以 RECONCILE_ORDER_PAGE_TIMEOUT 转人工。
RECONCILE_ORDER_PAGE_TIMEOUT
现场只读证据:选择器前台包为 android,Activity 为 com.android.internal.app.ChooserActivity,页面包含“选择要使用的应用”和微信候选。人工只按一次返回键后,设备回到 PDD;短暂加载后稳定显示“待付款”和唯一“去支付”,现有单订单详情识别返回 true。
android
com.android.internal.app.ChooserActivity
reconcile_manual_review
client/src/pdd_u2_purchase_reconcile_adapter.py
ChooserActivity
ResolverActivity
device.press("back")
client/test/test_pdd_u2_purchase_reconcile_adapter.py
docs/client/06-quality-security.md
从 client/ 执行:
client/
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 $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM
真机只验证:在系统选择器已出现且订单已经提交的不可逆场景中,自动按一次返回后回到 PDD 待付款详情并开始只读核单。不得为测试再次提交订单或触发付款。
风险是把未知系统页面误认为选择器、重复按返回键离开订单详情,或者错误点击微信/支付入口。必须使用包名、标题和候选的组合证据,只允许一次系统返回,且代码中不提供选择微信或支付按钮的点击路径。回退时移除选择器专用返回分支,恢复当前安全转人工行为;不可修改或清除不可逆标记和历史核单记录。
状态:进行中
已复核根因:_open_unpaid_orders() 对非 PDD 前台统一尝试启动 PDD,但 Android 多微信应用选择器仍覆盖前台,最终核单超时。
_open_unpaid_orders()
本次严格按工单范围实施:识别确认过的 Android 选择器后只按一次返回;选择器未关闭或出现未知系统页面时安全停止;不增加重新核单,不修改不可逆状态,不重新下单或付款。
RECONCILE_ANDROID_CHOOSER_STUCK
RECONCILE_ANDROID_CHOOSER_UNRECOGNIZED
OK
0.1.2
0.1.0
ff92528
a92b874
docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md
状态:待用户验收。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
真实采购已经单击提交并写入不可逆标记后,PDD 发起微信支付 Intent。Android 设备安装多个微信时会显示系统应用选择器。当前核单代码只尝试重新启动 PDD,没有关闭覆盖在 PDD 上方的系统选择器,随后一直等待并以
RECONCILE_ORDER_PAGE_TIMEOUT转人工。现场只读证据:选择器前台包为
android,Activity 为com.android.internal.app.ChooserActivity,页面包含“选择要使用的应用”和微信候选。人工只按一次返回键后,设备回到 PDD;短暂加载后稳定显示“待付款”和唯一“去支付”,现有单订单详情识别返回 true。做什么 / 不做什么
reconcile_manual_review的存量任务状态;不重新采购、不重新提交订单、不自动付款;不修改 Admin、数据库结构或接口。怎么做
client/src/pdd_u2_purchase_reconcile_adapter.py,增加严格的系统选择器识别:前台业务包为android,选择器标题为已确认白名单,且页面存在微信候选;Activity 为ChooserActivity/ResolverActivity时作为增强证据。device.press("back"),单独记录选择器返回动作,不与现有 PDD 支付页返回次数共用。client/test/test_pdd_u2_purchase_reconcile_adapter.py,使用完全脱敏的合成控件树覆盖:三星选择器→PDD 短暂加载→待付款详情、选择器无法关闭、未知系统页面、原微信外部跳转及原 PDD 支付页返回路径。docs/client/06-quality-security.md;不得记录原始控件树、微信账号或其他个人数据。验收标准
android系统应用选择器后只按一次返回键,不点击任何应用或选择器按钮。怎么验证
从
client/执行:真机只验证:在系统选择器已出现且订单已经提交的不可逆场景中,自动按一次返回后回到 PDD 待付款详情并开始只读核单。不得为测试再次提交订单或触发付款。
风险和回退
风险是把未知系统页面误认为选择器、重复按返回键离开订单详情,或者错误点击微信/支付入口。必须使用包名、标题和候选的组合证据,只允许一次系统返回,且代码中不提供选择微信或支付按钮的点击路径。回退时移除选择器专用返回分支,恢复当前安全转人工行为;不可修改或清除不可逆标记和历史核单记录。
实施进度
状态:进行中
已复核根因:
_open_unpaid_orders()对非 PDD 前台统一尝试启动 PDD,但 Android 多微信应用选择器仍覆盖前台,最终核单超时。本次严格按工单范围实施:识别确认过的 Android 选择器后只按一次返回;选择器未关闭或出现未知系统页面时安全停止;不增加重新核单,不修改不可逆状态,不重新下单或付款。
实施完成,待用户验收
最终实现
android包、白名单标题和微信候选识别系统应用选择器。ChooserActivity/ResolverActivity白名单校验前台 Activity。RECONCILE_ANDROID_CHOOSER_STUCK安全停止。RECONCILE_ANDROID_CHOOSER_UNRECOGNIZED安全停止;未知系统页面不会触发选择器返回。验证结果
OK。0.1.2,更新模块测试仍固定期待0.1.0;未在本工单中修改。提交与归档
ff92528a92b874docs/task/261-兼容多微信系统选择器并安全返回PDD核单.md状态:待用户验收。