@alipay/alipay-aipay 1.4.9 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/package.json +5 -2
  2. package/skill/SKILL.md +2 -2
  3. package/skill/VERSION +1 -1
  4. package/skill/references/integration/flow.md +109 -41
  5. package/skill/references/integration/modules/checklist.md +25 -17
  6. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  7. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  8. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  9. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  10. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  11. package/skill/references/integration/modules/interface-contract/aipay-interface-contract.md +3 -4
  12. package/skill/references/integration/modules/interface-contract/apppay-interface-contract.md +4 -4
  13. package/skill/references/integration/modules/interface-contract/common-trade-contract.md +1 -1
  14. package/skill/references/integration/modules/interface-contract/notify-url-contract.md +4 -4
  15. package/skill/references/integration/modules/interface-contract/webpay-interface-contract.md +4 -4
  16. package/skill/references/integration/modules/interface-guide.md +15 -13
  17. package/skill/references/integration/modules/product-decision.md +13 -13
  18. package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +2 -2
  19. package/skill/references/integration/modules/scripts/local_402_sandbox_pay.py +1 -1
  20. package/skill/references/integration/modules/scripts/sandbox_config.sh +1 -1
  21. package/skill/references/integration/modules/troubleshooting-flow.md +3 -3
  22. package/skill/references/normal/alipay-cli-env.md +2 -2
  23. package/skill/references/normal/full-process-routing.md +7 -5
  24. package/skill/references/normal/json/customer-messages.json +56 -51
  25. package/skill/references/normal/json/policy-rules.json +6 -6
  26. package/skill/references/normal/rejection-guide.md +1 -1
  27. package/skill/references/normal/scripts/alipay_cli_env.mjs +6 -2
  28. package/skill/references/normal/scripts/alipay_cli_env.sh +36 -2
  29. package/skill/references/normal/scripts/common.sh +64 -0
  30. package/skill/references/normal/scripts/flow_loader.mjs +241 -0
  31. package/skill/references/normal/scripts/integration_context_runner.mjs +166 -0
  32. package/skill/references/normal/scripts/integration_message_runner.mjs +237 -15
  33. package/skill/references/normal/scripts/interaction_reply.mjs +133 -0
  34. package/skill/references/normal/scripts/onboarding_discovery_runner.mjs +224 -0
  35. package/skill/references/normal/scripts/onboarding_message_runner.mjs +27 -12
  36. package/skill/references/normal/scripts/onboarding_recovery_runner.mjs +96 -0
  37. package/skill/references/normal/scripts/project_route_inspector.sh +3 -3
  38. package/skill/references/normal/scripts/python_script_runner.mjs +1 -1
  39. package/skill/references/normal/scripts/render_customer_message.mjs +67 -42
  40. package/skill/references/normal/scripts/telemetry.mjs +54 -5
  41. package/skill/references/normal/telemetry.md +26 -0
  42. package/skill/references/onboarding/flow.md +166 -152
  43. package/skill/references/onboarding/modules/app-release.md +39 -386
  44. package/skill/references/onboarding/modules/authorization.md +25 -270
  45. package/skill/references/onboarding/modules/error-handling.md +50 -253
  46. package/skill/references/onboarding/modules/product-sign.md +24 -289
  47. package/skill/references/onboarding/modules/scripts/app.sh +58 -21
  48. package/skill/references/onboarding/modules/scripts/ar_sign_apply.sh +15 -12
  49. package/skill/references/onboarding/modules/scripts/auth.sh +6 -1
  50. package/skill/references/onboarding/modules/scripts/error_handler.sh +1 -0
  51. package/skill/references/onboarding/modules/scripts/query_sign_status.sh +5 -3
  52. package/skill/references/onboarding/modules/scripts/service.sh +3 -2
  53. package/skill/references/onboarding/modules/scripts/upload_screenshots.sh +24 -12
  54. package/skill/references/onboarding/modules/service-registration.md +20 -312
  55. package/skill/references/runtime-entry.md +17 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alipay/alipay-aipay",
3
- "version": "1.4.9",
3
+ "version": "1.5.0",
4
4
  "description": "支付宝 AI 付 Skill 安装包 - 安装 Agent Skill,并检测/后台准备 alipay-cli;jq 可通过 --with-jq 尝试准备",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,7 +15,7 @@
15
15
  "build": "tsc",
16
16
  "dev": "tsc --watch",
17
17
  "test:windows-integration": "node --test test/windows-integration-contract.test.mjs test/integration-message-runner.test.mjs test/alipay-cli-env.test.mjs",
18
- "prepublishOnly": "node scripts/validate-maintenance-alignment.mjs --release && npm run build"
18
+ "prepublishOnly": "node scripts/validate-maintenance-alignment.mjs --release && node scripts/validate-process-optimization.mjs && npm run build"
19
19
  },
20
20
  "keywords": [
21
21
  "alipay",
@@ -28,6 +28,9 @@
28
28
  "gnupg",
29
29
  "alipay-cli",
30
30
  "jq",
31
+ "AI 按量付费",
32
+ "AI 网页应用收款",
33
+ "AI 移动应用收款",
31
34
  "按量付费",
32
35
  "网站支付",
33
36
  "APP 支付"
package/skill/SKILL.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: alipay-aipay
3
3
  description: >-
4
- 支付宝 AI 付站点官方 Skill。当用户选择完成按量付费、网站支付、APP 支付三类支付宝收单产品的代码开发、产品开通或全流程同时完成两者时,使用此 Skill。
5
- 触发关键词:"AI支付"、"接支付宝"、"接个支付"、"开发支付"、"402收款"、"按量付费"、"快捷收款"、"快捷收单"、"网站支付"、"APP 支付"、"产品开通"、"商家开通"、"签约入驻"等。
4
+ 支付宝 AI 付站点官方 Skill。当用户选择完成 AI 按量付费、AI 网页应用收款、AI 移动应用收款三类支付宝收单产品的代码开发、产品开通或全流程同时完成两者时,使用此 Skill。
5
+ 触发关键词:"AI支付"、"接支付宝"、"一站式接支付宝"、"接个支付"、"开发支付"、"402收款"、"AI按量付费"、"AI网页应用收款"、"AI移动应用收款"、"按量付费"、"快捷收款"、"快捷收单"、"网站支付"、"APP 支付"、"产品开通"、"商家开通"、"签约入驻"等。
6
6
  ---
7
7
 
8
8
  # 支付宝 AI 付 Skill 启动器
package/skill/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.9
1
+ 1.5.0
@@ -1,12 +1,15 @@
1
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CORE:START -->
1
2
  # 支付产品-代码开发流程
2
3
 
3
- > ⚠️ **前置声明**:本 flow 仅支持**网站支付、APP 支付、按量付费**三种产品的集成。**其他产品(当面付、订单码支付、JSAPI支付、预授权支付、商家扣款等)暂不支持**,如需集成请前往[支付宝开放平台](https://open.alipay.com/)查阅相关文档。
4
+ > ⚠️ **前置声明**:本 flow 仅支持 **AI 网页应用收款、AI 移动应用收款、AI 按量付费**三种产品的集成。原有“网站支付”“APP 支付”“按量付费”仍作为输入别名和资源目录名。**其他产品(当面付、订单码支付、JSAPI支付、预授权支付、商家扣款等)暂不支持**,如需集成请前往[支付宝开放平台](https://open.alipay.com/)查阅相关文档。
4
5
 
5
6
  ---
6
7
 
7
8
  ## 按步读取
8
9
 
9
- 从本 flow 顺序执行;步骤 1 先按操作系统执行登记的环境检查,只有 `CLI_ENV:NEEDS_SETUP` 才读 `../normal/alipay-cli-env.md`,并按本步骤固定协议执行沙箱准备,不提前读取原始 MCP 响应示例或自行解析沙箱配置;步骤 2 只有产品无法唯一确定时才读 `modules/product-decision.md`;步骤 3/5 按需读 `modules/sandbox/sandbox-setup-guide.md`;步骤 4/5 读 `modules/alipay-sdk-reminder.md`、`modules/interface-guide.md`、当前产品本地契约和当前语言示例;步骤 6 仅按量付费读 `modules/sandbox/a2m-sandbox-test.md`;步骤 8 读 `modules/checklist.md`。无关产品、语言、维护说明和尚未到达的模块不提前加载。
10
+ 运行时禁止整份预读本文件,只使用 `../normal/scripts/flow_loader.mjs` 提取当前阶段;loader 直接读取本文件 marker,本文件仍是唯一执行依据。首次进入用 `integration entry`;项目与技术栈已唯一确认后加载 `integration prepare` 执行步骤 1/2。当前摘要收到登记的明确肯定回复后,用 `../normal/scripts/interaction_reply.mjs` 校验回复,再以 `integration development --product-type "$PRODUCT_TYPE" --project-confirm-receipt "$PROJECT_CONFIRM_RECEIPT"` 校验项目事实、加载通用护栏和步骤 3/4;其后依次按动作到达位置加载 `implementation`、`verification`、`acceptance --product-type "$PRODUCT_TYPE"` 和 `checklist --product-type "$PRODUCT_TYPE" --project-path "$PROJECT_PATH"`。loader 输出的 bundle 只供内部执行,命令仍以 `references/integration/` 为 workdir;未到达阶段、无关产品/语言、维护说明和模块不得提前读取。根 `SKILL.md` 与 `runtime-entry.md` 已加载的生成式通用护栏不会在 bundle 中重复输出,原 flow 仍保留完整规则供校验。
11
+
12
+ 步骤 1 只有 `CLI_ENV:NEEDS_SETUP` 才读 `../normal/alipay-cli-env.md`;步骤 2 只有产品无法唯一确定时才读 `modules/product-decision.md`;沙箱正常路径只执行已封装脚本,协议异常或用户要求解释时才读沙箱指南;步骤 4 只按 `integration_context_runner.mjs` 的当前产品/语言事实读取 SDK、本地契约和示例,不读取接口索引本身;步骤 6 仅按量付费读 A2M 沙箱模块;步骤 8 只读当前产品适用 checklist。
10
13
 
11
14
  ---
12
15
 
@@ -31,13 +34,7 @@ printf '%s' "$MESSAGE_INPUT_JSON" | node ../normal/scripts/render_customer_messa
31
34
 
32
35
  ### 耗时事件规则
33
36
 
34
- 耗时采集不对客展示,不影响主流程转移。根意图识别后已由 `telemetry.mjs start-run` 确定当前 `run_id`;下列命令会向 stderr 输出唯一 `ALIPAY_AIPAY_INTERNAL:METRIC_EVENT=<json>`,前台只把事件写入用户系统临时目录下带 `alipay-aipay` 标识的本地私有 outbox(默认 `<os.tmpdir>/alipay-aipay-telemetry/outbox`)并启动后台补传,不等待 collector HTTP 结果;后台通过 Yuyan sync-log 上报 code=1005,只在 collector 返回 HTTP 2xx 后删除。已设置 `ALIPAY_AIPAY_TELEMETRY=0|false|off|no`、缺少 run_id、命令异常、网络失败、本地 outbox/run state 写失败或 Yuyan 返回非 2xx 时,均不得阻断当前步骤,也不得向用户解释埋点状态或等待上传结果。最近上传失败状态只写入同一临时目录下的 `upload-status.json`,内部排查可执行 `node ../normal/scripts/telemetry.mjs upload-status`,不得作为对客正文。若最近失败为网络/DNS 类错误且 outbox 有积压,可在阶段间隔或首次业务联网动作旁路执行 `node ../normal/scripts/telemetry.mjs permissioned-flush-needed`;只有出现内部 `PERMISSIONED_FLUSH_NEEDED=true` 时,才通过宿主工具层申请一次可复用联网执行权限运行 `node ../normal/scripts/telemetry.mjs flush-outbox`(即 `flush-outbox` 异步父命令),该命令只启动后台补传子进程并立即返回,建议绑定同一命令前缀。同一 Agent 会话只请求一次;拒绝、后台补传失败或无可复用权限都继续主流程并保留 outbox。取得该权限后,后续阶段间隔和流程收尾可再次旁路执行 `flush-outbox` 触发异步补传;`flush-outbox` stdout 为空,collector HTTP 结果、失败或待重试结果不作为业务转移条件。所有内部行仍按标准规则整行剔除。
35
-
36
- ```bash
37
- node ../normal/scripts/telemetry.mjs stage "<stage>" --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"
38
- ```
39
-
40
- 没有确定产品前省略 `--product-type`;`ROOT_INTENT` 只使用 `integration_only|full_process`。`integration.context_prepare.start`、`integration.start_confirm.start` 和 `integration.closeout.start` 由对应标准消息/runner 自动输出;`integration_only` 的 checklist 最终消息成功生成后,runner 自动记录 `run.terminal` 并结束当前 run,`full_process` 的 Integration 收尾不结束 run。其余下文列明的阶段在动作开始前执行一次。sync-log 上传失败静默保留 outbox,后续 telemetry 命令继续补传,不补问、不改变对客正文。
37
+ `start-run` 已在入口确定 `run_id`。本流程所有 stage 由环境检查、阶段 loader 和现有消息/动作 runner 自动异步记录;Agent 不执行手工 `telemetry.mjs stage`。遥测关闭、落盘、网络或上传失败都不改变 stdout、退出语义和流程转移;内部行禁止对客。实现与诊断细节只按需读取 `../normal/telemetry.md`。
41
38
 
42
39
  ### 服务声明执行护栏
43
40
 
@@ -52,7 +49,7 @@ node ../normal/scripts/telemetry.mjs stage "<stage>" --root-intent "$ROOT_INTENT
52
49
  ### 生成式执行护栏
53
50
 
54
51
  - `P-MCP-CONTRACT-FROZEN`:只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。
55
- - `P-A2M-SANDBOX`:按量付费沙箱 serviceId 固定为 api_mock_service_id,SDK 使用沙箱网关;生产网关和真实 serviceId 只用于正式配置。
52
+ - `P-A2M-SANDBOX`:AI 按量付费沙箱 serviceId 固定为 api_mock_service_id,SDK 使用沙箱网关;生产网关和真实 serviceId 只用于正式配置。
56
53
  - `P-A2M-SUCCESS`:自动联调只有在 HTTP 200、非空可归属资源、无明确业务失败且适用 Payment-Validation 有效时通过。
57
54
  - `P-SANDBOX-CREDENTIAL-EXCEPTION`:Unix/macOS/Linux 只允许快速沙箱实际返回且已校验的买家登录/支付密码在沙箱摘要和付款体验中经 stdin 临时渲染。Windows 手工沙箱允许用户在 sandbox.windows.manual_setup 后提供当前沙箱应用的 APPID、支付宝公钥、应用公钥、与当前开发语言匹配的应用私钥和沙箱账号信息;Agent 只能将其用于已确认目标项目的受保护配置,不得在回复、摘要、普通日志或业务状态中复述或另存原文。两类例外均不得扩展到生产环境账号、应用私钥或密码。
58
55
  - `P-SENSITIVE-STATE`:用户可以为当前应用设钥明确提供应用公钥,但该输入只用于本次 app.sh key/verify-key/verify-key-and-audit 调用;Agent 回复、对话摘要、普通日志、跨会话状态和宽权限临时文件禁止复述或保存公钥原文。除 P-SANDBOX-CREDENTIAL-EXCEPTION 明确允许的 Windows 手工沙箱当前资料输入外,私钥、token、Payment-Proof、签名串、完整支付表单和未脱敏 MCP 响应同样禁止进入这些位置。临时 URL 只有在 flow 明确登记、已由脚本或 renderer 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。
@@ -92,6 +89,9 @@ node ../normal/scripts/telemetry.mjs stage "<stage>" --root-intent "$ROOT_INTENT
92
89
 
93
90
  ---
94
91
 
92
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CORE:END -->
93
+
94
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_ENTRY:START -->
95
95
  ## 支付产品-代码开发流程
96
96
 
97
97
  ### 目标项目执行上下文
@@ -124,12 +124,19 @@ node ../normal/scripts/integration_message_runner.mjs locate-projects --base-pat
124
124
 
125
125
  **执行边界**:本流程只操作用户当前确认的项目路径、语言、框架、产品和范围。步骤 1 只使用项目路径和语言,不依赖产品;步骤 2 后的代码修改才依赖已确认产品。沙箱配置与测试结论来自本轮实际脚本结果,不得被 onboarding 的正式 `appId`、支付宝公钥或 `productionServiceId` 覆盖。
126
126
 
127
+ 项目路径和技术栈已由 runner 唯一解析后,执行 `node ../normal/scripts/flow_loader.mjs integration prepare`;不得提前读取步骤 1/2。
128
+
129
+ ---
130
+
131
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_ENTRY:END -->
132
+
133
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_PREPARE:START -->
127
134
  ### 步骤 1:环境检查与匿名沙箱准备
128
135
 
129
136
  **任务**:在确定具体支付产品前,完成当前操作系统分支所需的环境检测并尝试准备沙箱配置;配置未就绪时记录待配置状态并继续代码开发
130
137
 
131
138
  **完成条件**:
132
- - [INT.ENV.CLI_READY] Unix/macOS/Linux 的既有 `alipay_cli_env.sh check`,或 Windows Integration 的 `alipay_cli_env.mjs check`,返回唯一 `CLI_ENV:READY`;只有缺失项分支才按 `../normal/alipay-cli-env.md` 完成当前分支要求的安装与验证
139
+ - [INT.ENV.CLI_READY] Unix/macOS/Linux 的 `alipay_cli_env.sh integration-check`,或 Windows Integration 的 `alipay_cli_env.mjs integration-check`,返回唯一 `CLI_ENV:READY`;只有缺失项分支才按 `../normal/alipay-cli-env.md` 完成当前分支要求的安装与验证
133
140
  - [INT.ENV.PROJECT_LANGUAGE_READY] 已确认唯一目标项目路径和服务端语言,且目标项目包含已确认语言的构建标识
134
141
  - [INT.SANDBOX.OS_DETECTED] 已检测用户操作系统类型
135
142
  - [INT.SANDBOX.PREPARATION_RECORDED] Unix/macOS/Linux 已从固定脚本取得唯一 `READY|CREATE_PENDING|VERIFY_PENDING` 终态。`READY` 时配置已安全落盘或复核;待配置不是成功,不满足任何沙箱配置、测试或生产就绪条件,但本步骤允许继续产品确认和代码开发
@@ -137,8 +144,8 @@ node ../normal/scripts/integration_message_runner.mjs locate-projects --base-pat
137
144
 
138
145
  **执行规则**:
139
146
 
140
- 1. 只确认创建和保存沙箱所需的目标项目路径、服务端语言与操作系统;不得为了创建匿名沙箱先要求用户确定支付产品。缺少多个字段时使用“启动前上下文补问”的固定标准消息一次补齐;字段已能从用户输入和项目事实确定时,不发送环境、项目识别或准备进度消息。开始执行环境检查前,先执行 `node ../normal/scripts/telemetry.mjs stage integration.env_prepare.start --root-intent "$ROOT_INTENT"`。
141
- 2. Unix/macOS/Linux 从本 flow 目录继续执行既有 `bash ../normal/scripts/alipay_cli_env.sh check`;Windows 执行 `node ../normal/scripts/alipay_cli_env.mjs check`,只检查本 Integration Node runner 所需运行时,不要求 Bash、jq 或当前流程不会调用的 alipay-cli。唯一 `CLI_ENV:READY` 时继续且不读取完整安装文档;`CLI_ENV:NEEDS_SETUP` 时才读取 `../normal/alipay-cli-env.md` 并按当前系统分支补齐后重跑;其他输出、非 0 或 marker 冲突停在本步骤。
147
+ 1. 只确认创建和保存沙箱所需的目标项目路径、服务端语言与操作系统;不得为了创建匿名沙箱先要求用户确定支付产品。缺少多个字段时使用“启动前上下文补问”的固定标准消息一次补齐;字段已能从用户输入和项目事实确定时,不发送环境、项目识别或准备进度消息。
148
+ 2. Unix/macOS/Linux 从本 flow 目录执行 `bash ../normal/scripts/alipay_cli_env.sh integration-check`;Windows 执行 `node ../normal/scripts/alipay_cli_env.mjs integration-check`。该入口在检查开始时自动记录 `integration.env_prepare.start`。Windows 只检查本 Integration Node runner 所需运行时,不要求 Bash、jq 或当前流程不会调用的 alipay-cli。唯一 `CLI_ENV:READY` 时继续且不读取完整安装文档;`CLI_ENV:NEEDS_SETUP` 时才读取 `../normal/alipay-cli-env.md` 并按当前系统分支补齐后重跑;其他输出、非 0 或 marker 冲突停在本步骤。
142
149
  3. Unix/macOS/Linux 从本 flow 所在的 `references/integration/` 目录执行唯一准备入口:
143
150
 
144
151
  ```bash
@@ -176,9 +183,9 @@ node ../normal/scripts/integration_message_runner.mjs windows-sandbox-setup
176
183
 
177
184
  | 场景关键词 | 产品 |
178
185
  |------------|------|
179
- | AI、智能体内收款、大模型、Agent、API、算力、402协议 | 按量付费 |
180
- | 网站、网页、PC、电商、商城、H5、手机网页 | 网站支付 |
181
- | APP、移动应用支付、手机 APP、iOS、Android、鸿蒙 | APP 支付 |
186
+ | AI、智能体内收款、大模型、Agent、API、算力、402协议 | AI 按量付费 |
187
+ | 网站、网页、PC、电商、商城、H5、手机网页 | AI 网页应用收款 |
188
+ | APP、移动应用支付、手机 APP、iOS、Android、鸿蒙 | AI 移动应用收款 |
182
189
  | 模糊场景 | 引用 modules/product-decision.md 进行澄清 |
183
190
 
184
191
  **阻塞规则(执行约束,不是对客正文)**:步骤 2 只在必要时用当前标准消息补问仍无法可靠确定的产品或技术栈;产品不明确用 `product.clarify`,技术栈不明确用 `integration.context.required`;不得重复询问步骤 1 已确认的项目路径和服务端语言。
@@ -189,11 +196,11 @@ node ../normal/scripts/integration_message_runner.mjs windows-sandbox-setup
189
196
  node ../normal/scripts/integration_message_runner.mjs start-confirm --product-type "$PRODUCT_TYPE" --product-name "$PRODUCT_NAME" --project-path "$PROJECT_PATH" --project-selection "$PROJECT_SELECTION" --language "$SERVER_LANGUAGE" --framework "$FRAMEWORK"
190
197
  ```
191
198
 
192
- runner 失败时不得展示手写确认或进入步骤 3。runner 成功后,其 stdout 是步骤 2 唯一对客消息;Agent 必须把 stdout 原文作为当前回复正文发给用户,不能用命令面板里的 stdout、折叠输出或“已渲染/已展示”说明替代。禁止添加 `<...>` 标签、“已输出完整确认”“完整接入启动确认已渲染”“服务声明已打印”“runner stdout 是本轮唯一对客正文”“收到 1 后进入步骤 3”、重复的项目符号摘要或任何前后缀;发出 stdout 原文后立即停止本轮。必须收到针对当前完整摘要的 `1` 后,方可锁定已准备的目标项目上下文并进入步骤 3。摘要变化后旧回复失效;只有目标项目或服务端语言变化时才返回步骤 1,其他修改重新扫描并渲染步骤 2。用户此前只说明产品、语言或催促继续,不能替代本确认。
199
+ runner 失败时不得展示手写确认或进入步骤 3。成功时必须同时取得唯一 `ALIPAY_AIPAY_INTERNAL:PROJECT_CONFIRM_RECEIPT=<receipt>`;缺失、重复或不可解析都视为失败。stdout 是步骤 2 唯一对客消息;Agent 必须把 stdout 原文作为当前回复正文发给用户,不能用命令面板里的 stdout、折叠输出或“已渲染/已展示”说明替代。禁止添加 `<...>` 标签、“已输出完整确认”“完整接入启动确认已渲染”“服务声明已打印”“runner stdout 是本轮唯一对客正文”“确认后进入步骤 3”、重复的项目符号摘要或任何前后缀;发出 stdout 原文后立即停止本轮。收到用户回复后执行 `node ../normal/scripts/interaction_reply.mjs confirm --reply "$USER_REPLY"`;只有唯一 `REPLY_DECISION=CONFIRMED` 才执行 `node ../normal/scripts/flow_loader.mjs integration development --product-type "$PRODUCT_TYPE" --project-confirm-receipt "$PROJECT_CONFIRM_RECEIPT"`。loader 返回 `PROJECT_CONFIRMATION=VALID` 才能进入步骤 3;返回 `STALE` 时 stdout 已重新渲染当前标准确认,必须原文发送并等待新的明确肯定回复。摘要变化后旧回复失效;用户此前只说明产品、语言,或在当前摘要展示前要求继续,不能替代本确认;当前摘要展示后的 `继续`、`确认`、`OK` 等登记肯定表达可以确认。
193
200
 
194
- - `full_process`:`../normal/full-process-routing.md` 已使用同一个 `integration.start.confirm`,在同一摘要中绑定检查器产生的项目来源、代码状态和其他产品,以及产品、项目路径、语言/框架和服务声明;取得当前 prompt 的 `1` 时直接满足本步骤的启动确认与服务声明确认,禁止再次渲染该消息或要求第二次输入 `1`,直接进入步骤 3。该消息不展示步骤清单,也不缩减执行范围;后续仍必须按当前产品完成本 flow 的全部适用接口、完成条件和 checklist。任一摘要字段变化、确认过期或无法证明回复针对同一摘要时,必须返回完整接入 router 重新扫描并渲染新的单条确认。该确认仍禁止提前展示 MCC、授权范围、产品开通材料或 onboarding 待办。
201
+ - `full_process`:`../normal/full-process-routing.md` 已使用同一个 `integration.start.confirm`,在同一摘要中绑定检查器产生的项目来源、代码状态和其他产品,以及产品、项目路径、语言/框架和服务声明;当前 prompt 的回复经统一判定器确认为明确肯定时,直接满足本步骤的启动确认与服务声明确认,禁止再次渲染该消息或要求第二次确认,直接进入步骤 3。该消息不展示步骤清单,也不缩减执行范围;后续仍必须按当前产品完成本 flow 的全部适用接口、完成条件和 checklist。任一摘要字段变化、确认过期或无法证明回复针对同一摘要时,必须返回完整接入 router 重新扫描并渲染新的单条确认。该确认仍禁止提前展示 MCC、授权范围、产品开通材料或 onboarding 待办。
195
202
 
196
- `integration_only` 有效回复 `1` 进入步骤 3 前,执行 `node ../normal/scripts/telemetry.mjs stage integration.user_confirmed --root-intent integration_only --product-type "$PRODUCT_TYPE"`;`full_process` 已在 `../normal/full-process-routing.md` 上报同名事件,此处不得重复执行。该事件只记录确认发生,不替代完成条件。
203
+ 明确肯定回复通过统一判定器后,只通过上述 development loader 进入步骤 3;loader 自动记录一次 `integration.user_confirmed` 和 `integration.pre_dev_reading.start`,不得另行执行 telemetry 命令。
197
204
 
198
205
  **确认后的上下文锁定**:已有项目保持步骤 1 前确认的实际根目录和原有工程结构;新项目必须已经在步骤 1 前按用户确认的方式完成初始化并通过构建标识检查。此处不重复准备、初始化或探测项目。路径内容与步骤 1 成功时不一致则停止并重新确认;只有目标项目或服务端语言变化时返回步骤 1,其他情况直接进入步骤 3。
199
206
 
@@ -201,6 +208,11 @@ runner 失败时不得展示手写确认或进入步骤 3。runner 成功后,
201
208
 
202
209
  ---
203
210
 
211
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_PREPARE:END -->
212
+
213
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_DEVELOPMENT:START -->
214
+ <!-- ALIPAY_AIPAY_STAGE:integration.user_confirmed -->
215
+ <!-- ALIPAY_AIPAY_STAGE:integration.pre_dev_reading.start -->
204
216
  ### 步骤 3:沙箱配置复核
205
217
 
206
218
  **任务**:步骤 1 已就绪时复核同一沙箱配置;步骤 1 已待配置时保持该状态并继续代码开发
@@ -211,7 +223,7 @@ runner 失败时不得展示手写确认或进入步骤 3。runner 成功后,
211
223
  - [INT.SANDBOX.UNIX_TERMINAL] Unix/macOS/Linux:`READY` 时已用 `reverify` 复核同一配置;步骤 1 或本步骤得到 `CREATE_PENDING|VERIFY_PENDING` 时,未读取或使用无效配置,已保留待配置状态并继续步骤 4
212
224
  - [INT.SANDBOX.WINDOWS_REVERIFIED] Windows:`READY` 时已静默复核步骤 1 通过的项目实际配置、密钥格式和版本控制保护;`VERIFY_PENDING` 时未读取配置或重复展示申领提示,已直接继续代码开发
213
225
 
214
- > 沙箱必含字段、落盘格式、路径输出、重复创建红线和失败处理均以 `modules/sandbox/sandbox-setup-guide.md` 为准。`READY` 时实际本机配置路径是后续唯一可信来源;待配置时 `SANDBOX_PENDING_PATH` 只是预期路径,不得作为配置存在或字段有效的证据。禁止从对话或历史代码复制密钥;对客沙箱摘要只能在代码开发完成且配置后置校验通过后展示。
226
+ > `READY` 时实际本机配置路径是后续唯一可信来源;待配置时 `SANDBOX_PENDING_PATH` 只是预期路径,不得作为配置存在或字段有效的证据。禁止从对话或历史代码复制密钥;对客沙箱摘要只能在代码开发完成且配置后置校验通过后展示。正常路径由 `sandbox_config.sh` 托管字段、落盘、重复创建和失败分支;仅脚本协议异常或用户要求解释时读取沙箱指南。
215
227
 
216
228
  **操作流程**:
217
229
  1. 继承步骤 1 的操作系统、规范化项目路径和服务端语言;任一值变化就返回步骤 1,不在本步骤重新探测。
@@ -232,14 +244,14 @@ bash modules/scripts/sandbox_config.sh reverify "<规范化项目路径>" "<已
232
244
 
233
245
  **任务**:阅读 SDK 要点、本地契约和当前语言示例
234
246
 
235
- 开始读取本地依据前,先执行 `node ../normal/scripts/telemetry.mjs stage integration.pre_dev_reading.start --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"`。
247
+ 读取本地依据前执行 `node ../normal/scripts/integration_context_runner.mjs resolve --product-type "$PRODUCT_TYPE" --server-language "$SERVER_LANGUAGE"`。只接受唯一 `ALIPAY_AIPAY_INTERNAL:INTEGRATION_CONTEXT=<json>`,并只读取其中列出的 SDK 参考、当前产品本地契约、当前语言示例、适用 checklist 章节和沙箱验收入口;缺失、重复、路径不存在或产品/语言不一致时停止,不回退到跨产品预读。
236
248
 
237
249
  本步骤只加载和核对代码开发依据;成功时不发送“文档已读取”“准备完成”等对客进度,直接进入步骤 5。本地依据缺失时输出实际缺口,禁止猜测。在线文档只在 fallback 条件下读取,不作为默认必读材料。
238
250
 
239
251
  **完成条件**:
240
252
  - [INT.PRE.SDK_GUIDE_READ] 已阅读 `modules/alipay-sdk-reminder.md` 完整内容(私钥格式、页面跳转方法、验签排查等)
241
253
  - [INT.PRE.SDK_RULES_APPLIED] 已理解 SDK 选择和 SDK 防幻觉强制规则
242
- - [INT.PRE.LOCAL_CONTRACTS_READ] 已按当前产品读取 `modules/interface-guide.md` 路由的本地接口契约;网站支付和 APP 支付同时读取通用收单与异步通知契约
254
+ - [INT.PRE.LOCAL_CONTRACTS_READ] 已按 `integration_context_runner.mjs` 当前产品事实读取本地接口契约;网站支付和 APP 支付同时读取通用收单与异步通知契约
243
255
  - [INT.PRE.OFFICIAL_DOCS_FALLBACK_BOUNDARY] 在线文档仅在本地依据缺失、字段不确定、排查官方错误码、用户明确要求或官方能力变化时读取;未无条件 curl 或递归抓取无关文档
244
256
  - [INT.PRE.EXAMPLES_READ] 已阅读产品相关接口代码示例
245
257
 
@@ -253,8 +265,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
253
265
 
254
266
  **必须阅读的文件**:
255
267
  - `modules/alipay-sdk-reminder.md` - SDK防坑指南(含私钥格式、页面跳转方法、验签排查等)
256
- - `modules/interface-guide.md` - 本地契约与示例索引
257
- - 当前产品契约和当前语言示例 - 按 `interface-guide.md` 的默认读取路由加载
268
+ - 当前产品契约和当前语言示例 - 只按 runner 返回的路径加载;接口索引由 runner 内部解析,不进入 Agent 默认上下文
258
269
 
259
270
  **🚫 SDK 防幻觉强制规则**:
260
271
 
@@ -270,13 +281,19 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
270
281
  | 6 | 遇到 `invalid-signature` 报错 | 严禁凭猜测归因到私钥格式;先核对实际发送、参与签名和服务端验签的参数是否完全一致 |
271
282
  | 7 | 配置接入后必须后置校验 | Unix/macOS/Linux 必须确认服务端加载器直接读取已验证文件、字段映射正确且 SDK 配置匹配;Windows 必须确认项目读取同一套本机沙箱应用配置;失败时禁止继续联调 |
272
283
 
284
+ 步骤 4 的本地依据全部取得后,执行 `node ../normal/scripts/flow_loader.mjs integration implementation --product-type "$PRODUCT_TYPE"` 加载步骤 5;不得直接读取后续整段 flow。
285
+
273
286
  ---
274
287
 
288
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_DEVELOPMENT:END -->
289
+
290
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_IMPLEMENTATION:START -->
291
+ <!-- ALIPAY_AIPAY_STAGE:integration.code_dev.start -->
275
292
  ### 步骤 5:代码生成
276
293
 
277
294
  **任务**:根据用户选择的开发语言和产品,在已确认的目标项目根目录中生成集成代码
278
295
 
279
- 开始修改或生成用户项目代码前,先执行 `node ../normal/scripts/telemetry.mjs stage integration.code_dev.start --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"`。
296
+ 进入本 flow 的 `implementation` 阶段时,阶段 loader 会在代码修改开始前记录 `integration.code_dev.start`;不得另行执行 telemetry 命令。
280
297
 
281
298
  **完成条件**:
282
299
  - [INT.CODE.BASE_IMPLEMENTED] 已完成支付宝支付产品集成代码实现
@@ -287,13 +304,20 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
287
304
  - [INT.LOCAL_ACCEPTANCE.NOTIFY_DEFERRED] 用户处于“本地生产参数验收模式”时,已明确记录当前暂不联调公网 `notify_url`,支付结果确认依赖异步通知处理代码加主动查询兜底;未把同步回跳参数当作支付成功依据
288
305
  - [INT.A2M.PRODUCTION_CONTROLS] 按量付费生产接入中已补齐订单持久化、本地订单匹配、金额一致性、资源防串、幂等履约和履约确认失败可重试逻辑,不存在未实现的关键 TODO
289
306
 
290
- **实现与自检入口**:按当前语言和产品读取 `modules/interface-guide.md` 路由的本地接口契约和专用/通用接口示例,并完整应用 `modules/alipay-sdk-reminder.md` 的生成前自检与配置后置校验。`interface-guide.md` 中的 `./code-examples/...` 链接相对 `modules/interface-guide.md` 所在目录解析;从本 flow 所在目录读取实际示例时必须使用 `modules/code-examples/...`,例如 Node.js 按量付费示例为 `modules/code-examples/nodejs/4-按量付费/A2MPaymentDemo.js`,不得查找 `code-examples/...` 或 `references/integration/code-examples/...`。本地缺少示例不等于接口不适用;用户限定本轮范围时,未实现的适用接口必须列为待办,不得宣称完整集成。
307
+ **实现与自检入口**:按 runner 返回值读取当前语言和产品的本地接口契约及专用/通用示例,并完整应用 `modules/alipay-sdk-reminder.md` 的生成前自检与配置后置校验。从本 flow 所在目录读取实际示例时必须使用 `modules/code-examples/...`,例如 Node.js 按量付费示例为 `modules/code-examples/nodejs/4-按量付费/A2MPaymentDemo.js`,不得查找 `code-examples/...` 或 `references/integration/code-examples/...`。本地缺少示例不等于接口不适用;用户限定本轮范围时,未实现的适用接口必须列为待办,不得宣称完整集成。
291
308
 
292
309
  **Node.js 项目前置核对**:目标语言为 Node.js 时,生成或修改代码前必须先读取目标项目 `package.json`,确认 `type`、启动脚本、已安装依赖和框架版本;安装或发现 `alipay-sdk` 后,必须按 `modules/alipay-sdk-reminder.md` 读取实际 `node_modules/alipay-sdk/package.json` 与类型定义来确定导入方式、`pageExec`/`sdkExecute`/`checkNotifySign` 等方法名。不得凭本地示例中的 `require`/`import` 行、历史记忆或其他项目版本推断当前项目写法。
293
310
 
294
- 开始执行代码自检、语法/静态检查或支付配置后置校验前,先执行 `node ../normal/scripts/telemetry.mjs stage integration.local_verify.start --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"`。
311
+ 代码修改完成后,执行 `node ../normal/scripts/flow_loader.mjs integration verification --product-type "$PRODUCT_TYPE"` 加载配置后置校验;不得把代码写入直接当作验证通过。
312
+
313
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_IMPLEMENTATION:END -->
314
+
315
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_VERIFICATION:START -->
316
+ <!-- ALIPAY_AIPAY_STAGE:integration.local_verify.start -->
317
+
318
+ 开始执行代码自检、语法/静态检查或支付配置后置校验前,进入本 flow 的 `verification` 阶段;阶段 loader 会自动记录 `integration.local_verify.start`,不得另行执行 telemetry 命令。
295
319
 
296
- **支付配置接入与后置校验**:`sandboxConfigState=READY` 时,Unix/macOS/Linux 快速沙箱由商家服务端代码使用当前语言的标准 JSON 解析器,在运行时读取步骤 1/3 已验证的 `.alipay-sandbox.json`,并从 `appIds[0]` 映射 `appId`、`alipayPublicKey` 和当前语言私钥字段;不得先用 `jq`、`cat` 或临时脚本把字段原文打印到工具输出、复制到源码或重复写入 `.env`。项目已有配置抽象时在其服务端加载边界接入该 JSON,不改变字段原值。Windows 从步骤 1 由 Agent 写入并校验的本机敏感配置读取。后置校验按 `modules/sandbox/sandbox-setup-guide.md` 第 7 节检查实际加载路径、字段选择、SDK 初始化和版本控制保护;Java 使用 `appPrivateKey`,其他四种语言使用 `appPrivatePkcsKey`。A2M 的 `seller_signature` 使用原生密码库时,只在调用边界按库要求解析密钥。失败时修正加载器或 SDK 配置,禁止猜测、转换格式或改写原始值。
320
+ **支付配置接入与后置校验**:`sandboxConfigState=READY` 时,Unix/macOS/Linux 快速沙箱由商家服务端代码使用当前语言的标准 JSON 解析器,在运行时读取步骤 1/3 已验证的 `.alipay-sandbox.json`,并从 `appIds[0]` 映射 `appId`、`alipayPublicKey` 和当前语言私钥字段;不得先用 `jq`、`cat` 或临时脚本把字段原文打印到工具输出、复制到源码或重复写入 `.env`。项目已有配置抽象时在其服务端加载边界接入该 JSON,不改变字段原值。Windows 从步骤 1 由 Agent 写入并校验的本机敏感配置读取。后置校验必须检查实际加载路径、字段选择、SDK 初始化和版本控制保护;Java 使用 `appPrivateKey`,其他四种语言使用 `appPrivatePkcsKey`。A2M 的 `seller_signature` 使用原生密码库时,只在调用边界按库要求解析密钥。失败时修正加载器或 SDK 配置,禁止猜测、转换格式或改写原始值。
297
321
 
298
322
  `sandboxConfigState=CREATE_PENDING|VERIFY_PENDING` 时仍完整实现当前产品全部适用接口、安全校验和配置加载边界,但不得读取当前无效配置、写入占位 appId/密钥、把示例值当作运行配置或声称 `INT.CODE.CONFIG_VERIFIED` 通过。加载器在配置缺失或无效时必须明确失败并阻止真实 SDK 调用;本轮所有依赖沙箱值的运行验证保持未完成。
299
323
 
@@ -313,30 +337,43 @@ node ../normal/scripts/integration_message_runner.mjs windows-sandbox-summary --
313
337
 
314
338
  Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 只包含实际取得的非敏感应用、商家、买家和沙箱标识,缺失可选项直接省略。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。
315
339
 
340
+ <!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
316
341
  **网站支付回跳默认规则**:用户未特别说明时,默认实现支付后同步回跳。`return_url` 必须来自已确认目标项目的实际协议、主机、端口和路由,禁止保留 `your-domain.com`、示例端口或猜测路径。项目没有结果页时,在当前技术栈内新增与既有 UI 一致的 GET 回跳路由和页面。用户已明确不需要同步回跳时,直接按关闭分支验收,不增加第二次确认;仍必须保留异步通知、交易查询和商户订单查询页。用户未明确关闭但代码缺少 `return_url` 时,必须修复为默认同步回跳分支,不得要求用户接受遗漏。验收结论必须从实际代码重新检查,不接受调用方自报 `returnMode`。
342
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
317
343
 
344
+ <!-- ALIPAY_AIPAY_PRODUCT:webpay,apppay:START -->
318
345
  **本地生产参数验收模式**:用户项目尚未上线、无法提供真实公网地址,或当前自定义域名/TLS 检查失败时,网站支付/APP 支付可以进入本模式。要求如下:
319
346
 
320
347
  1. 代码层必须已经实现异步通知处理入口、验签、关键字段校验、幂等和成功响应 `success`,只是当前环境不对外联调。
321
348
  2. 运行层可以临时关闭异步通知发起配置或不传 `notify_url`;如项目已有显式开关,也可使用项目内已有的 `notify_enabled=false` 等等价配置,并执行 `node ../normal/scripts/integration_message_runner.mjs local-acceptance-notice`,不得另写近似话术。
322
349
  3. 本地模式下,网站支付保留 `localhost` 或当前可访问开发地址的 `return_url`/结果页,APP 支付保留本地订单查询链路,并统一提供服务端交易查询或订单查询页作为结果确认兜底。
323
350
  4. 任何本地模式结果都只能表述为“本地正式验收完成”或“本地生产参数验收完成,公网异步通知待补齐”,不得表述为“生产就绪”。
351
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
324
352
 
353
+ <!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
325
354
  **按量付费沙箱 serviceId**:生成或写入按量付费沙箱运行配置时,`serviceId` 固定使用 `api_mock_service_id`,禁止向用户索要正式 `serviceId` 才继续沙箱联调。该值必须与正式环境配置隔离;正式上线前替换为服务市场注册或复用结果中的真实 `serviceId`。
326
355
 
327
356
  **按量付费生产边界**:五语言 A2M 文件只是核心协议与 SDK 调用示例。生产实现必须通过 `modules/checklist.md` 的全部按量付费专项校验;任一关键控制仍为 TODO、注释、内存演示或伪代码时,不得满足 `INT.CODE.*` / `INT.A2M.PRODUCTION_CONTROLS` 或标记生产就绪。
328
357
 
329
358
  > ⚠️ **按量付费**:代码生成后启动本地服务,后续步骤 6 将默认进行端到端沙箱服务端联调。服务需实现 402 协议(无 `Payment-Proof` 时返回 HTTP 402 + `Payment-Needed` 头)。
359
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
360
+
361
+ 配置后置校验结束后,执行 `node ../normal/scripts/flow_loader.mjs integration acceptance --product-type "$PRODUCT_TYPE"` 加载当前产品适用验收和步骤 7;APP 支付 loader 不记录沙箱验收 stage,但仍加载步骤 7。
330
362
 
331
363
  ---
332
364
 
333
- ### 步骤 6:沙箱测试与体验(按量付费、网站支付)
365
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_VERIFICATION:END -->
366
+
367
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_ACCEPTANCE:START -->
368
+ <!-- ALIPAY_AIPAY_STAGE:integration.sandbox_acceptance.start products=aipay,webpay -->
369
+ ### 步骤 6:沙箱测试与体验(AI 按量付费、AI 网页应用收款)
334
370
 
335
371
  > APP 支付跳过本步骤,直接进入步骤 7。按量付费和网站支付只有在 `sandboxConfigState=READY` 且配置后置校验通过时才执行本步骤;`CREATE_PENDING|VERIFY_PENDING` 时跳过全部沙箱依赖动作并进入步骤 7,不渲染 `a2m.test.*`、`a2m.payment.experience`、`webpay.sandbox.experience*` 或 `sandbox.android.client`。只有按量付费满足本步骤全部端到端完成条件时,才能对客输出“沙箱测试通过”或等价结论;网站支付和 APP 支付不得输出该结论。
336
372
 
337
- 实际进入本步骤的沙箱联调或付款体验前,先执行 `node ../normal/scripts/telemetry.mjs stage integration.sandbox_acceptance.start --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"`。APP 支付跳过本步骤时不输出该事件。
373
+ 进入本 flow 的 `acceptance` 阶段时,阶段 loader 会在适用沙箱联调或付款体验开始前记录 `integration.sandbox_acceptance.start`;AI 移动应用收款不会记录该 stage。不得另行执行 telemetry 命令。
338
374
 
339
- #### 网站支付:提供人工沙箱付款指引
375
+ <!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
376
+ #### AI 网页应用收款:提供人工沙箱付款指引
340
377
 
341
378
  网站支付步骤 6 是用户可操作的付款体验交付,不是支付接口冒烟测试。启动服务、访问首页、用 `curl` 调用下单接口或取得 HTML 支付表单,只能证明对应本地接口有响应;没有向用户提供可在浏览器打开的真实支付页面和以下两种付款方式时,禁止标记步骤 6 完成:
342
379
 
@@ -353,7 +390,7 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
353
390
  4. 默认分支中,Agent 具备浏览器/UI 验证能力时,实际打开回跳页,确认页面非空白、无可见报错且关键状态内容正常渲染。不具备时,不向用户追加人工确认;将“回跳页 UI 人工待验证”记录到最终 checklist 的 `manualItems`,并继续提供沙箱付款入口。
354
391
 
355
392
  5. 用户已明确关闭同步回跳时,不要求或猜测 `return_url`;确认 SDK 请求未传该字段,并改为验证异步通知处理代码、交易查询和商户订单查询页。本地生产参数验收模式下,如暂无公网 HTTPS `notify_url`,将公网异步通知联调标记为人工待验证,不以此阻塞本地正式验收。
356
- 6. 按 `modules/sandbox/sandbox-setup-guide.md` 第 5.5 节输出沙箱付款说明。操作顺序为:启动服务 → 用浏览器访问支付页面 → 发起支付 → 唤起沙箱收银台 → 用户从“收银台账号登录”与“安卓沙箱支付宝扫码”中二选一完成付款 → 返回商户结果页并查询展示订单状态。
393
+ 6. 输出沙箱付款说明。操作顺序为:启动服务 → 用浏览器访问支付页面 → 发起支付 → 唤起沙箱收银台 → 用户从“收银台账号登录”与“安卓沙箱支付宝扫码”中二选一完成付款 → 返回商户结果页并查询展示订单状态。
357
394
 
358
395
  回跳地址无法确定、访问失败或页面出现确定错误时,必须先修正;本轮无法继续修正时进入最终 checklist 的未完成项,不得宣称网站支付代码开发完成。仅缺少浏览器/UI 证据时记录“回跳页 UI 人工待验证”,不得宣称回跳页已验证,但不阻塞沙箱付款入口交付。该体验不新增业务写操作确认点,用户暂未付款不阻止后续代码校验。
359
396
 
@@ -366,8 +403,10 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
366
403
 
367
404
  - [INT.WEBPAY.RETURN_VERIFIED] 默认分支已确认实际 `return_url` 与项目路由一致,启动服务后 GET 访问通过,且已通过 Agent 浏览器/UI 验证取得页面正常渲染的证据;当前环境无法取得 UI 证据时只能记为人工待验证,不能满足本完成条件
368
405
  - [INT.WEBPAY.NO_RETURN_VERIFIED] 关闭分支已记录用户先前明确提出的不使用同步回跳,确认 SDK 请求未传 `return_url`,并完成异步通知处理代码、交易查询和商户订单查询页校验;缺少公网 HTTPS `notify_url` 时,已明确标记公网通知联调为人工待验证
406
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
369
407
 
370
- #### 按量付费:自动沙箱联调
408
+ <!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
409
+ #### AI 按量付费:自动沙箱联调
371
410
 
372
411
  **任务**:验证按量付费 402 协议端到端服务端联调流程
373
412
 
@@ -389,13 +428,24 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
389
428
  **默认执行规则**:
390
429
  1. 从已确认的目标项目和步骤 3 已校验的沙箱配置中确定服务请求地址、HTTP 方法和沙箱买家 `userId`;仅缺少无法从当前上下文取得的真实参数时才询问对应信息,禁止编造或猜测。
391
430
  2. 确认本地服务可访问;项目已有明确启动方式且当前环境可执行时直接启动,否则只要求用户完成必要的服务启动。服务恢复可访问后自动继续,不询问是否执行沙箱测试。
392
- 3. 从本 flow 所在目录执行下列固定 runner 命令,输出固定联调说明后立即继续,不等待用户确认;禁止另写开始话术。服务地址和 HTTP 方法只用于后续实际命令,不在本消息中展示:
431
+ 3. 预检通过后先从本 flow 所在目录执行当前会话联调 guard。GET 禁止传 body;POST 只传项目实际 body 文件的绝对路径,由 runner 内部计算摘要,不打印内容。首次执行不传 `--prior-receipt`;本轮已有 `A2M_EXECUTION_RECEIPT` 时必须原样传入:
432
+
433
+ ```bash
434
+ # GET
435
+ node ../normal/scripts/integration_message_runner.mjs a2m-execution-guard --project-path "$PROJECT_PATH" --service-url "$SERVICE_URL" --http-method GET [--prior-receipt "$A2M_EXECUTION_RECEIPT"]
436
+ # POST
437
+ node ../normal/scripts/integration_message_runner.mjs a2m-execution-guard --project-path "$PROJECT_PATH" --service-url "$SERVICE_URL" --http-method POST --request-body-file "$POST_BODY_FILE" [--prior-receipt "$A2M_EXECUTION_RECEIPT"]
438
+ ```
439
+
440
+ 只接受唯一 `ALIPAY_AIPAY_INTERNAL:A2M_EXECUTION=<json>`。`decision=RUN` 时保存新 receipt 并继续;`REUSE_PASSED` 复用同一项目和输入的本轮通过证据,不重复联调;`BLOCK_UNCHANGED` 表示失败后代码、配置和输入均未变化,禁止重跑;`UNKNOWN_PREVIOUS_EXECUTION` 表示上次命令可能已发出但未登记终态,禁止自动重跑,先核对实际结果。项目、服务 URL、方法或 POST body 变化时 runner 才会产生新的 `RUN` receipt。receipt 只保留在当前会话,不写跨会话业务进度。
441
+
442
+ 4. 仅 `decision=RUN` 时执行下列固定 runner 命令,输出固定联调说明后立即继续,不等待用户确认;禁止另写开始话术。服务地址和 HTTP 方法只用于后续实际命令,不在本消息中展示:
393
443
 
394
444
  ```bash
395
445
  node ../normal/scripts/integration_message_runner.mjs a2m-test-start
396
446
  ```
397
447
 
398
- 4. Unix/macOS/Linux 按实际 HTTP 方法从本 flow 所在目录继续执行且只执行以下既有命令。POST body 必须来自已确认目标项目中的实际文件,不把动态 JSON 拼进命令文本:
448
+ 5. Unix/macOS/Linux 按实际 HTTP 方法从本 flow 所在目录继续执行且只执行以下既有命令。POST body 必须来自已确认目标项目中的实际文件,不把动态 JSON 拼进命令文本:
399
449
 
400
450
  ```bash
401
451
  # GET
@@ -436,7 +486,7 @@ node ../normal/scripts/python_script_runner.mjs modules/scripts/local_402_sandbo
436
486
  node ../normal/scripts/python_script_runner.mjs modules/scripts/local_402_sandbox_pay.py run --url "$SERVICE_URL" --method POST --body "@$POST_BODY_FILE" --buyer-id "$BUYER_2088" --auto-complete --require-payment-validation
437
487
  ```
438
488
 
439
- 只传已确认的本机服务 URL、GET/POST、实际沙箱买家 userId 和项目内 POST body 文件;禁止传入自定义收银端点、`Payment-Proof` 或 attestation。只有同一次命令退出码为 0,且输出包含实际资源交付校验通过和敏感产物已清理,才能记录联调通过;204、空响应、空资源、明确验付/履约失败或异常 `Payment-Validation` 均不得通过。失败后清理本轮敏感产物并重新执行完整联调。
489
+ 只传已确认的本机服务 URL、GET/POST、实际沙箱买家 userId 和项目内 POST body 文件;禁止传入自定义收银端点、`Payment-Proof` 或 attestation。只有同一次命令退出码为 0,且输出包含实际资源交付校验通过和敏感产物已清理,才能记录联调通过;204、空响应、空资源、明确验付/履约失败或异常 `Payment-Validation` 均不得通过。命令结束后立即执行 `node ../normal/scripts/integration_message_runner.mjs a2m-execution-result --receipt "$A2M_EXECUTION_RECEIPT" --outcome <PASSED|FAILED>` 并保存返回的新 receipt;进程被中断且无法登记时保留原 receipt,由下次 guard 返回 `UNKNOWN_PREVIOUS_EXECUTION`。失败后只有项目代码、配置或执行输入实际变化并取得新 `RUN` receipt 才能重新联调。
440
490
 
441
491
  服务未就绪时固定使用 `integration.service.not_ready` 输出实际缺口和恢复动作;必须执行下列命令。不得运行测试、登记 `INT.A2M.SERVICE_READY=PASS` 或临场改写近似话术。
442
492
 
@@ -445,6 +495,7 @@ node ../normal/scripts/integration_message_runner.mjs service-not-ready --recove
445
495
  ```
446
496
 
447
497
  > 详细测试流程见 `modules/sandbox/a2m-sandbox-test.md`
498
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
448
499
 
449
500
  ---
450
501
 
@@ -467,13 +518,19 @@ node ../normal/scripts/integration_message_runner.mjs safety-closeout --variant
467
518
  - 如果当前意图是 `integration_only`:提醒用户正式上线前还需要完成对应支付产品的产品开通。
468
519
  - 如果当前意图是 `full_process`:本步骤只说明仍需完成步骤 8 集成校验;此时不展示签约待办、MCC、授权范围或材料。全部适用步骤通过时进入 onboarding;只有沙箱待配置且其余检查通过,或沙箱 `READY` 且仅剩非阻塞人工待验证项时,也以“部分通过”继续 onboarding;其他阻塞缺口仍停在代码开发。
469
520
 
521
+ 步骤 7 完成后执行 `node ../normal/scripts/flow_loader.mjs integration checklist --product-type "$PRODUCT_TYPE" --project-path "$PROJECT_PATH"`;只接受该命令生成的本轮 `CHECKLIST_SCOPE_RECEIPT`,不得使用修复前或其他项目的 receipt。
522
+
470
523
  ---
471
524
 
525
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_ACCEPTANCE:END -->
526
+
527
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CHECKLIST:START -->
528
+ <!-- ALIPAY_AIPAY_STAGE:integration.checklist.start -->
472
529
  ### 步骤 8:代码开发校验
473
530
 
474
531
  **完成条件**:已执行 `modules/checklist.md` 的全部适用检查,并保留每项实际命令、文件检查或人工待验证依据;不得使用 Agent 自拟 attestation、空哈希或口头结论代替。
475
532
 
476
- **自动执行规则**:步骤 7 完成后先执行 `node ../normal/scripts/telemetry.mjs stage integration.checklist.start --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"`,再直接读取 `modules/checklist.md`,默认只执行代码阅读、配置后置校验、语法/静态检查,以及无需安装依赖、联网或监听端口的已有定向测试,并复用步骤 5、步骤 6 已取得的校验证据,不增加“是否需要校验”的用户确认。
533
+ **自动执行规则**:步骤 7 完成后进入 `checklist` 阶段;阶段 loader 自动记录 `integration.checklist.start`,输出唯一 `ALIPAY_AIPAY_INTERNAL:CHECKLIST_SCOPE_RECEIPT=<receipt>`,并加载本节。该 scope receipt 只绑定 checklist 开始时的项目路径与快照,用于阻止项目变化后沿用旧结论,不证明任何检查已经执行。随后读取 `modules/checklist.md` 当前产品适用章节,默认只执行代码阅读、配置后置校验、语法/静态检查,以及无需安装依赖、联网或监听端口的已有定向测试,并复用步骤 5、步骤 6 已取得的校验证据,不增加“是否需要校验”的用户确认。
477
534
 
478
535
  **执行边界**:默认禁止安装依赖或浏览器、切换运行时版本、启动长期服务、申请网络/端口权限、执行截图或 UI 自动化,也不得重复步骤 6 已完成的端到端测试。遇到 `EPERM`、网络受限、缺少浏览器等环境限制时,将对应项标记为“人工待验证”并停止扩展排查;不得据此推断代码或运行时兼容问题。只有用户明确要求继续扩展验证时,才展示拟执行动作并按原确认规则处理。
479
536
 
@@ -494,16 +551,26 @@ node ../normal/scripts/integration_message_runner.mjs safety-closeout --variant
494
551
 
495
552
  ```bash
496
553
  printf '%s' "$CHECKLIST_RESULT_JSON" \
497
- | node ../normal/scripts/integration_message_runner.mjs checklist-result --variant <AIPAY|WEBPAY|APPPAY>
554
+ | node ../normal/scripts/integration_message_runner.mjs checklist-result --variant <AIPAY|WEBPAY|APPPAY> --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT"
498
555
  ```
499
556
 
500
557
  上方 stdin 命令保持用于 Unix/macOS/Linux。Windows 不使用 shell 管道或续行符,按当前产品在 PowerShell 中执行对应单行命令;参数值仍来自同一最终 checklist 事实:
501
558
 
559
+ <!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
560
+ ```powershell
561
+ node ../normal/scripts/integration_message_runner.mjs checklist-result --variant AIPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-result "$SANDBOX_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
562
+ ```
563
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
564
+ <!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
565
+ ```powershell
566
+ node ../normal/scripts/integration_message_runner.mjs checklist-result --variant WEBPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --webpay-experience-result "$WEBPAY_EXPERIENCE_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
567
+ ```
568
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
569
+ <!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
502
570
  ```powershell
503
- node ../normal/scripts/integration_message_runner.mjs checklist-result --variant AIPAY --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-result "$SANDBOX_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
504
- node ../normal/scripts/integration_message_runner.mjs checklist-result --variant WEBPAY --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --webpay-experience-result "$WEBPAY_EXPERIENCE_RESULT" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
505
- node ../normal/scripts/integration_message_runner.mjs checklist-result --variant APPPAY --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
571
+ node ../normal/scripts/integration_message_runner.mjs checklist-result --variant APPPAY --project-path "$PROJECT_PATH" --scope-receipt "$CHECKLIST_SCOPE_RECEIPT" --overall-result "$OVERALL_RESULT" --failed-items "$FAILED_ITEMS" --manual-items "$MANUAL_ITEMS" --sandbox-config-state "$SANDBOX_CONFIG_STATE" --blocking-defect-state "$BLOCKING_DEFECT_STATE" --execution-mode "$EXECUTION_MODE" --next-flow-reminder "$NEXT_FLOW_REMINDER"
506
572
  ```
573
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
507
574
 
508
575
  `failedItems` 与 `manualItems` 必须在各自受控单行值中包含对应的确定下一步;没有对应项目时明确传入“无”。`sandboxConfigState` 必须直接复用本轮脚本终态,只允许 `READY|CREATE_PENDING|VERIFY_PENDING`。`blockingDefectState` 来自同一最终 checklist:除沙箱配置及其直接依赖动作外,存在任一代码、安全或必要依据缺口时必须为 `PRESENT`,否则为 `NONE`。待配置时 `failedItems` 必须包含沙箱配置及其依赖动作未完成;恢复口令已经由步骤 1/3 的 `sandbox.configuration.pending` 输出,本结果不再重复。
509
576
 
@@ -532,3 +599,4 @@ node ../normal/scripts/integration_message_runner.mjs checklist-result --variant
532
599
  - `integration_only`:仅由 `integration.checklist.result` 输出未通过项、人工待验证项和产品开通提醒,不追加第二份话术。
533
600
  - `full_process`:全部适用步骤通过后进入 `references/onboarding/flow.md`;仅沙箱待配置,或沙箱 `READY` 且仅剩非阻塞人工待验证项时,以“部分通过”继续并保留未完成事实。其他代码、安全或依据缺口停在 Integration,不提前执行 Onboarding。
534
601
  - 未通过时不得宣称完成;沙箱状态不得被产品开通结果覆盖。
602
+ <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CHECKLIST:END -->