@alipay/alipay-aipay 1.8.1 → 1.8.3

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 +3 -3
  2. package/skill/VERSION +1 -1
  3. package/skill/references/integration/flow.md +42 -41
  4. package/skill/references/integration/modules/checklist.md +8 -10
  5. package/skill/references/integration/modules/code-examples/csharp/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  6. package/skill/references/integration/modules/code-examples/csharp/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  7. package/skill/references/integration/modules/code-examples/java/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  8. package/skill/references/integration/modules/code-examples/java/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  9. package/skill/references/integration/modules/code-examples/nodejs/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  10. package/skill/references/integration/modules/code-examples/nodejs/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  11. package/skill/references/integration/modules/code-examples/php/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  12. package/skill/references/integration/modules/code-examples/php/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  13. package/skill/references/integration/modules/code-examples/python/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  14. package/skill/references/integration/modules/code-examples/python/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  15. package/skill/references/integration/modules/interface-contract/apppay-interface-contract.md +1 -1
  16. package/skill/references/integration/modules/interface-contract/notify-url-contract.md +5 -4
  17. package/skill/references/integration/modules/interface-contract/webpay-interface-contract.md +1 -1
  18. package/skill/references/integration/modules/interface-guide.md +1 -1
  19. package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +11 -9
  20. package/skill/references/normal/integration-worker.md +3 -3
  21. package/skill/references/normal/json/customer-messages.json +1 -1
  22. package/skill/references/normal/json/policy-rules.json +1 -1
  23. package/skill/references/normal/scripts/flow_loader.mjs +9 -0
  24. package/skill/references/normal/scripts/integration_message_runner.mjs +88 -16
  25. package/skill/references/normal/scripts/onboarding_message_runner.mjs +9 -5
  26. package/skill/references/normal/scripts/render_customer_message.mjs +150 -53
  27. package/skill/references/onboarding/flow.md +12 -6
  28. package/skill/references/runtime-entry.md +4 -2
  29. package/skill-pre/VERSION +1 -1
  30. package/skill-pre/references/integration/flow.md +43 -41
  31. package/skill-pre/references/integration/modules/checklist.md +10 -10
  32. package/skill-pre/references/integration/modules/code-examples/csharp/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  33. package/skill-pre/references/integration/modules/code-examples/csharp/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  34. package/skill-pre/references/integration/modules/code-examples/java/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  35. package/skill-pre/references/integration/modules/code-examples/java/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  36. package/skill-pre/references/integration/modules/code-examples/nodejs/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  37. package/skill-pre/references/integration/modules/code-examples/nodejs/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  38. package/skill-pre/references/integration/modules/code-examples/php/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  39. package/skill-pre/references/integration/modules/code-examples/php/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  40. package/skill-pre/references/integration/modules/code-examples/python/2-/347/275/221/347/253/231/346/224/257/344/273/230//347/273/237/344/270/200/346/224/266/345/215/225/344/270/213/345/215/225/345/271/266/346/224/257/344/273/230/351/241/265/351/235/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  41. package/skill-pre/references/integration/modules/code-examples/python/3-APP/346/224/257/344/273/230/APP/346/224/257/344/273/230/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
  42. package/skill-pre/references/integration/modules/interface-contract/apppay-interface-contract.md +1 -1
  43. package/skill-pre/references/integration/modules/interface-contract/notify-url-contract.md +5 -4
  44. package/skill-pre/references/integration/modules/interface-contract/webpay-interface-contract.md +1 -1
  45. package/skill-pre/references/integration/modules/interface-guide.md +1 -1
  46. package/skill-pre/references/integration/modules/sandbox/sandbox-setup-guide.md +11 -9
  47. package/skill-pre/references/normal/integration-worker.md +3 -3
  48. package/skill-pre/references/normal/json/customer-messages.json +1 -1
  49. package/skill-pre/references/normal/json/policy-rules.json +1 -1
  50. package/skill-pre/references/normal/scripts/flow_loader.mjs +9 -0
  51. package/skill-pre/references/normal/scripts/integration_message_runner.mjs +88 -16
  52. package/skill-pre/references/normal/scripts/onboarding_message_runner.mjs +9 -5
  53. package/skill-pre/references/normal/scripts/render_customer_message.mjs +155 -53
  54. package/skill-pre/references/onboarding/flow.md +12 -6
  55. package/skill-pre/references/runtime-entry.md +4 -2
@@ -272,6 +272,8 @@ Step 5 直接使用对应 phase 的完整命令;仅出现脚本异常、需要
272
272
 
273
273
  Step 3.1 通常已在同一次 stdout 展示三分支摘要;网站支付和 APP 支付的服务市场固定为“无需处理”,查询失败显示“查询失败”。本地权限未恢复时没有摘要,只消费最新失败 envelope,禁止补写或重放。进入本阶段后只消费同一 `DISCOVERY_RESULT`,不得再次调用 `discovery-summary`、手写或重复输出摘要。
274
274
 
275
+ 应用配置首次展示时,`application-candidates` 的默认 `initial` 输出先包含 `application.configuration.intro` 科普,再展示同一次查询的应用事实及适用选择提示;无应用、仅未上线和含已上线候选均适用。不得单独手写或重复渲染科普;无效选择的 `invalid` 输出及 `application-recheck` 的候选变化提示不重复科普,补资料、获取公钥和后续写操作也不重复展示。
276
+
275
277
  轮到服务或应用时,只有 `query_status=SUCCESS` 且 `candidates` 为数组,才用以下 runner 基于同一快照生成候选事实和选择提示;stdout 是唯一正文,禁止提前展示、手工拼表、压缩、拆分或改写。应用候选存在上线或未上线记录时,runner 必须产生且仅产生一个 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED=application.candidate.select`;命令后的下一动作先将 stdout 原文送达,不得添加标题、提示、风险说明、前后缀或改写,然后立即等待用户选择:
276
278
 
277
279
  ```bash
@@ -532,25 +534,29 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message appl
532
534
 
533
535
  **完成条件**:当前登录、scope 和 MCC 必须有效;签约必须由实际查询确认为已生效;仅按量付费适用的服务分支必须复用或保存成功并取得实际 `serviceId`;应用必须达到 `ON_LINE`、应用公钥已生效且支付宝公钥已实际导出。存在失败、未知、待生效、待审核或人工配置时不得宣称产品开通完成。不维护人工完成条件数量。
534
536
 
535
- 使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出并原文发送 stdout。禁止 Agent 手写短摘要、删减 `productionReadinessBlock`、删减 AI 网页应用收款限制引导或改写后续衔接;AI 网页应用收款收口缺少“【上线前有以下关键点】”和“AI 网页应用收款限制”时视为标准收口未送达,必须重发同一次 stdout。自动重试耗尽、业务错误或查询失败且仍未恢复的动作,统一写入分支结果和 `remainingActions`,只说明一次,不在收口后追问是否重试。必须执行:
537
+ 使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出并原文发送 stdout。禁止 Agent 手写短摘要、删减 `productionReadinessBlock`、删减 AI 网页应用收款限制引导或改写后续衔接;AI 网页应用收款收口缺少“【上线前有以下关键点】”和“AI 网页应用收款限制”时视为标准收口未送达,必须重发同一次 stdout。自动重试耗尽、业务错误或查询失败且仍未恢复的动作,保留在分支结果及内部 `remainingActions`,未解决业务分支的必要恢复动作由 `remainingActions` 放入【当前状态】的“下一步”,不能只依赖前序消息;产品开通各分支已完成且仅剩代码人工验证或沙箱待配置时,分别沿用上线关键点或独立恢复口令,不重复内部汇总待办;仅保留本轮尚未解决分支的具体恢复指引,不重复通用上线提醒或已在上线关键点列出的人工验证项。UNKNOWN 仍先核对事实,禁止自动重放写操作,不在收口后追问是否重试。必须执行:
536
538
 
537
539
  `SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId`、公钥文件路径、错误码、截图证据或其他自由文本;本轮 `ALIPAY_PUBLIC_KEY_EXPORT_STATUS=EXPORTED` 时,`APP_KEY_SAVE_PATH` 必须传入前一步独立应用结果 runner。这些证据不能污染分支结果枚举。
538
540
 
539
541
  进入本步骤前,应用分支已按前一步的交付规则独立输出 `application.operation.result`(无实际 appId 的例外沿用前一步),runner 必须输出唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=application.operation.result`。命令后的下一个 Agent 动作必须先将该次 stdout 原文作为独立用户可见消息送达,送达前禁止 closeout、合并或继续工具调用;总收口不能替代这条应用结果消息。该约束只强化消息交付编排,不新增用户确认点;marker 缺失或不唯一时停止并重跑同一登记命令。
540
542
 
541
543
  ```bash
542
- node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message closeout --product-type "$PRODUCT_TYPE" --root-intent "$ROOT_INTENT" --signing-result "$SIGNING_RESULT" --application-result "$APPLICATION_RESULT" --remaining-actions "$REMAINING_ACTIONS" [--integration-result "$INTEGRATION_RESULT"] [--service-result "$SERVICE_RESULT"] [--sandbox-config-state "$SANDBOX_CONFIG_STATE"] [--manual-verification-items "$MANUAL_VERIFICATION_ITEMS"] --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
544
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message closeout --product-type "$PRODUCT_TYPE" --root-intent "$ROOT_INTENT" --signing-result "$SIGNING_RESULT" --application-result "$APPLICATION_RESULT" --remaining-actions "$REMAINING_ACTIONS" [--integration-result "$INTEGRATION_RESULT"] [--service-result "$SERVICE_RESULT"] [--sandbox-config-state "$SANDBOX_CONFIG_STATE"] [--manual-verification-items "$MANUAL_VERIFICATION_ITEMS"] [--sandbox-summary "$SANDBOX_SUMMARY"] --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
543
545
  ```
544
546
 
545
547
  用户输入计数严格继承 `runtime-entry.md`:active run 内每条聊天框用户消息先执行唯一 `count-user-input --run-id "$RUN_ID" --input-id "$USER_INPUT_ID"`,不按 Skill 相关性筛选;runner、recovery、renderer 和 closeout 不做隐式计数。closeout 生成最终 summary 前使用当前 `HISTORY_COUNT` 快照,正式值始终由 runtime counter 写入,禁止传入或覆盖 `user_input_after_clarify_intent`。
546
548
 
547
- runner 从 `PRODUCT_TYPE` 派生产品名,网站支付/APP 支付派生服务结果“无需处理”,从 `ROOT_INTENT` 派生代码开发栏和后续衔接;标题只按完成条件派生。`onboarding_only` 省略 `--integration-result`、`--sandbox-config-state` 和 `--manual-verification-items`。`full_process`:代码开发通过填“已完成”并传 `READY`;仅沙箱待配置且其余代码与安全检查通过填“部分完成,沙箱配置待完成”并传 `CREATE_PENDING|VERIFY_PENDING`;沙箱 `READY` 且只剩非阻塞人工待验证项时填“部分完成,人工待验证”,传 `READY`,把 checklist `manualItems` 原样作为 `MANUAL_VERIFICATION_ITEMS`,并在 `REMAINING_ACTIONS` 写明实际待办,禁止传“无”。runner 拒绝旧完整参数、stdin JSON、`--input-json`、可派生字段和空字符串伪值。renderer 校验结果与沙箱状态/人工待验证项一致,并派生恢复口令或人工待验证展示;不增加确认点。不得在 stdout 前后追加衔接提醒,不伪造本轮代码修改、沙箱创建或测试结果,也不重复进入 integration。
549
+ runner 从 `PRODUCT_TYPE` 派生产品名,网站支付/APP 支付派生服务结果“无需处理”,从 `ROOT_INTENT` 派生代码开发栏和后续衔接;标题只按完成条件派生。`onboarding_only` 省略 `--integration-result`、`--sandbox-config-state` 和 `--manual-verification-items`。`full_process`:代码开发通过填“已完成”并传 `READY`;仅沙箱待配置且其余代码与安全检查通过填“部分完成,沙箱配置待完成”并传 `CREATE_PENDING|VERIFY_PENDING`;沙箱 `READY` 且只剩非阻塞人工待验证项时填“部分完成,人工待验证”,传 `READY`,把 checklist 已分类的实际 `manualItems` 原样作为 `MANUAL_VERIFICATION_ITEMS`,并在 `REMAINING_ACTIONS` 写明实际待办,禁止传“无”。runner 拒绝旧完整参数、stdin JSON、`--input-json`、可派生字段和空字符串伪值。renderer 校验结果与沙箱状态/人工待验证项一致,并派生恢复口令;`remainingActions` 和 `manualVerificationItems` 仍用于完成条件校验,最终总收口不再单列“本轮流程仍需处理”和“人工待验证”,保留分支状态表、【当前状态】及沙箱恢复提示,不增加确认点。不得在 stdout 前后追加衔接提醒,不伪造本轮代码修改、沙箱创建或测试结果,也不重复进入 integration。
550
+
551
+ 三个产品的总收口只保留分支状态表中的应用发布结果,不再重复输出应用结果详情、appId、支付宝公钥保存路径或应用结果专属下一步。应用详情仅由前一步 `application.operation.result` 独立交付;`closeout` 拒绝旧 `--application-operation-*` 参数,禁止把详情改塞入 `remainingActions` 或其他字段。应用创建、提审、复用和人工配置的事实判据保持不变。
552
+
553
+ 当且仅当签约结果为“已提交,等待生效”且应用结果为“已提交审核,等待上线”时,renderer 从消息目录自动在分支状态表后独立展示状态查询提示;该提示不是 flow 入参,Agent 禁止自行传入、拼接或在模板外重复输出。其他结果组合不展示该提示。
548
554
 
549
- 三个产品的总收口只保留分支状态表中的应用发布结果和实际待办,不再重复输出应用结果详情、appId、支付宝公钥保存路径或应用结果专属下一步。应用详情仅由前一步 `application.operation.result` 独立交付;`closeout` 拒绝旧 `--application-operation-*` 参数,禁止把详情改塞入 `remainingActions` 或其他字段。应用创建、提审、复用和人工配置的事实判据保持不变。
555
+ renderer 按产品和实际结果自动派生【当前状态】、可选【沙箱测试配置】、【上线前有以下关键点】和【提示】。`onboarding_only` 禁止传 `--sandbox-summary`,不展示沙箱信息;`full_process` 仅 AI 网页应用收款在沙箱 READY、代码配置后置校验通过且原摘要有效时,传 Integration 本轮已交付的完整 `SANDBOX_SUMMARY`,包括 Worker 返回的原登记正文。不得重读配置、重建沙箱、摘出凭据或手写表格;无有效原摘要时省略,不展示占位信息。原摘要缺失、过期、格式异常或回放校验失败时,renderer 只省略该可选区块,严禁因此阻塞整个 summary;不输出未校验凭据,也不因省略展示改变或证明业务状态。区块只保留沙箱买家测试账号、沙箱买家登录密码、沙箱买家支付密码,两个密码明文展示(含 Windows);不展示配置路径、appId、产品或密钥行。按量付费与 APP 支付禁止传该参数,最终 summary 不展示沙箱配置。沙箱区块用于用户后续测试,不宣称测试通过。
550
556
 
551
- 当且仅当签约结果为“已提交,等待生效”且应用结果为“已提交审核,等待上线”时,renderer 从消息目录自动在 `remainingActions` 后追加状态查询提示;该提示不是 flow 入参,Agent 禁止自行传入、拼接或在模板外重复输出。其他结果组合不展示该提示。
557
+ 上线关键点按“确认上线条件 → 生产配置替换 → 产品专属支付结果确认/服务配置 → 适用收款限制”组织。生产配置包括 appId、应用私钥、对应支付宝公钥及生产网关;应用公钥与应用私钥必须配对,在支付宝侧配置,无需额外配到项目中。应用上线提醒覆盖本轮新建和用户自行准备的其他生产应用。网页/移动收款必须同时实现通知处理和交易查询;缺少 `notify_url` 时省略该字段并由服务端查单兜底,不会仅因缺少该地址而报错。允许省略 `notify_url`,但商家服务端必须可靠主动查单并完成响应验签、订单/金额/状态/归属校验、持久化幂等、后台重试及未决订单恢复;使用通知时需公网 HTTPS、验签、关键字段校验、幂等、`success` 回写和补偿查询。仅没有公网通知地址不应判为不能上线。按量付费 summary 仅保留真实 serviceId、商户 PID/2088 等生产服务配置,不再单列 402 验付和履约回执验证提醒。最终 summary 不重复私钥格式,也不逐字段解释通知校验;这些实现和检查要求仍由原契约、代码开发 flow 及 checklist 执行,不改变自动测试脚本。
552
558
 
553
- renderer 还会按 `productName` 和分支完成条件自动派生上线前检查块。Agent 不传入、不改写该字段,也不得在模板外补第二份生产上线清单。该检查使用“【当前状态】/【上线前有以下关键点】/【提示】”结构,不单列“相关站点”,也不在模板尾部追加第二个查询入口;必要 URL 只放在具体操作步骤中。完成态只能表述为代码开发和产品开通流程已完成,不得替用户确认生产配置已替换、产品真实可收款或应用页面状态;通用上线提醒固定分为三点:前往支付宝 AI 付站点查看产品开通情况;进入一站式接入 → 选择产品 → 密钥配置确认目标支付宝应用已上线;将项目中的支付宝应用配置替换为生产配置,确保 appId、应用私钥、支付宝公钥同属一套生产环境支付宝应用并使用生产网关。三个产品的专属提醒从第 4 点开始;AI 网页应用收款和 AI 移动应用收款必须完成公网 HTTPS `notify_url` 的验签、关键字段校验、幂等、`success` 回写和补偿查询;AI 按量付费必须把沙箱 `api_mock_service_id` 替换为服务市场真实 `serviceId`,A2M 示例中的 `sellerId` 来自商户 PID/2088,由商家自行在支付宝平台确认,不由 Agent 猜测、生成或代填。生产环境应用私钥、账号密码、支付凭证和未脱敏通知内容仍禁止提供给 Agent。分支未完成时,该派生块必须明确上表待办完成前不能正式收款。该提示只在消息目录维护,不增加用户确认点,Agent 不得在模板外重复输出或改写。
559
+ 通用通知地址提醒和用户可选沙箱付款体验不属于缺口,不得写入 `remainingActions`/`manualVerificationItems` 影响完成判定;仅剩这些提醒时按其余适用检查实际证据确定代码结果。实际待验证项必须与部分完成状态对应,不能在 renderer 中隐藏;上游分类有误时只纠正参数,不重测项目。本轮实际尚未验证的项目在上线关键点中列出,不单列“人工待验证”段落,不把尚未验证改成已通过。应用结果与支付宝公钥保存路径仍在前一步独立交付。禁止 Agent 在模板外补第二份生产上线清单或删掉网页收款限制;生产应用私钥、账号密码、支付凭证和未脱敏通知内容不得提供给 Agent。完成态不代表已切生产配置或已可真实收款,不新增确认点。
554
560
 
555
561
  签约、服务和应用分别按本轮脚本实际结果表达:签约提交成功但未生效时,`signingResult` 固定使用“已提交,等待生效”;服务创建或修改成功且取得 `serviceId`、但未取得服务状态时,`serviceResult` 分别固定使用“创建成功,状态未取得”或“修改成功,状态未取得”。任一分支失败或结果未知不清除其他分支成功,也不能概括为“全部失败”。`APPLICATION_RESULT` 沿用应用阶段上述唯一状态映射和本轮实际 marker,字面值必须与消息目录逐字一致。
556
562
 
@@ -14,9 +14,9 @@ AI 网页应用收款覆盖 PC 网页和手机浏览器/H5,接口固定 `alipa
14
14
  5. **用户文件**:只改已确认项目和范围,不清空或删除既有项目;“新建/重做/换一个”不是删除授权。具体删除仍遵守 Integration flow 的清单、二次确认和禁删边界。
15
15
  6. **敏感信息**:应用公钥仅由用户生成并明确提供;禁止请求/处理生产私钥、生成密钥对、补全/改写公钥或添加 PEM 头尾。敏感值、临时 URL 和沙箱资料遵守对应 flow/script 的白名单、权限和输出边界。
16
16
  7. **沙箱结论**:真实快速沙箱配置不得用占位值,唯一例外是 AI 按量付费沙箱 `service_id=api_mock_service_id`,且生产禁用。`CREATE_PENDING|VERIFY_PENDING` 只允许继续代码实现,阻止字段使用、摘要、后置校验、联调和付款体验。字段校验不等于支付测试;仅完整 402 链路满足 flow 才可称沙箱测试通过。
17
- 8. **异步通知**:AI 网页应用收款/AI 移动应用收款必须实现通知。本地无公网 HTTPS `notify_url` 时可不传并以交易查询验收,公网通知联调列为人工待验证;生产上线前须恢复通知并完成验签、幂等、关键字段校验、`success` 回写和补偿查询,否则不宣称生产就绪。
17
+ 8. **异步通知**:AI 网页应用收款/AI 移动应用收款必须实现通知处理和交易查询。`notify_url` 是可选参数;生产也允许省略。未配置时不触发该地址的异步通知,必须由商家服务端通过 `alipay.trade.query` 主动确认支付结果,校验订单、金额、支付状态及归属,幂等更新订单;即使用户关闭页面,仍须继续处理查询重试和未决订单。如使用异步通知,配置商家已部署、支付宝服务端可公网访问的 HTTPS 地址并完成验签、关键字段校验、幂等、`success` 回写和补偿查询。不能只因没有公网通知地址阻止流程或判定不能上线;通知处理代码仍须实现,实际代码或支付结果确认链路缺陷仍是阻断项。
18
18
  9. **受控页面**:授权链接仅由 `auth.sh` 按固定产品/MCC 生成,只允许 `https://aipay.alipay.com/cli-auth` 及登记参数,禁用 CLI `verification_url`;公钥页和系统 opener 只走登记脚本。失败后宿主内置浏览器只可打开已交付的同一 URL 一次;仍失败才提示手动打开,再有限轮询。禁止搜索、改写或自动操作;opener/config 写失败不算业务失败。
19
- 10. **对客输出**:指定 runner/renderer/脚本时,stdout 是唯一对客正文,须原文回复且不加旁白;工具输出记录、折叠面板或日志不等于已对客发送。展示命令只执行登记单条命令,禁 `2>&1`、管道、`grep/sed/awk/tee`、临时包装或拆回 `jq/printf/renderer`。除 `self_update.mjs` 的 `SELF_UPDATE:*` stderr 终态外,内部事实行均以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并输出时仍整行剔除,严禁对客。`integration.start.confirm`、`onboarding.plan.confirm`、`sandbox.configuration.pending`、`sandbox.environment.summary`、`integration.safety.closeout` 和 `integration.checklist.result` 成功渲染时必须各自产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=<messageId>`;下一动作先将剔除内部行后的 stdout 原文作为独立可见消息送达,不得以工具面板、折叠输出、进度话术或最终答复代替,也不得在送达前继续调用工具。送达后同回合按 flow 继续,不等待回复。成功沙箱准备 `READY` 时 stdout 仍按 flow 静默,不构成交付消息;只有待配置正文和后置摘要需要交付。所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障(当前为 `auth.page`、`application.key.page`):先独立送达页面 stdout,再执行受控 opener 和有限轮询,不合并 pending/收口;不要求确认。阻塞正文后等待;剔除内部行后正文为空则直接转移。
19
+ 10. **对客输出**:指定 runner/renderer/脚本时,stdout 是唯一对客正文,须原文回复且不加旁白;工具输出记录、折叠面板或日志不等于已对客发送。展示命令只执行登记单条命令,禁 `2>&1`、管道、`grep/sed/awk/tee`、临时包装或拆回 `jq/printf/renderer`。除 `self_update.mjs` 的 `SELF_UPDATE:*` stderr 终态外,内部事实行均以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并输出时仍整行剔除,严禁对客。`integration.start.confirm`、`onboarding.plan.confirm`、`sandbox.configuration.pending`、`sandbox.environment.summary`、`integration.safety.closeout` 和 `integration.checklist.result` 在 flow 适用且成功渲染时必须各自产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=<messageId>`;下一动作先将剔除内部行后的 stdout 原文作为独立可见消息送达,不得以工具面板、折叠输出、进度话术或最终答复代替,也不得在送达前继续调用工具。送达后同回合按 flow 继续,不等待回复。成功沙箱准备 `READY` 时 stdout 仍按 flow 静默,不构成交付消息;只有待配置正文和后置摘要需要交付。所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障(当前为 `auth.page`、`application.key.page`):先独立送达页面 stdout,再执行受控 opener 和有限轮询,不合并 pending/收口;不要求确认。阻塞正文后等待;剔除内部行后正文为空则直接转移。
20
20
  11. **确定性转移**:固定脚本终态后立即转移;只执行动作处登记命令,禁止追加 `jq/cat/grep/curl` 或临时脚本重复解析。失败只走登记恢复;项目自检不绕过 Skill 脚本或打印敏感配置。
21
21
 
22
22
  ## 标准消息
@@ -92,4 +92,6 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
92
92
 
93
93
  `full_process` 代码开发方案送达前只准备项目、语言、系统分支环境和沙箱;Windows 未明确要求当前配置时记 `VERIFY_PENDING`,不收资料。方案送达后直接进入 Integration 步骤 3,满足条件自动进 Onboarding;仅沙箱待配置,或 READY 且只剩非阻塞人工验证时可部分通过,其他缺口停在 Integration;收口保留全部待办。用户中断后重新确认当前项目和服务端语言,从实际项目扫描恢复,不恢复旧方案状态。
94
94
 
95
+ checklist 的有限修复、禁止循环检测及局部修复后的定向复检只按 Integration flow 步骤 8 执行,不能因阶段重入重新运行全部测试。
96
+
95
97
  仅代码开发结束时提醒仍需产品开通;仅产品开通结束时提醒仍需代码开发。机器规则、消息目录、fixture 和测试不作为默认必读内容。
package/skill-pre/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.0-pre
1
+ 1.8.2-pre
@@ -19,7 +19,7 @@
19
19
 
20
20
  先确认唯一项目和服务端语言,再在产品确定前执行步骤 1;匿名沙箱不传 `PRODUCT`,缺失时创建、存在时复核,待配置只阻止沙箱依赖动作。步骤 2 的完整方案可见送达前不得改代码;送达后按步骤 2 完成执行者分流,再由确定的执行者按同一产品、项目和技术栈开工,不再执行方案 receipt 或项目快照二次校验。`integration_only/full_process` 共用检查器事实和非阻塞 `integration.start.confirm`,一次只开发一个产品。网站支付/APP 支付必须实现下单、查询、退款、退款查询、关闭和异步通知;按量付费只实现 402、验付和履约确认。本流程不主动发起真实生产交易。
21
21
 
22
- 生产 `appId`、应用公钥、应用私钥和支付宝公钥必须属于同一生产应用,私钥格式必须匹配当前语言,格式转换只用支付宝官方密钥工具。网站支付/APP 支付本地无公网 `notify_url` 时仍实现通知代码,可暂不传地址并用查询验收;生产上线前必须恢复公网通知及验签、幂等、关键字段、`success` 回写和补偿查询,不得提前宣称生产就绪。
22
+ 生产 `appId`、应用公钥、应用私钥和支付宝公钥必须属于同一生产应用,私钥格式必须匹配当前语言,格式转换只用支付宝官方密钥工具。网站支付/APP 支付必须同时实现通知处理和交易查询;缺少 notify_url 时下单省略该字段并由服务端主动查单兜底,不会仅因缺少该地址而报错,也不因此将本轮校验判为失败;`notify_url` 可选,生产也可省略。使用通知时验证公网 HTTPS 地址、验签、关键字段、幂等、`success` 回写及补偿查询;不使用时验证商家服务端可靠主动查单、响应验签、订单/金额/状态/归属校验、持久化幂等、后台重试及未决订单恢复。未验证所选链路前不得宣称生产就绪。
23
23
 
24
24
  ### 标准消息执行规则
25
25
 
@@ -38,7 +38,7 @@
38
38
  ## 用户阻塞点索引
39
39
 
40
40
  <!-- GENERATED:INTEGRATION-GUARDS:START -->
41
- 共享护栏:`P-MCP-CONTRACT-FROZEN` 仅用已验证脚本;禁推断或尝试近似方法;`P-SANDBOX-CREDENTIAL-EXCEPTION` Unix/macOS/Linux 与 Windows READY 已校验快速沙箱买家密码仅限登记摘要/付款体验;Windows LEGACY/CODE_ONLY 手工资料仅入受保护项目配置,禁复述、另存或扩展到生产值;`P-SENSITIVE-STATE` 公钥限当前 app 调用且禁复述/保存;敏感值禁入回复/摘要/日志/状态/宽权限文件;临时 URL 仅由登记动作展示;`P-PROJECT-PROTECT` 禁清空/覆盖/删除既有项目;仅改已确认路径和范围;`P-CUSTOMER-OUTPUT-EXCLUSIVE` 登记 stdout 原文是唯一正文;阻塞送达后立即等待;`P-DETERMINISTIC-HANDOFF` 仅执行登记命令并按唯一终态转移;禁追加解析;失败只走登记恢复。
41
+ 共享护栏:`P-MCP-CONTRACT-FROZEN` 仅用已验证脚本;禁推断或尝试近似方法;`P-SANDBOX-CREDENTIAL-EXCEPTION` Unix/macOS/Linux 与 Windows READY 已校验快速沙箱买家密码按既有登记摘要/付款体验展示;Windows LEGACY/CODE_ONLY 手工资料用于受保护项目,仅网页收款登记摘要可明文展示买家密码;最终收口仅网页收款三项买家信息;其他原文禁复述、另存或扩展到生产值;`P-SENSITIVE-STATE` 公钥限当前 app 调用且禁复述/保存;敏感值禁入回复/摘要/日志/状态/宽权限文件;临时 URL 仅由登记动作展示;`P-PROJECT-PROTECT` 禁清空/覆盖/删除既有项目;仅改已确认路径和范围;`P-CUSTOMER-OUTPUT-EXCLUSIVE` 登记 stdout 原文是唯一正文;阻塞送达后立即等待;`P-DETERMINISTIC-HANDOFF` 仅执行登记命令并按唯一终态转移;禁追加解析;失败只走登记恢复。
42
42
  <!-- GENERATED:INTEGRATION-GUARDS:END -->
43
43
  <!-- GENERATED:INTEGRATION-GUARDS-AIPAY:START -->
44
44
  共享护栏:`P-A2M-SANDBOX` A2M 沙箱固定 api_mock_service_id 与沙箱网关;生产值仅用于正式配置;`P-A2M-SUCCESS` 联调仅在 HTTP 200、资源可归属、无业务失败且适用回执有效时通过。
@@ -162,7 +162,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox ensure "<规范
162
162
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-setup --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
163
163
  ```
164
164
 
165
- 资料校验通过后必须建立适用的版本控制忽略和访问保护。该例外只适用于当前沙箱资料;生产环境应用私钥和密码禁止提供给 Agent。Agent 不得在回复、摘要或普通日志中复述收到的值。
165
+ 资料校验通过后必须建立适用的版本控制忽略和访问保护。该例外只适用于当前沙箱资料;生产环境应用私钥和密码禁止提供给 Agent。Agent 不得在回复、摘要或普通日志中复述收到的值;仅 AI 网页应用收款在本步骤 5 已校验后,允许登记沙箱摘要展示买家账号及两个密码,最终 summary 只展示这三项。
166
166
 
167
167
  5. Unix/macOS/Linux 或 Windows READY 的 `ensure` 只依据同一目标项目的 `.alipay-sandbox.json` 当前事实分流:文件不存在时执行既有 `create`;文件存在或为符号链接时执行既有 `verify` 安全路径。已存在配置不得再次调用 `createAnonymousSandbox`、不得覆盖,也不得因为中断重来要求用户删除配置;无效、不安全或被 Git 跟踪时不得使用,脚本按待配置终态统一输出后继续代码开发。
168
168
  6. 只有 Unix/macOS/Linux 或 Windows READY 创建分支会调用冻结的 `alipay-anonymous-sandbox.createAnonymousSandbox`、`{"request":{"appType":"PUBLICAPP"}}`、`PLATFORM`、`PLATFORM_ID`、`ALIPAYCLI_BIZ_INFO` 环境变量和 `result.content[0].text -> success -> data` 解包逻辑;`ALIPAYCLI_BIZ_INFO` 固定标识当前调用方 Skill、当前生效版本和匿名 `skill_user_id`,禁止传入 `PRODUCT`。Windows LEGACY/CODE_ONLY 不调用该方法或 `sandbox_config.sh`。
@@ -334,21 +334,21 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
334
334
 
335
335
  **沙箱摘要展示入口**:只有 `sandboxConfigState=READY`、本步骤的代码实现和支付配置后置校验都已完成,才允许对客展示沙箱环境配置。待配置状态跳过本入口,不另写摘要或失败话术。Unix/macOS/Linux 或 Windows READY 从本 flow 所在目录执行:
336
336
 
337
- `environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 或 Windows READY 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows LEGACY/CODE_ONLY 的应用 ID 和买家测试账号必须取自步骤 1/3 已校验的同一本机配置,两个密码行的固定保存提示仅在实际确认密码已写入该文件后使用。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
337
+ `environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 或 Windows READY 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows LEGACY/CODE_ONLY 的字段必须来自步骤 1/3 已校验的同一本机配置;网页收款使用已校验沙箱买家密码明文,其他产品两个密码行仅在确认密码已写入文件后使用固定保存提示。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
338
338
 
339
339
  ```bash
340
340
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox summary "<productType>" "<规范化项目路径>" "<已确认服务端语言>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
341
341
  ```
342
342
 
343
- 该命令 stdout 只渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder`;Unix/macOS/Linux 和 Windows READY 都从已校验的快速沙箱配置展示买家账号、登录密码与支付密码。命令必须产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=sandbox.environment.summary`,带 `ALIPAY_AIPAY_INTERNAL:` 前缀的配置路径和 `FLOW:SANDBOX_CONFIGURED` 只用于流程转移,严禁对客。命令返回后下一动作必须将剔除内部行后的 stdout 原文独立送达,再进入后续沙箱测试或付款体验;不得把工具面板输出或自写摘要当作已送达。命令不重新创建沙箱,不调用 `createAnonymousSandbox`。`productType` 只能来自步骤 2 已确认的 `aipay|webpay|apppay`;配置路径和语言必须与步骤 1/3 一致。摘要展示失败时不得进入沙箱测试或付款体验,也不得改用 Agent 自写表格。
343
+ 仅 AI 网页应用收款在该命令成功交付后,在当前对话上下文保留剔除内部行的完整 stdout 为 `SANDBOX_SUMMARY`;只允许本轮原始登记摘要,不写业务状态、不摘出或复述凭据。配置后置校验失败、最终状态不再 READY 或实际配置变化时立即丢弃,禁止拿旧摘要补齐。该命令 stdout 只渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder`;Unix/macOS/Linux 和 Windows READY 都从已校验的快速沙箱配置展示买家账号、登录密码与支付密码。命令必须产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=sandbox.environment.summary`,带 `ALIPAY_AIPAY_INTERNAL:` 前缀的配置路径和 `FLOW:SANDBOX_CONFIGURED` 只用于流程转移,严禁对客。命令返回后下一动作必须将剔除内部行后的 stdout 原文独立送达,再进入后续沙箱测试或付款体验;不得把工具面板输出或自写摘要当作已送达。命令不重新创建沙箱,不调用 `createAnonymousSandbox`。`productType` 只能来自步骤 2 已确认的 `aipay|webpay|apppay`;配置路径和语言必须与步骤 1/3 一致。摘要展示失败时不得进入沙箱测试或付款体验,也不得改用 Agent 自写表格。
344
344
 
345
- Windows LEGACY/CODE_ONLY 从项目实际读取的同一本机配置构造不含密码和密钥原文的 `ENVIRONMENT_ROWS`,再从本 flow 所在目录执行以下固定命令;不得重新索取或复述步骤 1 已提供的敏感值,也不得改用 Unix 快速沙箱脚本:
345
+ Windows LEGACY/CODE_ONLY 从项目实际读取的同一本机配置构造 `ENVIRONMENT_ROWS`:网页收款允许已校验沙箱买家密码明文,其他产品继续使用本地保存提示,所有产品均不得包含密钥原文,再从本 flow 所在目录执行以下固定命令;除上述网页收款买家密码外,不得重新索取或复述步骤 1 已提供的敏感值,也不得改用 Unix 快速沙箱脚本:
346
346
 
347
347
  ```powershell
348
348
  node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-summary --product-name "$PRODUCT_NAME" --config-path "$CONFIG_PATH" --environment-rows "$ENVIRONMENT_ROWS" --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
349
349
  ```
350
350
 
351
- Windows LEGACY/CODE_ONLY 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”四行。前两行使用实际沙箱应用 ID 和买家登录账号;两个密码行只展示“已写入本地配置文件,默认不在对话中展开”,不得传入密码原文。不追加 pid、商家或买家 userId、sandboxId。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。
351
+ Windows LEGACY/CODE_ONLY 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”四行。前两行使用实际沙箱应用 ID 和买家登录账号;网页收款两个密码行使用已校验沙箱买家密码明文;其他产品两个密码行只展示“已写入本地配置文件,默认不在对话中展开”,不得传入密码原文。不追加 pid、商家或买家 userId、sandboxId。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。仅网页收款成功交付后保留完整原始 stdout 为 `SANDBOX_SUMMARY`,供最终收口提取三项买家信息;其他产品不保留该变量。
352
352
 
353
353
  <!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
354
354
  **网站支付回跳默认规则**:用户未特别说明时,默认实现支付后同步回跳。`return_url` 必须来自已确认目标项目的实际协议、主机、端口和路由,禁止保留 `your-domain.com`、示例端口或猜测路径。项目没有结果页时,在当前技术栈内新增与既有 UI 一致的 GET 回跳路由和页面。用户已明确不需要同步回跳时,直接按关闭分支验收,不增加第二次确认;仍必须保留异步通知、交易查询和商户订单查询页。用户未明确关闭但代码缺少 `return_url` 时,必须修复为默认同步回跳分支,不得要求用户接受遗漏。验收结论必须从实际代码重新检查,不接受调用方自报 `returnMode`。
@@ -402,7 +402,7 @@ Windows LEGACY/CODE_ONLY 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实
402
402
  3. 默认分支继续启动服务,并对不带支付结果参数的 `return_url` 发起 GET 访问。这一步只验证路由和页面壳:无订单上下文时应展示安全的中性状态,不得因没有签名参数而绕过真实回跳请求的验签和订单归属校验。确认响应成功、无认证或重定向循环;单页应用直接刷新不得返回 404。
403
403
  4. 默认分支中,Agent 具备浏览器/UI 验证能力时,实际打开回跳页,确认页面非空白、无可见报错且关键状态内容正常渲染。不具备时,不向用户追加人工确认;将“回跳页 UI 人工待验证”记录到最终 checklist 的 `manualItems`,并继续提供沙箱付款入口。
404
404
 
405
- 5. 用户已明确关闭同步回跳时,不要求或猜测 `return_url`;确认 SDK 请求未传该字段,并改为验证异步通知处理代码、交易查询和商户订单查询页。本地生产参数验收模式下,如暂无公网 HTTPS `notify_url`,将公网异步通知联调标记为人工待验证,不以此阻塞本地正式验收。
405
+ 5. 用户已明确关闭同步回跳时,不要求或猜测 `return_url`;确认 SDK 请求未传该字段,并改为验证异步通知处理代码、交易查询和商户订单查询页。如尚未部署公网 HTTPS `notify_url`,保留上线前提醒,不单独计入本轮失败或人工待验证项;生产不使用通知时需验证服务端可靠主动查单。
406
406
  6. 输出沙箱付款说明。操作顺序为:启动服务 → 用浏览器访问支付页面 → 发起支付 → 唤起沙箱收银台 → 用户从“收银台账号登录”与“安卓沙箱支付宝扫码”中二选一完成付款 → 返回商户结果页并查询展示订单状态。
407
407
 
408
408
  回跳地址无法确定、访问失败或页面出现确定错误时,必须先修正;本轮无法继续修正时进入最终 checklist 的未完成项,不得宣称网站支付代码开发完成。仅缺少浏览器/UI 证据时记录“回跳页 UI 人工待验证”,不得宣称回跳页已验证,但不阻塞沙箱付款入口交付。该体验不新增业务写操作确认点,用户暂未付款不阻止后续代码校验。
@@ -415,7 +415,7 @@ Windows LEGACY/CODE_ONLY 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实
415
415
  以下两项按实际分支二选一,不得同时要求:
416
416
 
417
417
  - [INT.WEBPAY.RETURN_VERIFIED] 默认分支已确认实际 `return_url` 与项目路由一致,启动服务后 GET 访问通过,且已通过 Agent 浏览器/UI 验证取得页面正常渲染的证据;当前环境无法取得 UI 证据时只能记为人工待验证,不能满足本完成条件
418
- - [INT.WEBPAY.NO_RETURN_VERIFIED] 关闭分支已记录用户先前明确提出的不使用同步回跳,确认 SDK 请求未传 `return_url`,并完成异步通知处理代码、交易查询和商户订单查询页校验;缺少公网 HTTPS `notify_url` 时,已明确标记公网通知联调为人工待验证
418
+ - [INT.WEBPAY.NO_RETURN_VERIFIED] 关闭分支已记录用户先前明确提出的不使用同步回跳,确认 SDK 请求未传 `return_url`,并完成异步通知处理代码、交易查询和商户订单查询页校验;缺少公网 HTTPS `notify_url` 时已保留上线前提醒;不使用通知时验证服务端可靠主动查单
419
419
  <!-- ALIPAY_AIPAY_PRODUCT:END -->
420
420
 
421
421
  <!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
@@ -519,22 +519,20 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message ser
519
519
 
520
520
  ### 步骤 7:集成后说明
521
521
 
522
- **任务**:在最终校验前一次输出安全红线和上线指引,不得提前宣称集成已经完成
522
+ **任务**:按产品交付集成后说明,并进入步骤 8 代码开发校验。
523
523
 
524
524
  **完成条件**:
525
- - [INT.CLOSEOUT.SAFETY_AND_NEXT_STEPS_PRINTED] 已向用户明文输出安全红线和完整上线指引
525
+ - [INT.CLOSEOUT.SAFETY_AND_NEXT_STEPS_HANDLED] 已完成下述产品分支的集成后说明。
526
526
 
527
- **安全与上线提醒(必须明文打印给用户)**:使用 `../normal/json/customer-messages.json` 的 `integration.safety.closeout`,按 `aipay=AIPAY`、`webpay=WEBPAY`、`apppay=APPPAY` 映射产品并传入实际验收口径。模板覆盖私钥保护、支付结果依据、异常恢复、异步通知或 `Payment-Proof`/履约确认、生产配置、真实 `serviceId` 和私钥格式;不重复沙箱摘要、账号密码、Android 下载或步骤 6 体验。不得临场删减、拆分或维护近似话术。命令必须产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=integration.safety.closeout`;返回后的下一动作先将 stdout 原文独立送达,再进入步骤 8。必须执行:
527
+ 网页收款与按量付费直接进入步骤 8。
528
+
529
+ <!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
530
+ APP 支付使用 `integration.safety.closeout/APPPAY` 交付商家服务端与客户端的接入范围说明。命令必须产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=integration.safety.closeout`;返回后的下一动作先将 stdout 原文独立送达,再进入步骤 8:
528
531
 
529
532
  ```bash
530
- node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message safety-closeout --variant "$PRODUCT_VARIANT" --acceptance-summary "$ACCEPTANCE_SUMMARY" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
533
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message safety-closeout --variant APPPAY --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
531
534
  ```
532
-
533
- 生产密钥的一致性、语言格式、官方工具转换、沙箱/生产配置替换、`notify_url` 公网联调边界、按量付费 `api_mock_service_id` 替换和生产就绪表述限制均由上述一条标准消息统一输出。实际写入配置时仍使用不带 PEM 头尾、包装行或说明文字的原始私钥字符串;该执行细节不得省略或改写密钥内容。
534
-
535
- **签约衔接提醒(必须输出)**:
536
- - 如果当前意图是 `integration_only`:提醒用户正式上线前还需要完成对应支付产品的产品开通。
537
- - 如果当前意图是 `full_process`:本步骤只说明仍需完成步骤 8 集成校验;此时不展示签约待办、MCC、授权范围或材料。全部适用步骤通过时进入 onboarding;只有沙箱待配置且其余检查通过,或沙箱 `READY` 且仅剩非阻塞人工待验证项时,也以“部分通过”继续 onboarding;其他阻塞缺口仍停在代码开发。
535
+ <!-- ALIPAY_AIPAY_PRODUCT:END -->
538
536
 
539
537
  步骤 7 完成后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration checklist --product-type "$PRODUCT_TYPE" --project-path "$PROJECT_PATH" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;只接受该命令生成的本轮 `CHECKLIST_SCOPE_RECEIPT`,不得使用修复前或其他项目的 receipt。
540
538
 
@@ -550,35 +548,35 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message saf
550
548
 
551
549
  **自动执行规则**:步骤 7 完成后进入 `checklist` 阶段;最终收口阶段统一记录 `integration_summary`,输出唯一 `ALIPAY_AIPAY_INTERNAL:CHECKLIST_SCOPE_RECEIPT=<receipt>`,并在本 bundle 末尾直接附带当前产品适用清单。该 scope receipt 仅绑定当前产品、路径与快照,防止错配或变更后沿用旧结论,不证明检查已执行。不得再单独读取整份 `modules/checklist.md`。默认只执行代码阅读、最终 runner 内固定 implementation audit、配置后置校验、语法/静态检查,以及无需安装依赖、联网或监听端口的已有定向测试,并复用步骤 5、步骤 6 已取得的校验证据,不增加“是否需要校验”的用户确认。
552
550
 
551
+ **禁止循环与定向复检**:首次覆盖全部适用项,并复用本轮已有且仍有效的证据。局部修复后严禁重新运行全部测试、全部 checklist 动作或无关端到端联调;只复检修复项及有直接依赖、接口、配置或安全影响的关联项,先明确受影响范围,其余未受影响项沿用原证据。每个问题自动修复后最多一次定向复检;仍失败、结果无变化、缺少新证据或受环境阻断时立即停止该问题的重复检测,保留失败/待验证结果并进入最终收口,不以换命令、重载阶段、刷新 scope、重新进入 flow 或主 Agent 要求继续来重置次数。局部复检新发现的问题直接列入本轮结果,不开启无限修复链;后续只有用户明确要求继续处理时再按实际缺口推进。重新取得 scope 只绑定修改后的快照,不代表必须重测所有项目;最终 runner 的固定只读 implementation audit 仍按原契约执行,不等于授权全量测试。
552
+
553
553
  **执行边界**:默认禁止安装依赖或浏览器、切换运行时版本、启动长期服务、申请网络/端口权限、执行截图或 UI 自动化,也不得重复步骤 6 已完成的端到端测试。遇到 `EPERM`、网络受限、缺少浏览器等环境限制时,将对应项标记为“人工待验证”并停止扩展排查;不得据此推断代码或运行时兼容问题。只有用户明确要求继续扩展验证时,才展示拟执行动作并按原确认规则处理。
554
554
 
555
555
  步骤 3 至步骤 7 的必要依据、配置摘要、代码修复、网站回跳或按量付费联调在本轮无法继续时,跳过所有依赖该失败事实的后续动作,但仍进入本步骤:把未满足条件和被跳过动作按实际证据标记为失败或人工待验证,并使用同一 `integration.checklist.result` 收口。不得为了生成结果重新执行已阻断的外部动作。该 runner 只能在当前产品匹配且未收口的 `integration_only|full_process` active run 内执行;telemetry 开启时缺少或不匹配 run 会直接停止,禁止完成 checklist 后静默丢失 `integration.complete_coding`。`full_process` 中,只有沙箱为 `CREATE_PENDING|VERIFY_PENDING` 且代码实现与不依赖沙箱的安全检查均通过、或沙箱为 `READY` 且仅剩非阻塞人工待验证项时,才在输出标准“部分通过”结果后继续 onboarding;存在其他代码、安全或必要依据失败时仍停在代码开发。
556
556
 
557
- 校验项包括:
558
- - 签名验签
559
- - 异步通知
560
- - 异常处理
557
+ **验收阶段边界**:本轮代码开发按沙箱集成验收;checklist 第七节中尚未开通产品或尚未取得、切换生产实值的检查,记为当前阶段不适用并保留上线前待办,不计入失败项或人工待验证项,不单独阻止 Onboarding。仍须检查生产配置加载边界、环境隔离和所有适用代码/安全控制;已发现的实现缺陷、泄露或环境混用仍是阻断缺口。不得为完成本轮检查索取生产私钥、提前改用生产配置或宣称生产就绪。
561
558
 
562
- > 详细校验清单已附在当前阶段 bundle 的“当前产品适用校验清单”。
559
+ **校验完整性要求**:内部必须覆盖当前 bundle 中适用于目标产品的密钥与安全、异步通知、接口覆盖、支付结果处理、按量付费专项、退款、上线前和结果输出章节。checklist 校验结果段落:通过时只输出通过结论和下一步;完整接入部分通过或未通过时只输出实际存在的未完成项、人工待验证项和下一步;两类缺口分别展示,不把人工待验证项复制为未完成项,无项目时不输出对应标签;仅代码开发不展示“未完成项”“人工待验证”独立标签,将实际失败问题及下一步放在【当前状态】,需核实事项只在上线关键点内列一次;仅代码开发另由同一 renderer 追加下述最终摘要。联调或付款体验结论不重复展开;仅网页收款在仅代码开发的最终 checklist 上线关键点前展示步骤 5 已交付摘要中的三项买家信息,完整接入则留到 Onboarding 最终总收口;按量付费与 APP 支付最终 summary 不展示沙箱配置。通过项与不适用项无需逐行展开,用户要求明细时再输出完整逐项结果。精简输出不得导致任何适用校验被跳过。
563
560
 
564
- **验收阶段边界**:本轮代码开发按沙箱集成验收;checklist 第七节中尚未开通产品或尚未取得、切换生产实值的检查,记为当前阶段不适用并保留上线前待办,不计入失败项或人工待验证项,不单独阻止 Onboarding。仍须检查生产配置加载边界、环境隔离和所有适用代码/安全控制;已发现的实现缺陷、泄露或环境混用仍是阻断缺口。不得为完成本轮检查索取生产私钥、提前改用生产配置或宣称生产就绪。
561
+ 先汇总 checklist 证据;本轮可修复时按上述有限修复预算处理,只定向复检受影响项,不渲染中间结果。项目快照变化会使旧 `CHECKLIST_SCOPE_RECEIPT` 失效,必须重新加载本阶段并重跑受影响检查。
565
562
 
566
- **校验完整性要求**:内部必须覆盖当前 bundle 中适用于目标产品的密钥与安全、异步通知、接口覆盖、支付结果处理、按量付费专项、退款、上线前和结果输出章节,不得只检查上方三个摘要项。通过时默认对客只输出通过结论和下一步;部分通过或未通过时只输出实际未完成项、人工待验证项和下一步。步骤 5/6 已展示的沙箱配置、联调或付款体验结论不在 checklist 结果中重复。通过项与不适用项无需逐行展开,用户要求明细时再输出完整逐项结果。精简输出不得导致任何适用校验被跳过。
563
+ 项目不再变化且准备生成最终结论时,下方唯一 runner 会重算项目快照、校验 scope,并执行固定 implementation audit;审计只读非测试生产源码,检查核心接口标记和登记的疑似危险模式,不替代完整 checklist,也不接受 Agent 审计 receipt。
567
564
 
568
- 先汇总 checklist 证据;本轮可修复时先修复、重检,不渲染中间结果。项目快照变化会使旧 `CHECKLIST_SCOPE_RECEIPT` 失效,必须重新加载本阶段并重跑受影响检查。
565
+ 若存在未排除的审计命中且未传 finalize,stdout 为空,stderr 只接受唯一 `ALIPAY_AIPAY_INTERNAL:CHECKLIST_AUDIT={state:"REPAIR_REQUIRED",findings:[...]}`。`findings` 是待核对线索,不凭关键字距离认定实际缺陷。Agent 对同一快照的每个命中先核对一次当前源码、实际控制流或配置依赖:有明确依据证明误报才排除;真实缺陷或证据不足仍阻断,禁止仅改名、搬动代码或改写正确实现来迎合扫描。不能因为接口标记存在就省略完整业务审查。
569
566
 
570
- 项目不再变化且准备生成最终结论时,按 `aipay=AIPAY`、`webpay=WEBPAY`、`apppay=APPPAY` 得到 `PRODUCT_VARIANT`。下方唯一 runner 会重算项目快照、校验 scope,并执行固定 implementation audit;审计只读非测试生产源码,检查核心接口标记和登记的高置信度危险模式,不替代完整 checklist,也不接受 Agent 审计 receipt。
567
+ 需要记录核对时,向同一结论命令追加 `--audit-review "$AUDIT_REVIEW_JSON"`。该值为 JSON 数组,每项只含 `findingId`(当前 findings 中的 `id`)、`decision`(`FALSE_POSITIVE|CONFIRMED|UNRESOLVED`)、`evidence`(1—20 项)。每条 evidence 只含 `path`(当前项目生产源码的规范化相对路径,使用 `/`)、`line`(从 1 开始的非空源码行号)、`reason`(12—2000 字符单行具体理由,说明该代码如何证明误报或实际缺口)。禁止笼统“已检查/正常”、复制密钥或凭证;通过宿主参数数组或安全引用传 JSON,不手写转义链。runner 核对 finding 与当前产品/快照绑定、路径及行有效性;理由是否成立仍由 Agent 对实际代码负责,不能声称 runner 已证明业务正确。只有有依据的 `FALSE_POSITIVE` 可排除;未提供核对、`CONFIRMED` 或 `UNRESOLVED` 均继续阻断。代码或配置内容变化后旧 findingId 失效,不复用旧核对。
571
568
 
572
- 若审计发现问题且命令未传 `--finalize-audit-findings true`,stdout 为空,stderr 只接受唯一 `ALIPAY_AIPAY_INTERNAL:CHECKLIST_AUDIT={state:"REPAIR_REQUIRED",findings:[...]}`。本轮可修复时先修复,重新加载 checklist 阶段取得新 scope,再用更新后的实际证据重跑同一结论命令,禁止渲染中间结果。无法修复时向同一命令追加 `--finalize-audit-findings true`,runner 将 findings 合入“未通过”并收口;该内部重跑不新增用户操作点。`full_process` 必须停在 Integration。
569
+ 仅排除误报且项目未变时,复用当前 scope 和已有检查证据再次执行结论命令,不重跑测试。真实缺陷有修复预算时只修复并定向复检受影响项,重新加载 checklist 取得新 scope 后重算命中;不得借核对、刷新 scope 或新 findingId 重置同一问题预算。核对后剩余缺陷预算耗尽、无进展或无法确认/修复时,保留已有合法核对并追加 `--finalize-audit-findings true`,将其余 findings 合入“未通过”收口,未核对或无法确认的项保留“静态扫描疑点尚未排除”措辞,不伪称已确认缺陷;只有全部误报已排除时不得传 finalize。最终只渲染一次,`full_process` 有剩余阻断时停在 Integration。
573
570
 
574
571
  对客结论统一使用 `integration.checklist.result`;整体结论、失败/部分通过项和人工待验证项必须来自最终一轮 checklist 实际证据。最终渲染成功时必须产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=integration.checklist.result`;命令返回后的下一动作先将 stdout 原文独立送达,不得以工具面板或自写总结替代。首次调用前先按以下完整契约确定参数,禁止改枚举:
575
572
 
576
573
  - `variant` 映射 `aipay=AIPAY`、`webpay=WEBPAY`、`apppay=APPPAY`;`overallResult` 只允许“通过、部分通过、未通过”。
577
- - `failedItems`/`manualItems` 必须是含下一步的受控单行值,无项目传“无”。`sandboxConfigState` 只允许 `READY|CREATE_PENDING|VERIFY_PENDING`;除沙箱配置及其直接依赖外存在代码、安全或必要依据缺口时 `blockingDefectState=PRESENT`,否则 `NONE`。待配置时 `failedItems` 必须列出沙箱配置及依赖动作未完成;恢复口令只由步骤 1/3 已发送的 `sandbox.configuration.pending` 正文提供。
574
+ - `failedItems`/`manualItems` 必须是含下一步的受控单行值,无项目传“无”。先按证据分类:单纯尚无公网 `notify_url` 属于通用上线提醒,用户尚未自愿完成沙箱付款属于可选体验,两者不得进入 `failedItems`、`manualItems` 或影响完成判定的待办;付款入口及完整指引仍须按步骤 6 交付。实际 UI/已选通知链路证据缺口进入 `manualItems` 并保留部分通过,代码/安全缺陷进入 `failedItems` 并按原门禁处理。不得为每个项目固定添加 UI 或通知幂等待验证项;不得仅因沙箱摘要未展示而改变分类。renderer 拒绝把上述通用提醒、可选体验作为缺口的旧输入;遇到分类错误只修正结果参数,不重新执行已完成检查。`sandboxConfigState` 只允许 `READY|CREATE_PENDING|VERIFY_PENDING`;除沙箱配置及其直接依赖外存在代码、安全或必要依据缺口时 `blockingDefectState=PRESENT`,否则 `NONE`。待配置时 `failedItems` 必须列出沙箱配置及依赖动作未完成;恢复口令只由步骤 1/3 已发送的 `sandbox.configuration.pending` 正文提供。
578
575
  - `executionMode`:`integration_only` 固定“仅代码开发”,`nextFlowReminder` 固定“正式上线前还需完成支付产品-产品开通。”。`full_process` 固定“完整接入”:`READY` 且“通过”时提醒“代码开发校验通过后将自动进入支付产品-产品开通;未通过时停留在代码开发。”;沙箱待配置且 `blockingDefectState=NONE` 时提醒“沙箱配置尚未完成,但不阻塞本轮继续支付产品-产品开通;完成配置后再进行沙箱测试。”;`READY`、`failedItems=无` 且仅有人工待验证项时提醒“代码开发自动校验已完成,仍有人工待验证项;本轮继续产品开通。”,并把 `manualItems` 原样带入 Onboarding Step 6。其他阻断结果停在 Integration。
579
- - 仅 `AIPAY` 传 `sandboxResult`:步骤 6 端到端联调通过为“AI 按量付费沙箱服务端联调通过”,否则为“AI 按量付费沙箱服务端联调未通过”。仅 `WEBPAY` 传 `webpayExperienceResult`,按步骤 6 证据从三个登记值中选择:已提供入口指引且待用户实际付款、未提供完整入口指引、或用户已完成一笔沙箱付款且结果有核验证据。`APPPAY` 不传这两个参数。
576
+ - 上述 `nextFlowReminder` 仍按代码校验事实传入;Windows `CODE_ONLY` 且 `executionMode=完整接入` 时,renderer 在原有校验后统一使用消息目录的 `windowsCodeOnlyReminder` 替换对客后续提示。无论代码通过、沙箱待配置、仅人工待验证或阻塞失败,都不得承诺本轮继续开通;本轮停在代码开发,工具恢复后按 `../normal/windows-environment.md` 重新执行原根意图的 `windows-entry`,取得唯一 `READY` 后才可恢复开通。该显示覆盖不改变代码结果、沙箱状态、失败项或现有门禁。
577
+ - 仅 `AIPAY` 传 `sandboxResult`:步骤 6 端到端联调通过为“AI 按量付费沙箱服务端联调通过”,否则为“AI 按量付费沙箱服务端联调未通过”。仅 `WEBPAY` 传 `webpayExperienceResult`,按步骤 6 证据从本 bundle 附带的“WEBPAY 结果参数精确枚举”中选择原值;该列表直接来自当前消息目录。`APPPAY` 不传这两个参数。
580
578
 
581
- 必须从本 flow 所在目录执行当前产品对应单行 runner;runner stdout 是唯一对客正文,必须把 stdout 原文作为当前回复正文发给用户:
579
+ 执行当前产品对应单行 runner;runner stdout 是唯一对客正文,必须把 stdout 原文作为当前回复正文发给用户:
582
580
 
583
581
  <!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
584
582
  ```bash
@@ -587,7 +585,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message che
587
585
  <!-- ALIPAY_AIPAY_PRODUCT:END -->
588
586
  <!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
589
587
  ```bash
590
- node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message 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" --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
588
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message 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" [--sandbox-summary "$SANDBOX_SUMMARY"] --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
591
589
  ```
592
590
  <!-- ALIPAY_AIPAY_PRODUCT:END -->
593
591
  <!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
@@ -600,11 +598,21 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message che
600
598
 
601
599
  同一次代码开发流程只渲染一次最终 checklist 结果;renderer stdout 是本次默认收口的唯一对客正文,禁止在前后追加风险说明、通过项摘要、执行说明、衔接提醒或第二份待办。
602
600
 
601
+ 最终摘要:仅代码开发时,runner 在 checklist 结论后统一输出【当前状态】、符合条件时的【沙箱测试配置】、【上线前有以下关键点】和【提示】。仅网页收款在 `sandboxConfigState=READY` 且步骤 5 的配置后置校验与摘要交付成功、当前实际配置未变化时,传 `--sandbox-summary "$SANDBOX_SUMMARY"`;没有有效原摘要时省略该参数,不读文件、不重建沙箱、不编造字段。最终回放遇到原摘要缺失、过期、格式异常或校验失败时,只省略【沙箱测试配置】,严禁阻塞其余 summary 对客正文;首次配置校验和实际业务门禁保持不变。该区块仅保留沙箱买家测试账号、沙箱买家登录密码、沙箱买家支付密码三项,密码明文展示(含 Windows),不展示产品、配置路径、appId 或密钥行,不表示付款测试通过。按量付费与 APP 支付不得传此参数,不展示该区块。完整接入的中间 checklist 禁止传该参数、禁止提前重复上线清单,原摘要保留给 Onboarding Step 6。传参使用宿主进程参数数组或安全引用,不把多行正文嵌入手写 Shell/JSON。
602
+
603
603
  这些产品专属字段只用于 renderer 校验最终结论,不在 checklist 对客结果中重复展示。APP 支付未来沙箱测试对客引导的维护 TODO 只保留在消息目录对应变体,不得渲染给用户;补充时必须同步本 flow、`modules/checklist.md` 和测试。
604
604
 
605
- **完成语义**:只有步骤 1-8 的适用完成条件均满足且 `sandboxConfigState=READY` 后,才可声明支付产品-代码开发完成。沙箱待配置但代码实现与其余检查通过时只能输出“部分通过”,不得改写为完成;存在其他未通过项时输出“未通过”;若配置已就绪且仅剩无法自动验证项,输出“部分通过”并登记人工待验证项,不得改写为完成或生产就绪。
605
+ **完成语义**:只有步骤 1-8 的适用完成条件均满足且 `sandboxConfigState=READY` 后,才可声明支付产品-代码开发完成。沙箱待配置但代码实现与其余检查通过时只能输出“部分通过”,不得改写为完成;存在其他未通过项时输出“未通过”;若配置已就绪且仅剩无法自动验证项,输出“部分通过”并登记人工待验证项,不得改写为完成或生产就绪。沙箱状态不得被产品开通结果覆盖。
606
+
607
+ 完成结论必须逐项来自本轮实际检查。配置内容、当前语言字段选择、实际加载路径/加载器或适用保护变化导致旧证据失效时,只复检受影响的配置项;证据仍有效时复用步骤 3/5 的实际结果,不因进入步骤 8 再做一遍。Windows LEGACY/CODE_ONLY 手工配置沿用原位检查方式,不改用快速沙箱脚本。沙箱待配置时复用实际终态、跳过依赖动作,不读取、创建或循环复核配置。按量付费联调只接受步骤 6 本轮 `run --auto-complete --require-payment-validation` 的实际成功,不重复联调;不得由 Agent 自填 `PASS`。
608
+
609
+ 仅 Unix/macOS/Linux 或 Windows READY 的快速沙箱原为 `READY`、且配置内容/文件保护证据失效需要重新校验时,按本轮有限预算执行一次固定命令;仅加载器变化时定向审查加载器及 SDK 映射,不因此重验原始配置:
610
+
611
+ ```text
612
+ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox reverify "$PROJECT_PATH" "$SERVER_LANGUAGE" --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
613
+ ```
606
614
 
607
- 完成结论必须逐项来自本轮实际检查:项目和代码项重新扫描目标目录;Unix/macOS/Linux 或 Windows READY 只有 `sandboxConfigState=READY` 时才重新执行严格的 `sandbox_config.sh verify`,待配置时直接复用本轮脚本终态并标记相关项未完成,不得在 checklist 中再次创建或复核;Windows LEGACY/CODE_ONLY 只有 `READY` 时重新检查项目实际读取的本地配置、密钥格式和版本控制保护,`VERIFY_PENDING` 时直接标记配置及依赖动作未完成;按量付费联调只接受本轮 `run --auto-complete --require-payment-validation` 的实际成功;用户确认项只接受当前摘要后的回复。任何一项缺失、失败或无法执行都标记为失败或人工待验证,不得由 Agent 自填 `PASS`。
615
+ 只接受唯一 `ALIPAY_AIPAY_INTERNAL:FLOW:SANDBOX_CONFIG_READY` 或 `ALIPAY_AIPAY_INTERNAL:FLOW:SANDBOX_CONFIG_PENDING_VERIFY` 及成功退出。前者复用更新后就绪证据,后者更新为 `VERIFY_PENDING`、交付脚本已有待配置正文并停止沙箱依赖动作;异常或不可唯一解析时保留阻断事实并收口,不猜测就绪、不换命令追加尝试。该动作不创建配置,不修改原脚本内部重试预算;项目内容因此变化时仅刷新 scope、复检受影响项,不全量重测。
608
616
 
609
617
  **沙箱结论边界**:步骤 8 的代码与配置校验不得把步骤 3 的字段完整性、网站支付的付款指引或 APP 支付跳过步骤 6 改写为“沙箱测试通过”。只有按量付费步骤 6 已取得完整端到端成功证据时,最终摘要才可复用该测试结论。
610
618
 
@@ -615,10 +623,4 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message che
615
623
  仅在用户报告报错、错误码、问题、排查、调试或异常时读取 `modules/troubleshooting-flow.md`;正常路径不得预加载。先确认产品,有错误码时再确认接口;禁止猜测密钥格式、MCP 方法或业务规则。
616
624
 
617
625
  ---
618
-
619
- ## 代码开发完成确认
620
-
621
- - `integration_only`:仅由 `integration.checklist.result` 输出未通过项、人工待验证项和产品开通提醒,不追加第二份话术。
622
- - `full_process`:全部适用步骤通过后进入 `references/onboarding/flow.md`;仅沙箱待配置,或沙箱 `READY` 且仅剩非阻塞人工待验证项时,以“部分通过”继续并保留未完成事实。其他代码、安全或依据缺口停在 Integration,不提前执行 Onboarding。
623
- - 未通过时不得宣称完成;沙箱状态不得被产品开通结果覆盖。
624
626
  <!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CHECKLIST:END -->
@@ -26,8 +26,8 @@
26
26
 
27
27
  先区分两种验收层级,再判断是否通过:
28
28
 
29
- - **本地正式验收 / 本地生产参数验收模式**:允许暂时没有可公网访问的 HTTPS `notify_url`。这一层必须检查“通知处理代码是否已实现”和“支付结果是否可通过主动查询兜底确认”;公网可访问性标记为“人工待验证”,不作为阻断本地正式验收的单一条件。
30
- - **真实生产上线**:必须具备可公网访问的 HTTPS `notify_url`,并完成验签、关键字段校验、幂等、成功响应 `success` 和补偿查询。未满足时不得判定生产就绪。
29
+ - **本地开发 / 沙箱集成**:通知处理代码和主动查询仍须实现;仅尚未部署公网 HTTPS `notify_url` 属于上线前提醒,不计入本轮失败或人工待验证项。通知代码或查询链路的实际缺陷仍须修复。
30
+ - **真实生产上线**:可使用异步通知加补偿查询,或省略 `notify_url` 并由服务端可靠主动查单。使用通知时验证公网 HTTPS 地址、验签、关键字段、幂等和 `success`;不使用时验证后台查单、响应验签、订单/金额/状态/归属校验、幂等交付、重试及未决订单恢复,用户关闭页面后也能继续。所选链路未验证时不得判定生产就绪。
31
31
 
32
32
  | 校验项 | 校验要求 | 说明 |
33
33
  |----------|----------|----------|
@@ -38,7 +38,7 @@
38
38
  | 响应值 | 商户侧处理成功后需返回字符串 `success` | 否则支付宝会重试通知 |
39
39
  | URL 格式 | notify_url 不能包含空格和 HTML 标签 | 否则可能导致通知失败 |
40
40
  | 重定向 | notify_url 不能重定向 | 重定向会导致支付宝收不到 success |
41
- | 外网可访问 | 真实生产上线时,notify_url 必须外网可访问;本地生产参数验收模式下标记为人工待验证 | 需确保支付宝服务器可访问;本地 `localhost`、局域网地址或 TLS 未就绪域名不阻塞本地正式验收 |
41
+ | 外网可访问 | 使用通知时,notify_url 必须可公网访问;不使用通知时本项不适用 | 使用通知时确保支付宝服务器可访问;仅尚未部署公网地址保留上线前提醒,不误记为本轮人工待验证 |
42
42
 
43
43
  <!-- ALIPAY_AIPAY_CHECKLIST_PRODUCTS:aipay,webpay,apppay -->
44
44
  ## 三、适用接口覆盖校验
@@ -56,7 +56,7 @@
56
56
 
57
57
  | 校验项 | 校验要求 | 说明 |
58
58
  |----------|----------|----------|
59
- | 前台同步结果防范 | 前台同步跳转结果仅作通知,**不能作为支付成功的依据** | 必须以异步通知或查询接口结果为准 |
59
+ | 支付成功依据与商家资损防范 | 前台同步跳转结果仅作通知,**不能作为支付成功的依据**;必须以验签通过的异步通知或交易查询结果为准 | 防止用户未付款但商家判定成功 |
60
60
  | AI 网页应用收款回跳默认行为 | 用户未明确关闭同步回跳时,已配置项目实际 `return_url` | 地址不得包含示例域名、占位符、猜测端口或未实现路由 |
61
61
  | AI 网页应用收款回跳页可用性 | 启动服务后 GET 访问精确 `return_url`,并在 Agent 具备浏览器/UI 能力时验证页面正常渲染;当前环境无法取得 UI 证据时标记人工待验证 | 不得出现 404、500、空白页、可见报错、认证循环或重定向循环;单页应用直接刷新路由也必须可用 |
62
62
  | AI 网页应用收款回跳状态展示 | 先验证同步参数签名,或使用与当前用户会话绑定的服务端订单标识;再通过服务端查询或已验签通知状态展示最终支付结果 | 同步回跳参数不得直接改写订单或作为支付成功依据,不得使用可任意修改的订单号访问其他订单 |
@@ -64,7 +64,6 @@
64
64
  | 支付成功判断 | 仅 `trade_status` 为 `TRADE_SUCCESS` 或 `TRADE_FINISHED` 时才认定付款成功 | 其他状态不算支付成功 |
65
65
  | 主动查询兜底 | 主动查询订单状态必须作为支付结果确认的兜底逻辑 | 无论异步通知是否到达,都应具备主动查询订单状态的能力,防止因网络抖动、通知延迟或丢失导致的状态不一致 |
66
66
  | 未知异常处理 | 网络超时或未知异常时,必须调用查询接口确认 | 不能简单推断为成功或失败 |
67
- | 商家资损防范 | 不依赖前台同步结果,以异步通知或查询为准 | 防止用户未付款但商家判定成功 |
68
67
  | 用户资损防范 | 未确认支付结果前不要求用户再次付款 | 防止用户已付款但商家判定失败导致重复扣款 |
69
68
 
70
69
  > AI 按量付费不使用前台同步跳转结果和异步通知作为支付成功依据,需按下一节专项校验。
@@ -119,6 +118,7 @@
119
118
  | AI 按量付费 serviceId 替换 | 生产配置中不得保留 `api_mock_service_id` | 上线前替换为服务市场实际返回的真实 `serviceId` |
120
119
  | 证书模式 | 只有明确采用证书模式时才切换为同一生产应用的完整证书链并使用证书执行 API | 应用公钥证书、支付宝公钥证书、支付宝根证书必须同时配置;公钥模式不得调用证书执行 API |
121
120
  | 产品开通状态 | 确认产品已在生产环境开通 | 沙箱无需开通,生产环境需要申请开通 |
121
+ | 人工代码审查 | 上线前必须完成人工代码审查 | 生产上线前检查 |
122
122
  | 私钥安全 | 私钥不在代码、日志、公共仓库中明文存储 | 使用安全的方式管理私钥 |
123
123
  | 日志安全 | 日志中不打印敏感信息(私钥、用户信息等) | 防止信息泄露 |
124
124
  | HTTPS 通信 | 生产环境必须使用 HTTPS | 保证传输安全 |
@@ -135,22 +135,22 @@
135
135
  > - ➖ 不适用:当前集成场景不涉及此项
136
136
  > - 🟡 人工待验证:当前环境无法自动取得充分证据
137
137
 
138
- 先按当前证据逐项判断;本轮可修复时先修复、重检,不渲染中间结果。项目稳定后按 `../flow.md` 执行唯一 `checklist-result`,由 runner 在同一次最终调用中校验 scope 并对同一项目快照执行固定 implementation audit。审计失败是阻断缺口,不能被 Agent 自报结论覆盖;可修复时先返回结构化 findings,项目变化后重新加载 checklist 阶段取得新 scope。
139
-
140
- 最终 action、完整参数和失败转移只以 `../flow.md` 步骤 8 为准,本模块不复制命令。runner 只接受最终一轮实际证据:Unix/macOS/Linux 或 Windows READY 的 `sandboxConfigState` 复用脚本终态,Windows LEGACY/CODE_ONLY 复用步骤 1/3 的 `READY|VERIFY_PENDING`;待配置时不重跑或读取配置,并把配置及依赖动作列为未完成。
138
+ 执行命令、有限修复预算、禁止循环与全量重测、证据复用、scope 刷新及最终审计核对/失败收口,统一按同一阶段 bundle 中 `../flow.md` 步骤 8 执行。本节保留逐项状态、产品证据和缺口分类,不复制执行规则。
141
139
 
142
140
  各产品结论差异如下,对客正文只在消息目录维护:
143
141
 
144
142
  | 产品 | checklist 内部校验事实 | 实际待办来源 |
145
143
  |---|---|---|
146
144
  | `AIPAY` | 通过必须绑定本轮 AI 按量付费服务端联调成功;只有完整 402、沙箱收银、Payment-Proof 重试和资源交付证据才能称沙箱测试通过 | 失败/部分通过项、人工待验证项、联调恢复动作 |
147
- | `WEBPAY` | 未提供浏览器付款入口和完整指引时不得通过;公网 HTTPS `notify_url` 未联调只能称本地验收完成,不能称生产就绪 | 失败/部分通过项、人工待验证项、待用户体验事项 |
145
+ | `WEBPAY` | 未提供浏览器付款入口和完整指引时不得通过;仅未配置 `notify_url` 不判为失败;生产就绪需按所选通知或可靠主动查单链路验证 | 失败/部分通过项、实际人工待验证项;可选付款体验不计入缺口 |
148
146
  | `APPPAY` | 当前没有沙箱付款验证结论,不据此生成通过或失败,也不临场补充沙箱付款步骤 | 失败/部分通过项、人工待验证项 |
149
147
 
150
- `failedItems`、`manualItems` 必须包含确定下一步,无对应项时传“无”。`overallResult=通过` 要求两者为“无”、`sandboxConfigState=READY`、`blockingDefectState=NONE`;“部分通过”至少有一类缺口;“未通过”必须列出失败项。`blockingDefectState` 只表示沙箱配置及其直接依赖以外的代码、安全或必要依据缺口;单纯 UI、浏览器或公网联调待验证只进入 `manualItems`。`full_process` 仅在沙箱待配置且无其他阻断,或 `READY` 且只剩非阻塞人工项时继续 Onboarding。
148
+ `failedItems`、`manualItems` 必须包含确定下一步,无对应项时传“无”。生成结果前完成分类:普通上线提醒(包括仅未部署公网 `notify_url`)和可选沙箱付款体验不得混入这两个字段或影响完成判定的待办;它们沿用已有上线说明/付款指引。真实 UI、已选通知链路的证据缺口才进入 `manualItems`,并在最终上线关键点逐项可见;已确认的实现缺陷进入 `failedItems`。不固定增加待验证事项,不在 summary 末端隐藏实际缺口;可选沙箱配置区块有无不参与完成判定。`overallResult=通过` 要求两者为“无”、`sandboxConfigState=READY`、`blockingDefectState=NONE`;“部分通过”至少有一类缺口且 `blockingDefectState=NONE`;存在代码、安全或必要依据阻断缺口时必须“未通过”并列出失败项。`blockingDefectState` 只表示沙箱配置及其直接依赖以外的代码、安全或必要依据缺口;单纯 UI、浏览器或已选通知链路实际联调待验证只进入 `manualItems`;仅未部署公网地址不计入其中。`full_process` 仅在沙箱待配置且无其他阻断,或 `READY` 且只剩非阻塞人工项时继续 Onboarding。
151
149
 
152
150
  内部保留适用项依据;明细按实际证据输出,不维护第二份模板。同一次代码开发只渲染一次;renderer stdout 是默认收口的唯一对客正文,前后不得追加摘要、风险或待办。
153
151
 
152
+ Windows `CODE_ONLY` 的环境门禁优先于上述 `full_process` 衔接条件:代码校验结果和待办仍按实际证据保留,但本轮停止在代码开发,不能进入 Onboarding。后续提示由 renderer 使用消息目录的环境恢复提示,不承诺立即继续产品开通;恢复工具并取得环境 `READY` 后才按原条件衔接。沙箱配置 `READY` 不能代替环境 `READY`。
153
+
154
154
  ---
155
155
 
156
156
  > 📖 本文档内容整理自支付宝开放平台官方文档,如有更新请以官方文档为准。
@@ -15,7 +15,7 @@ var request = new AlipayTradePagePayRequest();
15
15
  var notifyUrl = Environment.GetEnvironmentVariable("ALIPAY_NOTIFY_URL");
16
16
  if (!string.IsNullOrWhiteSpace(notifyUrl))
17
17
  {
18
- request.SetNotifyUrl(notifyUrl.Trim()); // 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
18
+ request.SetNotifyUrl(notifyUrl.Trim()); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
19
19
  }
20
20
  request.SetReturnUrl("https://your-domain.com/return"); // 默认传入并替换为已验证结果页;仅用户明确关闭同步回跳时省略
21
21
 
@@ -23,7 +23,7 @@ namespace SdkDemoTest
23
23
  var notifyUrl = Environment.GetEnvironmentVariable("ALIPAY_NOTIFY_URL");
24
24
  if (!string.IsNullOrWhiteSpace(notifyUrl))
25
25
  {
26
- request.SetNotifyUrl(notifyUrl.Trim()); // 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
26
+ request.SetNotifyUrl(notifyUrl.Trim()); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
27
27
  }
28
28
  AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
29
29
 
@@ -22,7 +22,7 @@ public class AlipayTradePagePay {
22
22
  AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
23
23
  String notifyUrl = System.getenv("ALIPAY_NOTIFY_URL");
24
24
  if (notifyUrl != null && !notifyUrl.isBlank()) {
25
- request.setNotifyUrl(notifyUrl.trim()); // 真实生产或公网联调时传入;本地没有公网 HTTPS notifyUrl 时不要调用 setNotifyUrl(null/空字符串/占位 URL)
25
+ request.setNotifyUrl(notifyUrl.trim()); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notifyUrl 时不要调用 setNotifyUrl(null/空字符串/占位 URL)
26
26
  }
27
27
  request.setReturnUrl("https://your-domain.com/return"); // 默认传入并替换为已验证结果页;仅用户明确关闭同步回跳时省略
28
28
 
@@ -31,7 +31,7 @@ public class AlipayTradeAppPay {
31
31
  AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
32
32
  String notifyUrl = System.getenv("ALIPAY_NOTIFY_URL");
33
33
  if (notifyUrl != null && !notifyUrl.isBlank()) {
34
- request.setNotifyUrl(notifyUrl.trim()); // 真实生产或公网联调时传入;本地没有公网 HTTPS notifyUrl 时不要调用 setNotifyUrl(null/空字符串/占位 URL)
34
+ request.setNotifyUrl(notifyUrl.trim()); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notifyUrl 时不要调用 setNotifyUrl(null/空字符串/占位 URL)
35
35
  }
36
36
  AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
37
37
 
@@ -17,7 +17,7 @@ const alipaySdk = new AlipaySdk({
17
17
 
18
18
  // ⚠️ 网站支付必须使用 pageExec() 方法,不能使用 exec()
19
19
  // ⚠️ pageExec() 第二个参数必须传 'POST'
20
- // ⚠️ notifyUrl 在真实生产或公网联调时传入;本地生产参数验收模式可临时不传,但仍需实现通知处理代码
20
+ // ⚠️ notifyUrl 可选;生产也可省略,但服务端必须可靠主动查单,仍需实现通知处理代码
21
21
  // ⚠️ 本地没有公网 HTTPS notifyUrl 时,直接省略 notifyUrl,不要向 SDK 传 undefined、空字符串或占位 URL
22
22
  // ⚠️ returnUrl 默认传入,仅在用户明确关闭同步回跳时省略
23
23
  const notifyUrl = (process.env.ALIPAY_NOTIFY_URL || "").trim();
@@ -13,7 +13,7 @@ const alipaySdk = new AlipaySdk({
13
13
  appAuthToken: "<-- 请填写应用授权令牌 -->",
14
14
  });
15
15
 
16
- // 真实生产或公网联调时传入 notifyUrl;本地没有公网 HTTPS notifyUrl 时直接省略,不要向 SDK 传 undefined、空字符串或占位 URL。
16
+ // 使用异步通知时传入 notifyUrl;生产也可省略并由服务端可靠主动查单。没有公网 HTTPS notifyUrl 时直接省略,不要向 SDK 传 undefined、空字符串或占位 URL。
17
17
  const notifyUrl = (process.env.ALIPAY_NOTIFY_URL || "").trim();
18
18
  const requestOptions = {
19
19
  bizContent: {
@@ -22,7 +22,7 @@ $aop->signType = 'RSA2';
22
22
  $request = new AlipayTradePagePayRequest();
23
23
  $notifyUrl = trim(getenv('ALIPAY_NOTIFY_URL') ?: '');
24
24
  if ($notifyUrl !== '') {
25
- $request->setNotifyUrl($notifyUrl); // 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
25
+ $request->setNotifyUrl($notifyUrl); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
26
26
  }
27
27
  $request->setReturnUrl('https://your-domain.com/return'); // 默认传入并替换为已验证结果页;仅用户明确关闭同步回跳时省略
28
28
 
@@ -16,7 +16,7 @@ $alipayClient = new AopClient(getAlipayConfig());
16
16
  $request = new AlipayTradeAppPayRequest();
17
17
  $notifyUrl = trim(getenv('ALIPAY_NOTIFY_URL') ?: '');
18
18
  if ($notifyUrl !== '') {
19
- $request->setNotifyUrl($notifyUrl); // 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
19
+ $request->setNotifyUrl($notifyUrl); // 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 null、空字符串或占位 URL
20
20
  }
21
21
  $model = array();
22
22
 
@@ -23,7 +23,7 @@ client = DefaultAlipayClient(alipay_client_config=config)
23
23
  request = AlipayTradePagePayRequest()
24
24
  notify_url = os.getenv("ALIPAY_NOTIFY_URL", "").strip()
25
25
  if notify_url:
26
- request.notify_url = notify_url # 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 None、空字符串或占位 URL
26
+ request.notify_url = notify_url # 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 None、空字符串或占位 URL
27
27
  request.return_url = "https://your-domain.com/return" # 默认传入并替换为已验证结果页;仅用户明确关闭同步回跳时省略
28
28
 
29
29
  model = AlipayTradePagePayModel()
@@ -24,7 +24,7 @@ client = DefaultAlipayClient(alipay_client_config=config)
24
24
  request = AlipayTradeAppPayRequest()
25
25
  notify_url = os.getenv("ALIPAY_NOTIFY_URL", "").strip()
26
26
  if notify_url:
27
- request.notify_url = notify_url # 真实生产或公网联调时传入;本地没有公网 HTTPS notify_url 时不要传 None、空字符串或占位 URL
27
+ request.notify_url = notify_url # 使用异步通知时传入;未配置时由服务端可靠主动查单。没有公网 HTTPS notify_url 时不要传 None、空字符串或占位 URL
28
28
  model = AlipayTradeAppPayModel()
29
29
 
30
30
  model.out_trade_no = "MERCHANT_ORDER_NO_PLACEHOLDER"
@@ -27,7 +27,7 @@ AI 移动应用收款必须覆盖:`alipay.trade.app.pay`、交易查询、退
27
27
  | 字段 | 要求 |
28
28
  | --- | --- |
29
29
  | `method` | 固定 `alipay.trade.app.pay` |
30
- | `notify_url` | 生产或公网联调时传入;本地生产参数验收模式可临时不传,但通知处理代码必须存在 |
30
+ | `notify_url` | 可选,生产也可省略;使用通知时传入商家公网 HTTPS 地址,不使用时由服务端可靠主动查单;通知处理代码仍须实现 |
31
31
 
32
32
  业务参数:
33
33