缺陷:下单后多微信选择框或微信登录页无法安全返回 PDD 核单 #154

Closed
opened 2026-08-29 15:08:07 +08:00 by ila · 2 comments
Owner

来源与现场事实

用户于 2026-08-29 使用 Agent 0.9.25 执行 CG-22:地址与最终下单动作已通过,PDD 随后打开微信;手机未登录微信,停留在 com.tencent.mm/.plugin.account.ui.SimpleLoginUI。Agent 未能回到 PDD 核单,最终提交 order_result_unknown。数据库确认 CG-22 已设置 irreversible_at,但没有 PDD 订单号与 order_submitted_at,禁止重试下单。

用户同时确认另一种真实形态:下单后停留在 Android 多微信选择框。要求两种情况都能安全返回 PDD,并最终看到订单详情页。参考实现为 D:\chengma\cmautobuy\client\src\pdd_u2_purchase_reconcile_adapter.py 及其测试。

Gitea MCP 当前会话不可用,本工单按仓库规则回退项目配置的 Gitea API 创建。

当前差距

GoAuto PurchaseLiveAutomation.readOrderResult 已支持:

  • Android 系统包 + Chooser/Resolver Activity 白名单 + 已知选择器标题 + 微信候选同时成立时返回一次;
  • 回到 PDD 已知支付 Activity 或明确支付动作页面后返回一次;
  • 只读解析唯一订单号与下单时间。

但尚未支持真正进入 com.tencent.mm。当前逻辑会在微信登录页继续等待,甚至进入无意义的滚动轮询,最终结果未知。

目标

  1. 多微信选择框:仅在系统包、Chooser/Resolver Activity、选择器标题和微信候选四类证据同时成立时返回一次,绝不点击微信候选。
  2. 微信 App:订单提交后若前台精确为 com.tencent.mm,不点击、不输入、不登录、不支付、不强制停止微信;只允许一次无参数 PDD 启动 Intent,把既有 PDD 任务栈拉回前台。
  3. 回到 PDD 后,如处于已知支付 Activity 或明确支付动作页面,最多返回一次。
  4. 最终只读取得唯一 PDD 订单号和下单时间,并确认停留在订单详情上下文,才提交 order_created。
  5. 任一步证据不唯一、恢复动作重复、仍停留微信/选择器、进入未知应用或无法取得唯一订单详情时保持 order_result_unknown;永不再次点击创建订单。
  6. 中断恢复路径复用同一只读核单逻辑。

非目标

  • 不处理或登录微信,不点击任何微信控件。
  • 不选择微信/微信分身,不自动支付。
  • 不 force-stop 微信或 PDD。
  • 不重新创建订单,不重试 CG-22。
  • 不自动改变既有 order_result_unknown;CG-22 仍需人工核对并在 Admin 处理。
  • 不保存控件树、截图、地址、微信信息或支付信息。

实施方案

  • 扩展 PurchaseUiDriver 增加只允许无参数拉起 PDD 的恢复能力;真机实现使用 PDD launch Intent + FLAG_ACTIVITY_NEW_TASK,不得清栈或附带商品/支付参数。
  • readOrderResult 增加一次性微信恢复票据:精确识别 com.tencent.mm 后最多拉起 PDD 一次,第二次仍见微信立即结果未知。
  • 保留并强化既有多微信选择器一次返回票据、PDD 支付页一次返回票据。
  • 外部微信/选择器页面禁止执行现有通用滚动;只在 PDD 页面做只读滚动解析。
  • 单元测试覆盖:多微信选择器 → PDD 支付页 → 订单详情;微信登录页 → 拉起 PDD → 支付页 → 订单详情;微信恢复后仍停留微信;非白名单选择器;动作次数上限和无支付点击。
  • Agent 升版,执行 Android 定向/全量测试、Debug/Release 构建并安装当前一加设备;不自动真机下单。

设计证据

恢复既有后台自动化的只读核单路径,无新增 UI、页面或用户交互,不需要原型。

验收

  • 多微信选择框只返回一次,不点击候选,最终到 PDD 订单详情并解析唯一订单号/时间。
  • 微信登录页不操作微信,只拉起 PDD 一次,最终到订单详情并解析唯一订单号/时间。
  • 回到 PDD 支付页最多返回一次且不点击支付。
  • 恢复后仍见微信、选择器或证据不唯一时保持结果未知。
  • 外部微信页面不滚动、不点击、不输入、不 force-stop。
  • 中断恢复路径行为一致。
  • Android 定向与全量测试、Debug/Release 构建通过。
  • APK 安装一加 PKG110并回读版本,不自动执行 live 采购。
  • 提交推送、回写证据,保持待用户验收。

风险与门禁

本工单只发生在已经进入不可逆边界之后。任何不确定必须保持 order_result_unknown,绝不能再次下单或支付。真机 live 验收仍需用户再次明确发起。

文档影响

该恢复场景将扩展长期采购安全白名单。实现验证后需更新线上 Business-Rules-and-Glossary 与 Android-Agent-API-Contract,在线回读 revision,再执行一次 Wiki 镜像同步和一次一致性检查。

## 来源与现场事实 用户于 2026-08-29 使用 Agent 0.9.25 执行 CG-22:地址与最终下单动作已通过,PDD 随后打开微信;手机未登录微信,停留在 `com.tencent.mm/.plugin.account.ui.SimpleLoginUI`。Agent 未能回到 PDD 核单,最终提交 `order_result_unknown`。数据库确认 CG-22 已设置 `irreversible_at`,但没有 PDD 订单号与 `order_submitted_at`,禁止重试下单。 用户同时确认另一种真实形态:下单后停留在 Android 多微信选择框。要求两种情况都能安全返回 PDD,并最终看到订单详情页。参考实现为 `D:\chengma\cmautobuy\client\src\pdd_u2_purchase_reconcile_adapter.py` 及其测试。 Gitea MCP 当前会话不可用,本工单按仓库规则回退项目配置的 Gitea API 创建。 ## 当前差距 GoAuto `PurchaseLiveAutomation.readOrderResult` 已支持: - Android 系统包 + Chooser/Resolver Activity 白名单 + 已知选择器标题 + 微信候选同时成立时返回一次; - 回到 PDD 已知支付 Activity 或明确支付动作页面后返回一次; - 只读解析唯一订单号与下单时间。 但尚未支持真正进入 `com.tencent.mm`。当前逻辑会在微信登录页继续等待,甚至进入无意义的滚动轮询,最终结果未知。 ## 目标 1. 多微信选择框:仅在系统包、Chooser/Resolver Activity、选择器标题和微信候选四类证据同时成立时返回一次,绝不点击微信候选。 2. 微信 App:订单提交后若前台精确为 `com.tencent.mm`,不点击、不输入、不登录、不支付、不强制停止微信;只允许一次无参数 PDD 启动 Intent,把既有 PDD 任务栈拉回前台。 3. 回到 PDD 后,如处于已知支付 Activity 或明确支付动作页面,最多返回一次。 4. 最终只读取得唯一 PDD 订单号和下单时间,并确认停留在订单详情上下文,才提交 `order_created`。 5. 任一步证据不唯一、恢复动作重复、仍停留微信/选择器、进入未知应用或无法取得唯一订单详情时保持 `order_result_unknown`;永不再次点击创建订单。 6. 中断恢复路径复用同一只读核单逻辑。 ## 非目标 - 不处理或登录微信,不点击任何微信控件。 - 不选择微信/微信分身,不自动支付。 - 不 `force-stop` 微信或 PDD。 - 不重新创建订单,不重试 CG-22。 - 不自动改变既有 `order_result_unknown`;CG-22 仍需人工核对并在 Admin 处理。 - 不保存控件树、截图、地址、微信信息或支付信息。 ## 实施方案 - 扩展 `PurchaseUiDriver` 增加只允许无参数拉起 PDD 的恢复能力;真机实现使用 PDD launch Intent + `FLAG_ACTIVITY_NEW_TASK`,不得清栈或附带商品/支付参数。 - `readOrderResult` 增加一次性微信恢复票据:精确识别 `com.tencent.mm` 后最多拉起 PDD 一次,第二次仍见微信立即结果未知。 - 保留并强化既有多微信选择器一次返回票据、PDD 支付页一次返回票据。 - 外部微信/选择器页面禁止执行现有通用滚动;只在 PDD 页面做只读滚动解析。 - 单元测试覆盖:多微信选择器 → PDD 支付页 → 订单详情;微信登录页 → 拉起 PDD → 支付页 → 订单详情;微信恢复后仍停留微信;非白名单选择器;动作次数上限和无支付点击。 - Agent 升版,执行 Android 定向/全量测试、Debug/Release 构建并安装当前一加设备;不自动真机下单。 ## 设计证据 恢复既有后台自动化的只读核单路径,无新增 UI、页面或用户交互,不需要原型。 ## 验收 - [ ] 多微信选择框只返回一次,不点击候选,最终到 PDD 订单详情并解析唯一订单号/时间。 - [ ] 微信登录页不操作微信,只拉起 PDD 一次,最终到订单详情并解析唯一订单号/时间。 - [ ] 回到 PDD 支付页最多返回一次且不点击支付。 - [ ] 恢复后仍见微信、选择器或证据不唯一时保持结果未知。 - [ ] 外部微信页面不滚动、不点击、不输入、不 force-stop。 - [ ] 中断恢复路径行为一致。 - [ ] Android 定向与全量测试、Debug/Release 构建通过。 - [ ] APK 安装一加 PKG110并回读版本,不自动执行 live 采购。 - [ ] 提交推送、回写证据,保持待用户验收。 ## 风险与门禁 本工单只发生在已经进入不可逆边界之后。任何不确定必须保持 `order_result_unknown`,绝不能再次下单或支付。真机 live 验收仍需用户再次明确发起。 ## 文档影响 该恢复场景将扩展长期采购安全白名单。实现验证后需更新线上 Business-Rules-and-Glossary 与 Android-Agent-API-Contract,在线回读 revision,再执行一次 Wiki 镜像同步和一次一致性检查。
Author
Owner

实施、文档、构建与安装完成,待真机验收

Gitea MCP 当前会话不可用,本次工单创建、Wiki 更新和证据回写按仓库规则回退项目配置的 Gitea API。

提交:78ab871 fix(#154): return safely from WeChat to PDD,已推送 main。

实现

  • 保留并验证既有多微信选择器安全路径:仅系统包、Chooser/Resolver Activity 白名单、已知系统标题和微信候选同时成立时返回一次,绝不点击候选。
  • 新增真实微信 App 恢复:前台精确为 com.tencent.mm 时不点击、不输入、不登录、不支付、不强制停止,只用无参数 PDD launch Intent 拉起一次既有 PDD 任务栈。
  • 拉起一次后仍见微信立即结果未知,不会循环拉起。
  • 外部微信/未知应用页面不再进入通用滚动逻辑。
  • 回到 PDD 已知支付 Activity 或明确支付动作页最多返回一次;最终仅在 PDD 订单详情取得唯一订单号与下单时间时返回 order_created,否则保持 order_result_unknown。
  • 中断恢复继续复用 PurchaseLiveAutomation.readOrderResult,不会再次点击创建订单。
  • Agent 提升为 0.9.26 (39)。

自动化验证

  • 定向 PurchaseLiveAutomationTest:13 项通过。
  • 覆盖:
    • 多微信选择器 → 返回一次 → PDD 支付页返回一次 → 订单详情;
    • 微信登录页 → PDD 拉起一次 → 支付页返回一次 → 订单详情;
    • 拉起一次后仍停微信 → 结果未知,且零滚动、零返回;
    • 非白名单选择器不自动返回;
    • 所有成功路径均无微信候选/登录/支付点击。
  • .\scripts\verify.ps1 -Component android:Debug/Release 全量单元测试与 Debug APK 构建通过。
  • 最终定向测试、assembleDebug assembleRelease:通过。
  • git diff --check:通过。

APK 与手机

  • Debug APK SHA-256:AE6C3F6F9A47B961DD548F0C61F15976A4B594B34BECB2E36CD1E196CC6ABC2D
  • Release unsigned APK SHA-256:829E1C090983F74FACEB84039C7F7B6F0C1F0BA76CEB2E426D85DAC0060837D1
  • 一加 PKG110(3B65BD02H7F00000)覆盖安装成功。
  • 手机回读:versionName=0.9.26、versionCode=39。

Wiki-first 文档闭环

  • Business-Rules-and-Glossary 更新并在线回读 revision:d88d5d5aeabdb66bb67a2ec4b32da912fbf0629f
  • Android-Agent-API-Contract 更新并在线回读 revision:0fbfd430daab3d703649dfab34100be107581b81
  • 唯一一轮 python dev_scripts/harness.py sync:完成,仅更新对应两份镜像。
  • 唯一一轮 python dev_scripts/harness.py sync --check:通过。

安全与未验证

  • 未自动恢复或改写 CG-22;其 order_result_unknown 仍需人工核对并在 Admin 处理,禁止重复采购。
  • 未自动执行 live 采购,未点击微信、登录、候选或支付,未创建新订单,未付款。
  • 两种路径已用单元测试验证,尚未用新的真实采购任务做真机验收;真机 live 验收需用户再次明确发起。

状态:保持打开,等待用户真机验收。

## 实施、文档、构建与安装完成,待真机验收 Gitea MCP 当前会话不可用,本次工单创建、Wiki 更新和证据回写按仓库规则回退项目配置的 Gitea API。 提交:`78ab871 fix(#154): return safely from WeChat to PDD`,已推送 `main`。 ### 实现 - 保留并验证既有多微信选择器安全路径:仅系统包、Chooser/Resolver Activity 白名单、已知系统标题和微信候选同时成立时返回一次,绝不点击候选。 - 新增真实微信 App 恢复:前台精确为 `com.tencent.mm` 时不点击、不输入、不登录、不支付、不强制停止,只用无参数 PDD launch Intent 拉起一次既有 PDD 任务栈。 - 拉起一次后仍见微信立即结果未知,不会循环拉起。 - 外部微信/未知应用页面不再进入通用滚动逻辑。 - 回到 PDD 已知支付 Activity 或明确支付动作页最多返回一次;最终仅在 PDD 订单详情取得唯一订单号与下单时间时返回 `order_created`,否则保持 `order_result_unknown`。 - 中断恢复继续复用 `PurchaseLiveAutomation.readOrderResult`,不会再次点击创建订单。 - Agent 提升为 `0.9.26 (39)`。 ### 自动化验证 - 定向 `PurchaseLiveAutomationTest`:13 项通过。 - 覆盖: - 多微信选择器 → 返回一次 → PDD 支付页返回一次 → 订单详情; - 微信登录页 → PDD 拉起一次 → 支付页返回一次 → 订单详情; - 拉起一次后仍停微信 → 结果未知,且零滚动、零返回; - 非白名单选择器不自动返回; - 所有成功路径均无微信候选/登录/支付点击。 - `.\scripts\verify.ps1 -Component android`:Debug/Release 全量单元测试与 Debug APK 构建通过。 - 最终定向测试、`assembleDebug assembleRelease`:通过。 - `git diff --check`:通过。 ### APK 与手机 - Debug APK SHA-256:`AE6C3F6F9A47B961DD548F0C61F15976A4B594B34BECB2E36CD1E196CC6ABC2D` - Release unsigned APK SHA-256:`829E1C090983F74FACEB84039C7F7B6F0C1F0BA76CEB2E426D85DAC0060837D1` - 一加 PKG110(`3B65BD02H7F00000`)覆盖安装成功。 - 手机回读:`versionName=0.9.26`、`versionCode=39`。 ### Wiki-first 文档闭环 - `Business-Rules-and-Glossary` 更新并在线回读 revision:`d88d5d5aeabdb66bb67a2ec4b32da912fbf0629f` - `Android-Agent-API-Contract` 更新并在线回读 revision:`0fbfd430daab3d703649dfab34100be107581b81` - 唯一一轮 `python dev_scripts/harness.py sync`:完成,仅更新对应两份镜像。 - 唯一一轮 `python dev_scripts/harness.py sync --check`:通过。 ### 安全与未验证 - 未自动恢复或改写 CG-22;其 `order_result_unknown` 仍需人工核对并在 Admin 处理,禁止重复采购。 - 未自动执行 live 采购,未点击微信、登录、候选或支付,未创建新订单,未付款。 - 两种路径已用单元测试验证,尚未用新的真实采购任务做真机验收;真机 live 验收需用户再次明确发起。 状态:保持打开,等待用户真机验收。
Author
Owner

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
ila closed this issue 2026-08-29 20:44:31 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#154