@alipay/alipay-aipay 1.7.2 → 1.7.4
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.
- package/README.md +0 -18
- package/dist/commands/install.js +24 -17
- package/package.json +3 -3
- package/skill/SKILL.md +24 -2
- package/skill/VERSION +1 -1
- package/skill/references/normal/json/customer-messages.json +1 -1
- package/skill/references/normal/scripts/channel_offer.mjs +83 -0
- package/skill/references/normal/scripts/runtime.mjs +3 -1
- package/skill-pre/SKILL.md +27 -5
- package/skill-pre/VERSION +1 -1
- package/skill-pre/references/integration/flow.md +43 -25
- package/skill-pre/references/integration/modules/checklist.md +4 -4
- package/skill-pre/references/integration/modules/sandbox/sandbox-setup-guide.md +33 -33
- package/skill-pre/references/integration/modules/scripts/local_402_sandbox_pay.py +3 -3
- package/skill-pre/references/integration/modules/scripts/sandbox_config.sh +12 -2
- package/skill-pre/references/normal/alipay-cli-env.md +3 -1
- package/skill-pre/references/normal/conversation-telemetry.md +4 -2
- package/skill-pre/references/normal/full-process-routing.md +2 -2
- package/skill-pre/references/normal/json/customer-messages.json +1 -1
- package/skill-pre/references/normal/json/policy-rules.json +1 -1
- package/skill-pre/references/normal/scripts/alipay_cli_env.mjs +9 -0
- package/skill-pre/references/normal/scripts/alipay_cli_refresh.mjs +10 -1
- package/skill-pre/references/normal/scripts/auth_runtime_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/common.sh +11 -1
- package/skill-pre/references/normal/scripts/onboarding_discovery_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/onboarding_message_runner.mjs +10 -1
- package/skill-pre/references/normal/scripts/onboarding_recovery_runner.mjs +4 -1
- package/skill-pre/references/normal/scripts/open_official_url.sh +10 -2
- package/skill-pre/references/normal/scripts/preview_runtime.mjs +32 -2
- package/skill-pre/references/normal/scripts/python_script_runner.mjs +9 -4
- package/skill-pre/references/normal/scripts/render_customer_message.mjs +4 -2
- package/skill-pre/references/normal/scripts/runtime.mjs +50 -6
- package/skill-pre/references/normal/scripts/telemetry.mjs +9 -0
- package/skill-pre/references/normal/scripts/windows/acl-native.mjs +3 -0
- package/skill-pre/references/normal/scripts/windows/acl.mjs +41 -0
- package/skill-pre/references/normal/scripts/windows/bin/alipay-cli +4 -0
- package/skill-pre/references/normal/scripts/windows/bootstrap-node.ps1 +140 -0
- package/skill-pre/references/normal/scripts/windows/cli-install.mjs +51 -0
- package/skill-pre/references/normal/scripts/windows/cli-process.mjs +11 -0
- package/skill-pre/references/normal/scripts/windows/execution.mjs +51 -0
- package/skill-pre/references/normal/scripts/windows/git-discovery.mjs +42 -0
- package/skill-pre/references/normal/scripts/windows/policy.json +13 -0
- package/skill-pre/references/normal/scripts/windows/preflight.mjs +182 -0
- package/skill-pre/references/normal/scripts/windows/prepare.mjs +83 -0
- package/skill-pre/references/normal/scripts/windows/probe.sh +14 -0
- package/skill-pre/references/normal/scripts/windows/python-execution.mjs +38 -0
- package/skill-pre/references/normal/scripts/windows/python-runtime.mjs +85 -0
- package/skill-pre/references/normal/scripts/windows/routing.mjs +83 -0
- package/skill-pre/references/normal/scripts/windows/shell_helpers.sh +83 -0
- package/skill-pre/references/normal/windows-environment.md +82 -0
- package/skill-pre/references/onboarding/flow.md +4 -1
- package/skill-pre/references/onboarding/modules/scripts/app.sh +1 -0
- package/skill-pre/references/onboarding/modules/scripts/ar_sign_apply.sh +10 -6
- package/skill-pre/references/onboarding/modules/scripts/auth.sh +1 -0
- package/skill-pre/references/runtime-entry.md +13 -4
package/skill-pre/SKILL.md
CHANGED
|
@@ -6,7 +6,25 @@ description: >-
|
|
|
6
6
|
|
|
7
7
|
# 支付宝 AI 付接入 Skill 启动器
|
|
8
8
|
|
|
9
|
-
本文件负责确定本轮实际使用的 Skill 版本,展示内测版使用说明并取得用户的服务/采集选择,再刷新本机 `alipay-cli`。禁止在完成下列启动协议前读取 `references/runtime-entry.md`、任一 flow
|
|
9
|
+
本文件负责确定本轮实际使用的 Skill 版本,展示内测版使用说明并取得用户的服务/采集选择,再刷新本机 `alipay-cli`。禁止在完成下列启动协议前读取 `references/runtime-entry.md`、任一 flow、模块、消息目录或业务脚本。声明展示前和用户选择前不得采集、缓存或上传任何会话正文。用户明确同意采集后,按原始顺序补采自触发本 Skill 的用户消息起的完整对话,包括内测声明、澄清往来等授权前的助手收口消息;每条消息只采集一次,不重复采集。
|
|
10
|
+
|
|
11
|
+
## Windows 的 Node 准备例外
|
|
12
|
+
|
|
13
|
+
仅 Windows 首次使用当前 Skill 且尚未绑定本轮 Node 时,在下面的自更新前先尝试直接执行 PATH 中的 `node.exe -p "JSON.stringify({version:process.versions.node,platform:process.platform,arch:process.arch,executable:process.execPath})"`。只有退出 0、输出为唯一 JSON 对象、`platform=win32`、`arch=x64`、版本为合法且 >=18 的 SemVer、`executable` 是本机普通文件的规范化绝对路径时,才绑定该 Node 并跳过 PowerShell 文件引导。其他结果不作为可用 Node。此只读探测不执行业务、不访问会话正文、不改变采集选择。先确定当前 Skill 的规范化绝对路径 `<SKILL_DIR>`;PATH 探测未找到合格 Node 时,再用下列固定 PowerShell 引导检查常见安装目录及此前准备的用户级 Node:
|
|
14
|
+
|
|
15
|
+
```powershell
|
|
16
|
+
powershell.exe -NoProfile -NonInteractive -File "<SKILL_DIR>/references/normal/scripts/windows/bootstrap-node.ps1" -Mode check
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
引导只接受唯一 stderr `ALIPAY_AIPAY_INTERNAL:NODE_BOOTSTRAP=<JSON>`。`status=READY` 且退出 0 时,校验 `nodePath` 为本机普通文件的规范化绝对路径、`version` 为合法且 >=18 的 SemVer,绑定该 Node。无论经哪个只读入口取得 Node,后续所有文档中的 `node` 均用绑定的绝对路径通过宿主进程参数数组调用。在 PowerShell 中使用 `& "<NODE_EXE>" "<SKILL_DIR>/references/normal/scripts/runtime.mjs" ...`;仅替换解释器,runtime 绝对路径及参数保持不变。不能依赖引导子进程更改父进程 PATH,不能因绑定 Node 重新执行已完成的自更新或采集选择。
|
|
20
|
+
|
|
21
|
+
仅 `NEEDS_SETUP` 且当前请求已有依赖准备授权时执行一次:
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
powershell.exe -NoProfile -NonInteractive -File "<SKILL_DIR>/references/normal/scripts/windows/bootstrap-node.ps1" -Mode prepare
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
用户明确修复并要求重试时,最多一次使用同一入口 `-Mode repair`。该预算按用户目录保存,不随 Agent 重入清零。安装只下载官方 LTS Windows x64 ZIP 和官方 SHA-256 清单,校验后解压到用户目录;不覆盖已有 Node、不修改系统或用户 PATH、不提权、不改变执行策略。Windows PowerShell 5.1 的有效执行策略若禁止 `.ps1`,此引导在检查常见目录前就可能被阻止,不能承诺自动发现或准备 Node。此时请用户按组织策略让宿主可发现已安装的合格 Node,或从 [Node.js 官方下载页](https://nodejs.org/en/download) 安装并重启宿主;不得以 `Invoke-Expression`、执行策略覆盖、WSL 或循环安装绕过限制。脚本安装失败、版本校验失败或返回非 READY 时也停止启动并说明实际缺项。该入口用于已经存在的 Skill 目录;首次通过 npm/npx 获取 Skill 的用户仍需先有可用 Node/npm。
|
|
10
28
|
|
|
11
29
|
## 前置启动协议
|
|
12
30
|
|
|
@@ -29,7 +47,7 @@ stderr 只允许出现以下一个内部终态;不得向用户展示 marker
|
|
|
29
47
|
|
|
30
48
|
`UPDATED` 后先废弃旧 loaded 事实,禁止继续读取更新前版本的任何业务文档,后续命令使用新版同一 `SKILL_DIR`;其他终态继续当前可用版本,其他终态同样不再读取本启动器或 `self-update.md` 补充规则。
|
|
31
49
|
|
|
32
|
-
版本确定后、任何 CLI
|
|
50
|
+
版本确定后、任何 CLI 刷新、会话解析或业务入口加载前,必须先执行以下固定声明动作;除上述必要的 Windows Node 准备外,自更新检查是此前唯一允许的动作:
|
|
33
51
|
|
|
34
52
|
```text
|
|
35
53
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" preview notice
|
|
@@ -44,13 +62,15 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-sessi
|
|
|
44
62
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" preview consent --reply "<USER_REPLY>" --input-id "<USER_INPUT_ID>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
45
63
|
```
|
|
46
64
|
|
|
47
|
-
两条命令分别执行;`USER_REPLY` 为当前回复原文,`USER_INPUT_ID` 为当前宿主对话全程唯一的非内容型幂等键,同一回复重试复用,不同回复使用新键,不随业务 run
|
|
65
|
+
两条命令分别执行;`USER_REPLY` 为当前回复原文,`USER_INPUT_ID` 为当前宿主对话全程唯一的非内容型幂等键,同一回复重试复用,不同回复使用新键,不随业务 run 重置,不得借用此前业务确认。必须把完整原文交给 preview consent 专用解析器,不截取关键词或由 Agent 改写为“确认”。`确认`、`同意采集`、`允许收集我的会话内容` 等明确同意表达认可采集;`仅使用服务`、`不要采集会话`、`不同意采集` 等明确拒绝采集表达表示继续服务但不采集。允许首尾空白、常见句末标点及独立选项的【】外框;规则以脚本完整声明匹配为准,不使用通用业务确认解析器。`确认,但不同意采集` 按拒绝处理;同时明确同意和拒绝采集、疑问、条件、转述、未识别组合及 `行吧`、`1`、`OK`、`继续` 等含糊表达均要求澄清。用户未回复或明确不愿继续使用时不执行后续业务。
|
|
66
|
+
|
|
67
|
+
`PREVIEW_DECISION=UNCONFIRMED` 时,命令同时输出 `preview.consent.clarify` 对客正文及唯一对应的 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED`。下一条可见回复原文完整包含该澄清消息,结束回合,等待用户重新选择;不得启动业务、创建采集或改写已有选择。用户询问声明含义时可在该回复中先解释,再原文交付澄清消息,不能把问题当作授权;用户明确取消使用时停止,不要求其继续选择。
|
|
48
68
|
|
|
49
69
|
- `PREVIEW_DECISION=CONFIRMED` 或 `SERVICE_ONLY`:可记录与当前路径和版本绑定的 `ALIPAY_AIPAY_PRE_NOTICE_CONFIRMED=true` 并继续业务。此声明确认事实仍只保留当前对话上下文。
|
|
50
|
-
- 仅 `CONVERSATION_CONSENT=GRANTED` 且没有本轮采集失败事实时,先读取 `references/normal/conversation-telemetry.md
|
|
70
|
+
- 仅 `CONVERSATION_CONSENT=GRANTED` 且没有本轮采集失败事实时,先读取 `references/normal/conversation-telemetry.md`,按其中的补采规则执行:以触发本 Skill 的那条用户消息(沿用其原始输入幂等键)为第一条消息执行 `start-conversation`;取得 `CONVERSATION_ID` 后,按原始顺序用 `conversation-message` 依次补采授权前的其余消息(内测声明、澄清往来等助手收口消息带 `--final true`),最后补采本次同意回复。授权前内容因上下文压缩等原因无法可靠取得时,从可可靠取得的最早消息开始,禁止伪造。已 ACTIVE 时沿用 `CONVERSATION_ID`,不重复初始化、不重复采集。
|
|
51
71
|
- `CONVERSATION_CONSENT=DENIED|DISABLED|UNAVAILABLE`:当前对话停止传入会话正文,不调用采集或自动补建入口,业务照常继续;状态保存失败也按不采集处理,不宣称已保存选择。运行时的启动和消息入口还会校验持久化授权,未同意或已拒绝均不能采集。
|
|
52
72
|
|
|
53
|
-
`仅使用服务`
|
|
73
|
+
`仅使用服务` 及等价明确拒绝的选择按宿主会话 hash 独立保存,不随业务 run 结束、再次引用 Skill 或自更新清除。用户之后明确要求重新同意采集时,重新展示本声明并等待新的 `确认` 或明确同意采集的等价回复,再执行同一 consent 命令;不得把普通业务确认当成重新授权。用户中途要求停止采集时,立即执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry opt-out --input-id "<USER_INPUT_ID>" --session-id "<SESSION_ID>"`(有 ID 时附加 `--conversation-id "<CONVERSATION_ID>"`),停止传入后续正文;只有 `CONVERSATION_CONSENT=DENIED` 才可宣称选择已保存,失败不阻断业务。
|
|
54
74
|
|
|
55
75
|
同一对话中确认事实、路径和当前预发版本均未变化时,材料回复、恢复、再次引用和子流程衔接不重复展示声明。路径或版本变化、上下文压缩导致确认事实不可用时重新展示并等待选择,但不得清除原有采集拒绝状态。会话身份无法可靠恢复时重新展示声明并取得选择,绝不根据旧确认事实自动授权新的会话身份。
|
|
56
76
|
|
|
@@ -60,6 +80,8 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" preview consent --reply
|
|
|
60
80
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env refresh-alipay-cli
|
|
61
81
|
```
|
|
62
82
|
|
|
83
|
+
Windows 同样执行上述刷新命令;内部在独立系统 PowerShell 进程中设置 `ALIPAY_CLI_BIN="$HOME\.local\bin"`、`ALIPAY_CLI_SKIP_VERIFY=true`,通过 `irm https://opengw.alipay.com/alipaycli/install_ps1 | iex` 调用正式安装器,再独立验证安装的 EXE,不要求 Git Bash/jq 先就绪,不固定 CLI 版本。该跳过校验设置与 Unix/macOS/Linux 的现行安装指令一致;官方 PowerShell 安装器会尝试更新用户 PATH。Windows 其余依赖在业务入口确定根意图后按 `references/normal/windows-environment.md` 检查,不因依赖失败关闭遥测、重建会话或跳过采集选择。
|
|
84
|
+
|
|
63
85
|
stderr 只允许一个 `ALIPAY_AIPAY_INTERNAL:ALIPAY_CLI_REFRESH=<READY|RETRY_WITH_NETWORK|RETRY_WITH_LOCAL_FS_PERMISSION|FAILED|VERIFY_FAILED>`,stdout 必须为空,安装器及版本输出不得对客。前两种重试终态分别只允许取得网络权限或 `~/.local/bin` 写权限后原样重试一次;其他终态静默继续,并以之后环境检查和业务脚本的实际 CLI 可用性为准。路径或版本变化、上下文压缩导致事实不可用、用户明确要求刷新,或环境检查证明 CLI 缺失/损坏时清除旧事实并按同一预算重试;非 `READY` 不得循环。
|
|
64
86
|
|
|
65
87
|
完成本次所需刷新或命中成功事实后,只完整读取同一 `SKILL_DIR` 的 `references/runtime-entry.md`,在当前上下文记录 `ALIPAY_AIPAY_PRE_RUNTIME_ENTRY_LOADED=true` 和规范化路径,再按原请求路由。同一对话后续确认、补材料、候选选择、恢复、中断继续、重复触发和 Full Process 衔接,入口事实存在、路径未变且入口规则仍在时,跳过版本检查和入口重读。仅 `UPDATED`、路径变化或上下文压缩导致规则不可用时重读;事实不落盘。
|
package/skill-pre/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.7.
|
|
1
|
+
1.7.3-pre
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<!-- ALIPAY_AIPAY_FLOW:INTEGRATION_CORE:START -->
|
|
2
2
|
# 支付产品-代码开发流程
|
|
3
3
|
|
|
4
|
+
本 flow 的 Windows READY/LEGACY 指根入口的唯一兼容环境分流事实,或 Windows 环境文档明确修复后唯一、根意图匹配的新 READY 事实;后续命令附加当前有效的 `--windows-route`。Windows READY 通过 Git Bash 执行登记的快速沙箱脚本;Windows LEGACY 保留原 Node 独立开发和手工沙箱分支。两者都由当前 Agent 串行执行,不启用 Integration Worker。Windows 敏感文件以 NTFS DACL 设置并读回验证代替 POSIX `0600/0700`:只允许当前用户、SYSTEM 和 Administrators;不能证明保护有效时不得使用配置。CLI 业务命令、产品参数、沙箱终态和完成条件不变。
|
|
5
|
+
|
|
4
6
|
> ⚠️ **前置声明**:本 flow 仅支持 **AI 网页应用收款、AI 移动应用收款、AI 按量付费**三种产品的集成。原有“网站支付”“APP 支付”“按量付费”仍作为输入别名和资源目录名。**其他产品(当面付、订单码支付、JSAPI支付、预授权支付、商家扣款等)暂不支持**,如需集成请前往[支付宝开放平台](https://open.alipay.com/)查阅相关文档。
|
|
5
7
|
|
|
6
8
|
---
|
|
@@ -36,7 +38,7 @@
|
|
|
36
38
|
## 用户阻塞点索引
|
|
37
39
|
|
|
38
40
|
<!-- GENERATED:INTEGRATION-GUARDS:START -->
|
|
39
|
-
共享护栏:`P-MCP-CONTRACT-FROZEN` 仅用已验证脚本;禁推断或尝试近似方法;`P-SANDBOX-CREDENTIAL-EXCEPTION`
|
|
41
|
+
共享护栏:`P-MCP-CONTRACT-FROZEN` 仅用已验证脚本;禁推断或尝试近似方法;`P-SANDBOX-CREDENTIAL-EXCEPTION` Unix/macOS/Linux 与 Windows READY 已校验快速沙箱买家密码仅限登记摘要/付款体验;Windows LEGACY 手工资料仅入受保护项目配置,禁复述、另存或扩展到生产值;`P-SENSITIVE-STATE` 公钥限当前 app 调用且禁复述/保存;敏感值禁入回复/摘要/日志/状态/宽权限文件;临时 URL 仅由登记动作展示;`P-PROJECT-PROTECT` 禁清空/覆盖/删除既有项目;仅改已确认路径和范围;`P-CUSTOMER-OUTPUT-EXCLUSIVE` 登记 stdout 原文是唯一正文;阻塞送达后立即等待;`P-DETERMINISTIC-HANDOFF` 仅执行登记命令并按唯一终态转移;禁追加解析;失败只走登记恢复。
|
|
40
42
|
<!-- GENERATED:INTEGRATION-GUARDS:END -->
|
|
41
43
|
<!-- GENERATED:INTEGRATION-GUARDS-AIPAY:START -->
|
|
42
44
|
共享护栏:`P-A2M-SANDBOX` A2M 沙箱固定 api_mock_service_id 与沙箱网关;生产值仅用于正式配置;`P-A2M-SUCCESS` 联调仅在 HTTP 200、资源可归属、无业务失败且适用回执有效时通过。
|
|
@@ -141,20 +143,20 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message loc
|
|
|
141
143
|
- [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` 完成当前分支要求的安装与验证
|
|
142
144
|
- [INT.ENV.PROJECT_LANGUAGE_READY] 已确认唯一目标项目路径和服务端语言,且目标项目包含已确认语言的构建标识
|
|
143
145
|
- [INT.SANDBOX.OS_DETECTED] 已检测用户操作系统类型
|
|
144
|
-
- [INT.SANDBOX.PREPARATION_RECORDED] Unix/macOS/Linux 已从固定脚本取得唯一 `READY|CREATE_PENDING|VERIFY_PENDING` 终态。`READY` 时配置已安全落盘或复核;待配置不是成功,不满足任何沙箱配置、测试或生产就绪条件,但本步骤允许继续产品确认和代码开发
|
|
145
|
-
- [INT.SANDBOX.WINDOWS_STATE_RECORDED] Windows:本轮既有标准消息后提供的完整有效沙箱资料已写入并校验为 `READY`;未进入该资料收集分支时已记录 `VERIFY_PENDING` 并继续代码实现;只有用户明确要求立即配置时才使用既有标准消息收集资料
|
|
146
|
+
- [INT.SANDBOX.PREPARATION_RECORDED] Unix/macOS/Linux 或 Windows READY 已从固定脚本取得唯一 `READY|CREATE_PENDING|VERIFY_PENDING` 终态。`READY` 时配置已安全落盘或复核;待配置不是成功,不满足任何沙箱配置、测试或生产就绪条件,但本步骤允许继续产品确认和代码开发
|
|
147
|
+
- [INT.SANDBOX.WINDOWS_STATE_RECORDED] Windows LEGACY:本轮既有标准消息后提供的完整有效沙箱资料已写入并校验为 `READY`;未进入该资料收集分支时已记录 `VERIFY_PENDING` 并继续代码实现;只有用户明确要求立即配置时才使用既有标准消息收集资料
|
|
146
148
|
|
|
147
149
|
**执行规则**:
|
|
148
150
|
|
|
149
151
|
1. 只确认创建和保存沙箱所需的目标项目路径、服务端语言与操作系统;不得为了创建匿名沙箱先要求用户确定支付产品。缺少多个字段时使用“启动前上下文补问”的固定标准消息一次补齐;字段已能从用户输入和项目事实确定时,不发送环境、项目识别或准备进度消息。
|
|
150
|
-
2. Unix/macOS/Linux 从本 flow 目录执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env integration-check --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;Windows
|
|
151
|
-
3. Unix/macOS/Linux 从本 flow 所在的 `references/integration/` 目录执行唯一准备入口:
|
|
152
|
+
2. Unix/macOS/Linux 或 Windows READY 从本 flow 目录执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env integration-check --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;Windows LEGACY 执行同一命令,仅检查原生 Node。该入口在检查开始时记录环境检查事实,不单独上报 telemetry stage。Windows LEGACY 只检查本 Integration Node runner 所需运行时,不要求 Bash、jq 或当前流程不会调用的 alipay-cli。唯一 `CLI_ENV:READY` 时继续且不读取完整安装文档。Windows READY 检查非零时停止依赖动作,按 `../normal/windows-environment.md` 有限恢复;不得执行下述 Unix 包管理器链。`CLI_ENV:NEEDS_SETUP` 时才读取 `../normal/alipay-cli-env.md`:若唯一 `CLI_ENV_MISSING` 包含 `jq`,先以所需网络和 `~/.local/bin` 写权限执行一次 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env prepare-jq --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;唯一 `ALIPAY_AIPAY_INTERNAL:JQ_PREPARE=READY` 后原样重跑 `env integration-check`。`FAILED|UNSUPPORTED`,或 `READY` 后复检仍缺 jq 时,由 Agent 按环境文档执行当前系统首选包管理器兜底并再次复检;macOS 必须从清华镜像开始,明确失败后才依次选择阿里云、中科大和直连,不并发、不回到 `prepare-jq` 循环。其他缺失项仍按当前系统分支补齐,完成后重跑检查;不得重复执行 `prepare-jq` 或新增业务确认点。其他输出、非 0 或 marker 冲突停在本步骤。
|
|
153
|
+
3. Unix/macOS/Linux 或 Windows READY 从本 flow 所在的 `references/integration/` 目录执行唯一准备入口:
|
|
152
154
|
|
|
153
155
|
```bash
|
|
154
156
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox ensure "<规范化项目路径>" "<已确认服务端语言>" [--telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT"] --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
155
157
|
```
|
|
156
158
|
|
|
157
|
-
4. Windows 不调用快速沙箱脚本。普通代码开发或完整接入请求没有明确要求当前配置沙箱时,不展示申领消息、不补问,直接记录 `sandboxConfigState=VERIFY_PENDING` 并继续步骤 2。只有用户明确要求现在配置/恢复 Windows 沙箱时,才执行下列既有标准消息 `sandbox.windows.manual_setup`;该消息使用自由资料回复,不要求用户输入 `1` 或自行执行脚本。随后只处理用户针对本轮该消息提供的资料:完整有效时写入目标项目的受保护本机配置并记录 `READY`,部分或错误时使用既有受控失败分支补问实际缺失/错误字段:
|
|
159
|
+
4. Windows LEGACY 不调用快速沙箱脚本。普通代码开发或完整接入请求没有明确要求当前配置沙箱时,不展示申领消息、不补问,直接记录 `sandboxConfigState=VERIFY_PENDING` 并继续步骤 2。只有用户明确要求现在配置/恢复 Windows LEGACY 沙箱时,才执行下列既有标准消息 `sandbox.windows.manual_setup`;该消息使用自由资料回复,不要求用户输入 `1` 或自行执行脚本。随后只处理用户针对本轮该消息提供的资料:完整有效时写入目标项目的受保护本机配置并记录 `READY`,部分或错误时使用既有受控失败分支补问实际缺失/错误字段:
|
|
158
160
|
|
|
159
161
|
```bash
|
|
160
162
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-setup --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
@@ -162,15 +164,17 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message win
|
|
|
162
164
|
|
|
163
165
|
资料校验通过后必须建立适用的版本控制忽略和访问保护。该例外只适用于当前沙箱资料;生产环境应用私钥和密码禁止提供给 Agent。Agent 不得在回复、摘要或普通日志中复述收到的值。
|
|
164
166
|
|
|
165
|
-
5. Unix/macOS/Linux 的 `ensure` 只依据同一目标项目的 `.alipay-sandbox.json` 当前事实分流:文件不存在时执行既有 `create`;文件存在或为符号链接时执行既有 `verify` 安全路径。已存在配置不得再次调用 `createAnonymousSandbox`、不得覆盖,也不得因为中断重来要求用户删除配置;无效、不安全或被 Git 跟踪时不得使用,脚本按待配置终态统一输出后继续代码开发。
|
|
166
|
-
6. 只有 Unix/macOS/Linux 创建分支会调用冻结的 `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 不调用该方法或 `sandbox_config.sh`。
|
|
167
|
-
7. Unix/macOS/Linux 只接受以下互斥最终结果和一个临时恢复结果;待配置不算成功:
|
|
167
|
+
5. Unix/macOS/Linux 或 Windows READY 的 `ensure` 只依据同一目标项目的 `.alipay-sandbox.json` 当前事实分流:文件不存在时执行既有 `create`;文件存在或为符号链接时执行既有 `verify` 安全路径。已存在配置不得再次调用 `createAnonymousSandbox`、不得覆盖,也不得因为中断重来要求用户删除配置;无效、不安全或被 Git 跟踪时不得使用,脚本按待配置终态统一输出后继续代码开发。
|
|
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 不调用该方法或 `sandbox_config.sh`。
|
|
169
|
+
7. Unix/macOS/Linux 或 Windows READY 只接受以下互斥最终结果和一个临时恢复结果;待配置不算成功:
|
|
168
170
|
- `READY`:退出码为 0;唯一带 `ALIPAY_AIPAY_INTERNAL:` 前缀的 `SANDBOX_ENSURE_ACTION=CREATED|VERIFIED`、`SANDBOX_CONFIG_PATH=<同一目标项目绝对路径>/.alipay-sandbox.json` 和 `FLOW:SANDBOX_CONFIG_READY` 内部事实。
|
|
169
171
|
- `CREATE_PENDING`:退出码为 0;脚本 stdout 已渲染唯一 `sandbox.configuration.pending/CREATE` 正文,并产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=sandbox.configuration.pending`;另有唯一带 `ALIPAY_AIPAY_INTERNAL:` 前缀的 `SANDBOX_PENDING_PATH=<同一目标项目绝对路径>/.alipay-sandbox.json` 和 `FLOW:SANDBOX_CONFIG_PENDING_CREATE` 内部事实;不得出现 READY 标记。
|
|
170
172
|
- `VERIFY_PENDING`:退出码为 0;脚本 stdout 已渲染唯一 `sandbox.configuration.pending/VERIFY` 正文,并产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=sandbox.configuration.pending`;另有唯一带 `ALIPAY_AIPAY_INTERNAL:` 前缀的 `SANDBOX_PENDING_PATH=<同一目标项目绝对路径>/.alipay-sandbox.json` 和 `FLOW:SANDBOX_CONFIG_PENDING_VERIFY` 内部事实;不得出现 READY 标记。
|
|
171
173
|
- `LOCAL_FS_RECOVERY`:仅创建分支、退出码 `77`,唯一包含上述 CREATE pending 两个事实及 `SANDBOX_LOCAL_FS_PERMISSION_MODE=CREATE`、`CLI_FLOW:RETRY_WITH_LOCAL_FS_PERMISSION`;stdout 是现有 pending 正文,先暂存且不得发送,CLI 调用次数为 0。允许权限升级后原样重试一次:`READY` 时丢弃暂存正文;普通 `CREATE_PENDING` 或再次命中本结果时只发送重试 stdout 并接受其 pending 事实;拒绝或宿主不支持时发送首次 stdout 并接受首次 pending 事实。不得再次申请、新增消息或确认。
|
|
172
174
|
8. 所有 `ALIPAY_AIPAY_INTERNAL:` 行只用于转移;宿主合并输出时也先整行剔除。`READY` 的 stdout 为空,静默记录 `READY` 并直接进入步骤 2;普通 pending 或按上项降级时,必须校验唯一 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED=sandbox.configuration.pending`,下一动作将剔除内部行后的 stdout 原文独立送达,再记录 `CREATE_PENDING|VERIFY_PENDING` 并直接进入步骤 2。禁止追加 `jq|cat|grep|ls|stat` 或临时脚本;待配置时禁止读取、引用或复制无效/不存在配置的字段。
|
|
173
|
-
|
|
175
|
+
Windows READY 若在调用沙箱脚本前收到非零及 `WINDOWS_BUSINESS_BLOCKED=ENVIRONMENT_UNAVAILABLE`,本次 CLI 调用为零,转 LEGACY,按第 4 项记录 `VERIFY_PENDING` 并继续独立开发。脚本已启动后的失败仍按第 9 项处理,不把超时或未知结果伪装为待配置。
|
|
176
|
+
|
|
177
|
+
9. 除上项精确的 `LOCAL_FS_RECOVERY` 外,命令非 0、终态标记缺失/重复/冲突、路径不一致或输出含 `SANDBOX_ERROR` 时属于脚本执行协议失败,仍停留在步骤 1;不得把这种执行异常降级为待配置,也不得临场改写 jq、重放原始 MCP 命令或自行检查敏感配置。CLI 已执行后才出现本地状态权限证据时,创建请求属于 `MAYBE_SENT`,脚本不得返回恢复 marker 或重放,`ensure` 直接使用既有 `CREATE_PENDING` 正文和终态继续代码开发。Windows LEGACY 配置检查未通过仍按 Windows LEGACY 登记分支处理。项目内自建 JSON、Agent 自报或补充诊断结果都不能替代上述终态。
|
|
174
178
|
10. 准备阶段不得渲染 `sandbox.environment.summary` 或 `sandbox.environment.reminder`,不得展示沙箱买家密码,也不得输出“沙箱测试通过”。只有 `sandboxConfigState=READY` 且代码开发完成并通过配置后置校验后,才按步骤 5 的摘要展示规则对客展示沙箱环境配置。
|
|
175
179
|
|
|
176
180
|
### 步骤 2:产品决策
|
|
@@ -227,23 +231,23 @@ runner 失败时不得展示手写方案或进入步骤 3。成功时必须取
|
|
|
227
231
|
> 步骤 1 已完成 CLI、操作系统和首次配置校验。本步骤只复核方案展示期间配置是否仍然安全可用,不重新创建沙箱,也不重新执行环境探测。
|
|
228
232
|
|
|
229
233
|
**完成条件**:
|
|
230
|
-
- [INT.SANDBOX.UNIX_TERMINAL] Unix/macOS/Linux:`READY` 时已用 `reverify` 复核同一配置;步骤 1 或本步骤得到 `CREATE_PENDING|VERIFY_PENDING` 时,未读取或使用无效配置,已保留待配置状态并继续步骤 4
|
|
231
|
-
- [INT.SANDBOX.WINDOWS_REVERIFIED] Windows:`READY` 时已静默复核步骤 1 通过的项目实际配置、密钥格式和版本控制保护;`VERIFY_PENDING` 时未读取配置或重复展示申领提示,已直接继续代码开发
|
|
234
|
+
- [INT.SANDBOX.UNIX_TERMINAL] Unix/macOS/Linux 或 Windows READY:`READY` 时已用 `reverify` 复核同一配置;步骤 1 或本步骤得到 `CREATE_PENDING|VERIFY_PENDING` 时,未读取或使用无效配置,已保留待配置状态并继续步骤 4
|
|
235
|
+
- [INT.SANDBOX.WINDOWS_REVERIFIED] Windows LEGACY:`READY` 时已静默复核步骤 1 通过的项目实际配置、密钥格式和版本控制保护;`VERIFY_PENDING` 时未读取配置或重复展示申领提示,已直接继续代码开发
|
|
232
236
|
|
|
233
237
|
> `READY` 时实际本机配置路径是后续唯一可信来源;待配置时 `SANDBOX_PENDING_PATH` 只是预期路径,不得作为配置存在或字段有效的证据。禁止从对话或历史代码复制密钥;对客沙箱摘要只能在代码开发完成且配置后置校验通过后展示。正常路径由 `sandbox_config.sh` 托管字段、落盘、重复创建和失败分支;仅脚本协议异常或用户要求解释时读取沙箱指南。
|
|
234
238
|
|
|
235
239
|
**操作流程**:
|
|
236
240
|
1. 继承步骤 1 的操作系统、规范化项目路径和服务端语言;任一值变化就返回步骤 1,不在本步骤重新探测。
|
|
237
|
-
2. Unix/macOS/Linux 的 `sandboxConfigState=CREATE_PENDING|VERIFY_PENDING` 时不再次调用脚本、不读取配置,直接进入步骤 4;本轮后续保持同一状态,直到用户另行要求重新配置。
|
|
238
|
-
3. Windows 的 `sandboxConfigState=VERIFY_PENDING` 时不读取或探测配置、不渲染 `sandbox.windows.manual_setup`,直接进入步骤 4;`READY` 时才静默复核步骤 1 由 Agent 写入的同一本机敏感配置路径、项目实际读取字段、密钥格式和版本控制保护。路径、字段或保护发生变化时返回步骤 1 的 Windows 分支,只补问实际缺失或错误字段。
|
|
239
|
-
4. Unix/macOS/Linux 仅在 `sandboxConfigState=READY` 时执行以下唯一复核命令,不先检查文件、不读取字段、不运行其他诊断:
|
|
241
|
+
2. Unix/macOS/Linux 或 Windows READY 的 `sandboxConfigState=CREATE_PENDING|VERIFY_PENDING` 时不再次调用脚本、不读取配置,直接进入步骤 4;本轮后续保持同一状态,直到用户另行要求重新配置。
|
|
242
|
+
3. Windows LEGACY 的 `sandboxConfigState=VERIFY_PENDING` 时不读取或探测配置、不渲染 `sandbox.windows.manual_setup`,直接进入步骤 4;`READY` 时才静默复核步骤 1 由 Agent 写入的同一本机敏感配置路径、项目实际读取字段、密钥格式和版本控制保护。路径、字段或保护发生变化时返回步骤 1 的 Windows LEGACY 分支,只补问实际缺失或错误字段。
|
|
243
|
+
4. Unix/macOS/Linux 或 Windows READY 仅在 `sandboxConfigState=READY` 时执行以下唯一复核命令,不先检查文件、不读取字段、不运行其他诊断:
|
|
240
244
|
|
|
241
245
|
```bash
|
|
242
246
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox reverify "<规范化项目路径>" "<已确认服务端语言>" --telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
243
247
|
```
|
|
244
248
|
|
|
245
249
|
5. `reverify` 只接受与步骤 1 相同的三个互斥终态。`READY` 更新 `sandboxConfigState=READY` 并立即进入步骤 4;`VERIFY_PENDING` 已由脚本输出唯一待配置正文,更新状态后立即进入步骤 4。`reverify` 不允许创建分支,若异常出现 `CREATED|CREATE_PENDING` 标记必须按协议失败停止。所有终态之后禁止追加任何 `jq`、`cat`、`grep`、`ls`、`stat` 或临时脚本。
|
|
246
|
-
6. Windows 手工申领分支不伪装成快速沙箱脚本结果,只按本步骤和指南检查目标项目实际使用的本地配置。沙箱就绪时不输出复核进度、沙箱环境摘要、独立校验结果或字段核对表,直接进入步骤 4。
|
|
250
|
+
6. Windows LEGACY 手工申领分支不伪装成快速沙箱脚本结果,只按本步骤和指南检查目标项目实际使用的本地配置。沙箱就绪时不输出复核进度、沙箱环境摘要、独立校验结果或字段核对表,直接进入步骤 4。
|
|
247
251
|
|
|
248
252
|
---
|
|
249
253
|
|
|
@@ -286,7 +290,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
286
290
|
| 4 | 时间戳格式 | 必须使用 `yyyy-MM-dd HH:mm:ss`,禁止使用 ISO 格式 |
|
|
287
291
|
| 5 | SDK 引入方式 | 必须通过查阅 SDK 文档或类型定义确定正确的引入方式,禁止凭猜测选择 |
|
|
288
292
|
| 6 | 遇到 `invalid-signature` 报错 | 严禁凭猜测归因到私钥格式;先核对实际发送、参与签名和服务端验签的参数是否完全一致 |
|
|
289
|
-
| 7 | 配置接入后必须后置校验 | Unix/macOS/Linux 必须确认服务端加载器直接读取已验证文件、字段映射正确且 SDK 配置匹配;Windows 必须确认项目读取同一套本机沙箱应用配置;失败时禁止继续联调 |
|
|
293
|
+
| 7 | 配置接入后必须后置校验 | Unix/macOS/Linux 或 Windows READY 必须确认服务端加载器直接读取已验证文件、字段映射正确且 SDK 配置匹配;Windows LEGACY 必须确认项目读取同一套本机沙箱应用配置;失败时禁止继续联调 |
|
|
290
294
|
|
|
291
295
|
步骤 4 的本地依据全部取得后,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" flow integration implementation --product-type "$PRODUCT_TYPE" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` 加载步骤 5;不得直接读取后续整段 flow。
|
|
292
296
|
|
|
@@ -306,7 +310,7 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
306
310
|
- [INT.CODE.BASE_IMPLEMENTED] 已完成支付宝支付产品集成代码实现
|
|
307
311
|
- [INT.CODE.INTERFACES_COMPLETE] 已按目标产品文档完成全部适用接口;网站支付/APP 支付覆盖下单、交易查询、退款、退款查询、关闭交易和异步通知处理代码,按量付费覆盖 402、`payment.verify` 和 `fulfillment.confirm`
|
|
308
312
|
- [INT.CODE.SELF_CHECKED] 已完成代码自检并确认无误
|
|
309
|
-
- [INT.CODE.CONFIG_VERIFIED] 已完成支付配置准确性后置校验:Unix/macOS/Linux 服务端加载器直接读取已验证文件且字段映射、SDK 配置匹配;Windows 项目读取同一套本机沙箱应用配置
|
|
313
|
+
- [INT.CODE.CONFIG_VERIFIED] 已完成支付配置准确性后置校验:Unix/macOS/Linux 或 Windows READY 服务端加载器直接读取已验证文件且字段映射、SDK 配置匹配;Windows LEGACY 项目读取同一套本机沙箱应用配置
|
|
310
314
|
- [INT.WEBPAY.RETURN_IMPLEMENTED] 网站支付在用户未明确要求不使用同步回跳时,已配置与当前项目一致的 `return_url`,并实现可通过 GET 访问的回跳路由和结果页;页面不直接信任同步回跳参数判定支付成功
|
|
311
315
|
- [INT.LOCAL_ACCEPTANCE.NOTIFY_DEFERRED] 用户处于“本地生产参数验收模式”时,已明确记录当前暂不联调公网 `notify_url`,支付结果确认依赖异步通知处理代码加主动查询兜底;未把同步回跳参数当作支付成功依据
|
|
312
316
|
- [INT.A2M.PRODUCTION_CONTROLS] 按量付费生产接入中已补齐订单持久化、本地订单匹配、金额一致性、资源防串、幂等履约和履约确认失败可重试逻辑,不存在未实现的关键 TODO
|
|
@@ -324,27 +328,27 @@ curl -sL "<当前契约 sourceUrl 中的官方页面>"
|
|
|
324
328
|
|
|
325
329
|
开始执行代码自检、语法/静态检查或支付配置后置校验前,进入本 flow 的 `verification` 阶段;该阶段不再单独记录 telemetry 开始态,只由最终收口阶段记录结果。
|
|
326
330
|
|
|
327
|
-
**支付配置接入与后置校验**:`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 配置,禁止猜测、转换格式或改写原始值。
|
|
331
|
+
**支付配置接入与后置校验**:`sandboxConfigState=READY` 时,Unix/macOS/Linux 或 Windows READY 快速沙箱由商家服务端代码使用当前语言的标准 JSON 解析器,在运行时读取步骤 1/3 已验证的 `.alipay-sandbox.json`,并从 `appIds[0]` 映射 `appId`、`alipayPublicKey` 和当前语言私钥字段;不得先用 `jq`、`cat` 或临时脚本把字段原文打印到工具输出、复制到源码或重复写入 `.env`。项目已有配置抽象时在其服务端加载边界接入该 JSON,不改变字段原值。Windows LEGACY 从步骤 1 由 Agent 写入并校验的本机敏感配置读取。后置校验必须检查实际加载路径、字段选择、SDK 初始化和版本控制保护;Java 使用 `appPrivateKey`,其他四种语言使用 `appPrivatePkcsKey`。A2M 的 `seller_signature` 使用原生密码库时,只在调用边界按库要求解析密钥。失败时修正加载器或 SDK 配置,禁止猜测、转换格式或改写原始值。
|
|
328
332
|
|
|
329
333
|
`sandboxConfigState=CREATE_PENDING|VERIFY_PENDING` 时仍完整实现当前产品全部适用接口、安全校验和配置加载边界,但不得读取当前无效配置、写入占位 appId/密钥、把示例值当作运行配置或声称 `INT.CODE.CONFIG_VERIFIED` 通过。加载器在配置缺失或无效时必须明确失败并阻止真实 SDK 调用;本轮所有依赖沙箱值的运行验证保持未完成。
|
|
330
334
|
|
|
331
|
-
**沙箱摘要展示入口**:只有 `sandboxConfigState=READY`、本步骤的代码实现和支付配置后置校验都已完成,才允许对客展示沙箱环境配置。待配置状态跳过本入口,不另写摘要或失败话术。Unix/macOS/Linux 从本 flow 所在目录执行:
|
|
335
|
+
**沙箱摘要展示入口**:只有 `sandboxConfigState=READY`、本步骤的代码实现和支付配置后置校验都已完成,才允许对客展示沙箱环境配置。待配置状态跳过本入口,不另写摘要或失败话术。Unix/macOS/Linux 或 Windows READY 从本 flow 所在目录执行:
|
|
332
336
|
|
|
333
|
-
`environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows 的应用 ID 和买家测试账号必须取自步骤 1/3 已校验的同一本机配置,两个密码行的固定保存提示仅在实际确认密码已写入该文件后使用。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
|
|
337
|
+
`environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 或 Windows READY 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows LEGACY 的应用 ID 和买家测试账号必须取自步骤 1/3 已校验的同一本机配置,两个密码行的固定保存提示仅在实际确认密码已写入该文件后使用。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
|
|
334
338
|
|
|
335
339
|
```bash
|
|
336
340
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox summary "<productType>" "<规范化项目路径>" "<已确认服务端语言>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
337
341
|
```
|
|
338
342
|
|
|
339
|
-
该命令 stdout 只渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder
|
|
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 自写表格。
|
|
340
344
|
|
|
341
|
-
Windows 从项目实际读取的同一本机配置构造不含密码和密钥原文的 `ENVIRONMENT_ROWS`,再从本 flow 所在目录执行以下固定命令;不得重新索取或复述步骤 1 已提供的敏感值,也不得改用 Unix 快速沙箱脚本:
|
|
345
|
+
Windows LEGACY 从项目实际读取的同一本机配置构造不含密码和密钥原文的 `ENVIRONMENT_ROWS`,再从本 flow 所在目录执行以下固定命令;不得重新索取或复述步骤 1 已提供的敏感值,也不得改用 Unix 快速沙箱脚本:
|
|
342
346
|
|
|
343
347
|
```powershell
|
|
344
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>"
|
|
345
349
|
```
|
|
346
350
|
|
|
347
|
-
Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”四行。前两行使用实际沙箱应用 ID 和买家登录账号;两个密码行只展示“已写入本地配置文件,默认不在对话中展开”,不得传入密码原文。不追加 pid、商家或买家 userId、sandboxId。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。
|
|
351
|
+
Windows LEGACY 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝对路径;`ENVIRONMENT_ROWS` 固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”四行。前两行使用实际沙箱应用 ID 和买家登录账号;两个密码行只展示“已写入本地配置文件,默认不在对话中展开”,不得传入密码原文。不追加 pid、商家或买家 userId、sandboxId。两个 renderer 任一失败都按摘要展示失败处理,禁止手写补齐。
|
|
348
352
|
|
|
349
353
|
<!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
|
|
350
354
|
**网站支付回跳默认规则**:用户未特别说明时,默认实现支付后同步回跳。`return_url` 必须来自已确认目标项目的实际协议、主机、端口和路由,禁止保留 `your-domain.com`、示例端口或猜测路径。项目没有结果页时,在当前技术栈内新增与既有 UI 一致的 GET 回跳路由和页面。用户已明确不需要同步回跳时,直接按关闭分支验收,不增加第二次确认;仍必须保留异步通知、交易查询和商户订单查询页。用户未明确关闭但代码缺少 `return_url` 时,必须修复为默认同步回跳分支,不得要求用户接受遗漏。验收结论必须从实际代码重新检查,不接受调用方自报 `returnMode`。
|
|
@@ -430,6 +434,20 @@ Windows 的 `CONFIG_PATH` 必须是步骤 1/3 已校验的实际本机配置绝
|
|
|
430
434
|
- [INT.A2M.DELIVERY_EVIDENCE] 已携带 `Payment-Proof` 重试原服务,并取得 HTTP 200、非空可归属资源、无明确业务失败和有效 `Payment-Validation` 的组合成功证据
|
|
431
435
|
- [INT.A2M.TEST_PASSED] 已确认 402 沙箱服务端联调流程通过
|
|
432
436
|
|
|
437
|
+
Windows 在本步骤第一次 `a2m precheck` 前先通过统一 runtime 检查本机 Python,其他产品不执行:
|
|
438
|
+
|
|
439
|
+
```text
|
|
440
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env check-python --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
只有退出 0 且唯一 `ALIPAY_AIPAY_INTERNAL:PYTHON_ENV=READY` 才继续。检查会实际加载当前联调脚本而不执行 main,不以 `--version` 成功代替 Python 3 能力证据。仅 `WINDOWS_ENV_RESULT` 为 `reason=DEPENDENCY_MISSING,dependency=Python 3` 且当前已有依赖准备授权时执行:
|
|
444
|
+
|
|
445
|
+
```text
|
|
446
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" env prepare-python --authorized true --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
用户明确修复并要求重试后,最多追加一次 `--repair-confirmed true`。仍要求唯一 READY 和退出 0;否则不发起联调,保留 Python 环境缺口并按本步骤失败路径进入步骤 7/8,不记联调通过。Python 准备只补依赖,不重放任何已经发出的支付请求,不重置 A2M receipt。winget 不可用或安装失败时提供 [Python 官方 Windows 下载页](https://www.python.org/downloads/windows/)的手动准备指引,不自动提权或改用其他包管理器。
|
|
450
|
+
|
|
433
451
|
**测试前预检**:执行沙箱测试脚本前,只使用 `modules/sandbox/a2m-sandbox-test.md` 登记的固定 `runtime.mjs a2m precheck`,确认服务返回 HTTP 402,`Payment-Needed` 包含 `seller_signature` 等关键字段,且 `method.service_id` 等于 `api_mock_service_id`;禁止临时编写 Python、curl 管道或近似解析器。
|
|
434
452
|
|
|
435
453
|
**沙箱支付宝体验提醒**:服务端联调结论输出后,按 `modules/sandbox/a2m-sandbox-test.md` 向用户提供付款链接、沙箱买家账号和安卓客户端下载说明作为可选付款体验;该体验不新增阻塞确认点。
|
|
@@ -582,7 +600,7 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message che
|
|
|
582
600
|
|
|
583
601
|
**完成语义**:只有步骤 1-8 的适用完成条件均满足且 `sandboxConfigState=READY` 后,才可声明支付产品-代码开发完成。沙箱待配置但代码实现与其余检查通过时只能输出“部分通过”,不得改写为完成;存在其他未通过项时输出“未通过”;若配置已就绪且仅剩无法自动验证项,输出“部分通过”并登记人工待验证项,不得改写为完成或生产就绪。
|
|
584
602
|
|
|
585
|
-
完成结论必须逐项来自本轮实际检查:项目和代码项重新扫描目标目录;Unix/macOS/Linux 只有 `sandboxConfigState=READY` 时才重新执行严格的 `sandbox_config.sh verify`,待配置时直接复用本轮脚本终态并标记相关项未完成,不得在 checklist 中再次创建或复核;Windows 只有 `READY` 时重新检查项目实际读取的本地配置、密钥格式和版本控制保护,`VERIFY_PENDING` 时直接标记配置及依赖动作未完成;按量付费联调只接受本轮 `run --auto-complete --require-payment-validation` 的实际成功;用户确认项只接受当前摘要后的回复。任何一项缺失、失败或无法执行都标记为失败或人工待验证,不得由 Agent 自填 `PASS`。
|
|
603
|
+
完成结论必须逐项来自本轮实际检查:项目和代码项重新扫描目标目录;Unix/macOS/Linux 或 Windows READY 只有 `sandboxConfigState=READY` 时才重新执行严格的 `sandbox_config.sh verify`,待配置时直接复用本轮脚本终态并标记相关项未完成,不得在 checklist 中再次创建或复核;Windows LEGACY 只有 `READY` 时重新检查项目实际读取的本地配置、密钥格式和版本控制保护,`VERIFY_PENDING` 时直接标记配置及依赖动作未完成;按量付费联调只接受本轮 `run --auto-complete --require-payment-validation` 的实际成功;用户确认项只接受当前摘要后的回复。任何一项缺失、失败或无法执行都标记为失败或人工待验证,不得由 Agent 自填 `PASS`。
|
|
586
604
|
|
|
587
605
|
**沙箱结论边界**:步骤 8 的代码与配置校验不得把步骤 3 的字段完整性、网站支付的付款指引或 APP 支付跳过步骤 6 改写为“沙箱测试通过”。只有按量付费步骤 6 已取得完整端到端成功证据时,最终摘要才可复用该测试结论。
|
|
588
606
|
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
| 私钥存储位置 | 私钥不得保存在客户端代码中 | 构造交易数据并签名必须在商家服务端完成,私钥绝对不能保存在商家APP客户端中,也不能从服务端下发。商户需妥善保存私钥,不建议在代码或配置中明文写入私钥,应当通过加密配置文件或密钥管理平台进行管理 |
|
|
13
13
|
| 私钥日志安全 | 私钥不得出现在日志中 | 私钥的保密等级比源码高,出现在日志中将增加私钥泄露的风险 |
|
|
14
14
|
| 私钥仓库安全 | 私钥不得上传公共仓库 | 私钥泄露将导致应用和支付宝交互的安全性完全丧失 |
|
|
15
|
-
| 沙箱配置后置校验 | 沙箱 appId、应用私钥、支付宝公钥接入项目后必须完成配置准确性校验 | `sandboxConfigState=READY` 时,Unix/macOS/Linux 必须确认商家服务端加载器直接读取已验证的 `.alipay-sandbox.json`,从同一 `appIds[0]` 选择当前语言字段且不在源码、普通日志或额外 `.env` 留下密钥副本;Windows 必须确认项目实际读取值属于本次手工申领和密钥配置的同一沙箱应用。待配置时本项直接不通过,代码只能保留会在配置缺失时明确失败的加载边界,禁止占位符、示例值或其他来源密钥 |
|
|
15
|
+
| 沙箱配置后置校验 | 沙箱 appId、应用私钥、支付宝公钥接入项目后必须完成配置准确性校验 | `sandboxConfigState=READY` 时,Unix/macOS/Linux 或 Windows READY 必须确认商家服务端加载器直接读取已验证的 `.alipay-sandbox.json`,从同一 `appIds[0]` 选择当前语言字段且不在源码、普通日志或额外 `.env` 留下密钥副本;Windows LEGACY 必须确认项目实际读取值属于本次手工申领和密钥配置的同一沙箱应用。待配置时本项直接不通过,代码只能保留会在配置缺失时明确失败的加载边界,禁止占位符、示例值或其他来源密钥 |
|
|
16
16
|
| 用户项目文件保护 | 既有项目结构、文件和无关支付能力均保留;新项目只创建在尚不存在或为空的目录 | 检查本轮变更不存在未经独立二次确认的既有文件删除、既有文件整体覆盖,或与已确认目标产品无关的修改;新建文件不属于既有文件整体覆盖。发现违规立即判定不通过并停止后续流程 |
|
|
17
|
-
| 沙箱配置防提交 | Unix/macOS/Linux 快速沙箱:配置未被 Git 跟踪,项目根目录 `.gitignore` 包含精确规则 `/.alipay-sandbox.json
|
|
18
|
-
| 沙箱配置稳定定位 | Unix/macOS/Linux 项目代码从已确认的规范化项目根定位 `.alipay-sandbox.json` | 禁止依赖 `cwd`、`getcwd()`、`Directory.GetCurrentDirectory()`、`user.dir` 或 Agent 启动目录 |
|
|
17
|
+
| 沙箱配置防提交 | Unix/macOS/Linux 或 Windows READY 快速沙箱:配置未被 Git 跟踪,项目根目录 `.gitignore` 包含精确规则 `/.alipay-sandbox.json`,Unix 配置权限为 `0600`,Windows READY 使用经读回验证的 NTFS DACL(当前用户、SYSTEM、Administrators);Windows LEGACY 手工沙箱:实际敏感配置未被 Git 跟踪并具有对应忽略保护,Windows LEGACY 文件访问控制能核验时仅当前用户可访问,不能核验时标记人工待验证 | 禁止私钥、沙箱账号或密码随项目进入 Git 暂存区或公共仓库;缺少适用保护时判定不通过 |
|
|
18
|
+
| 沙箱配置稳定定位 | Unix/macOS/Linux 或 Windows READY 项目代码从已确认的规范化项目根定位 `.alipay-sandbox.json` | 禁止依赖 `cwd`、`getcwd()`、`Directory.GetCurrentDirectory()`、`user.dir` 或 Agent 启动目录 |
|
|
19
19
|
| SDK 公钥/证书模式一致 | 公钥模式使用普通执行 API;证书执行 API 只在应用公钥证书、支付宝公钥证书和支付宝根证书均已配置时使用 | 禁止公钥配置模式误用证书执行 API |
|
|
20
20
|
| 支付校验无旁路 | 生产源码中不存在 Mock、测试或沙箱开关可触达的跳过验签、固定成功或支付校验旁路 | 沙箱与生产必须共用相同验证控制流 |
|
|
21
21
|
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
|
|
136
136
|
先按当前证据逐项判断;本轮可修复时先修复、重检,不渲染中间结果。项目稳定后按 `../flow.md` 执行唯一 `checklist-result`,由 runner 在同一次最终调用中校验 scope 并对同一项目快照执行固定 implementation audit。审计失败是阻断缺口,不能被 Agent 自报结论覆盖;可修复时先返回结构化 findings,项目变化后重新加载 checklist 阶段取得新 scope。
|
|
137
137
|
|
|
138
|
-
最终 action、完整参数和失败转移只以 `../flow.md` 步骤 8 为准,本模块不复制命令。runner 只接受最终一轮实际证据:Unix/macOS/Linux 的 `sandboxConfigState` 复用脚本终态,Windows 复用步骤 1/3 的 `READY|VERIFY_PENDING`;待配置时不重跑或读取配置,并把配置及依赖动作列为未完成。
|
|
138
|
+
最终 action、完整参数和失败转移只以 `../flow.md` 步骤 8 为准,本模块不复制命令。runner 只接受最终一轮实际证据:Unix/macOS/Linux 或 Windows READY 的 `sandboxConfigState` 复用脚本终态,Windows LEGACY 复用步骤 1/3 的 `READY|VERIFY_PENDING`;待配置时不重跑或读取配置,并把配置及依赖动作列为未完成。
|
|
139
139
|
|
|
140
140
|
各产品结论差异如下,对客正文只在消息目录维护:
|
|
141
141
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 沙箱环境初始化指南
|
|
2
2
|
|
|
3
|
-
本文档是沙箱环境配置的**单一可信来源**。运行时 Agent 在 Unix/macOS/Linux 只执行 integration flow 登记的 `sandbox_config.sh ensure|reverify|verify|summary`;本文档中的字段表和处理顺序是脚本维护契约,不授权 Agent 对 `.alipay-sandbox.json` 运行临时 `jq`、`cat`、`grep`、`ls`、`stat` 或另写解析脚本。
|
|
3
|
+
本文档是沙箱环境配置的**单一可信来源**。运行时 Agent 在 Unix/macOS/Linux 或 Windows READY 只执行 integration flow 登记的 `sandbox_config.sh ensure|reverify|verify|summary`;本文档中的字段表和处理顺序是脚本维护契约,不授权 Agent 对 `.alipay-sandbox.json` 运行临时 `jq`、`cat`、`grep`、`ls`、`stat` 或另写解析脚本。
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
- ✅ **即开即用**:全自动配置网关及应用信息
|
|
12
12
|
- ✅ **安全隔离**:测试环境不涉及真实资金,可放心调试
|
|
13
13
|
|
|
14
|
-
### 1.2 Windows 用户注意事项
|
|
15
|
-
|
|
14
|
+
### 1.2 Windows LEGACY 用户注意事项
|
|
15
|
+
Windows READY 通过兼容层执行 flow 登记的快速沙箱;下述手工分支只适用于 Windows LEGACY。
|
|
16
16
|
|
|
17
|
-
Windows 普通代码开发或完整接入请求未明确要求当前配置沙箱时,记录 `sandboxConfigState=VERIFY_PENDING` 并继续代码实现,不展示资料收集消息。只有用户明确要求现在配置或恢复 Windows 沙箱时,才使用 `../../../normal/json/customer-messages.json` 的既有 `sandbox.windows.manual_setup`,引导用户前往支付宝 AI 付站点的“选择产品 → 一站式接入 → 技术集成”页面获取当前沙箱的 APPID、公私钥和账号信息;随后只处理用户针对本轮该消息提供的资料,完整时校验并写入目标项目实际使用的本地敏感配置,部分或错误时只补问对应字段。不得要求用户自行配置、理解 `sandbox_config.sh`、执行 Bash 或手工拼接 Skill 的规范化 JSON。该资料输入例外只适用于沙箱,生产环境应用私钥和密码禁止提供给 Agent;Agent 不得在回复、摘要或普通日志中复述收到的值。
|
|
17
|
+
Windows LEGACY 普通代码开发或完整接入请求未明确要求当前配置沙箱时,记录 `sandboxConfigState=VERIFY_PENDING` 并继续代码实现,不展示资料收集消息。只有用户明确要求现在配置或恢复 Windows LEGACY 沙箱时,才使用 `../../../normal/json/customer-messages.json` 的既有 `sandbox.windows.manual_setup`,引导用户前往支付宝 AI 付站点的“选择产品 → 一站式接入 → 技术集成”页面获取当前沙箱的 APPID、公私钥和账号信息;随后只处理用户针对本轮该消息提供的资料,完整时校验并写入目标项目实际使用的本地敏感配置,部分或错误时只补问对应字段。不得要求用户自行配置、理解 `sandbox_config.sh`、执行 Bash 或手工拼接 Skill 的规范化 JSON。该资料输入例外只适用于沙箱,生产环境应用私钥和密码禁止提供给 Agent;Agent 不得在回复、摘要或普通日志中复述收到的值。
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message windows-sandbox-setup --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
@@ -45,14 +45,14 @@ node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message win
|
|
|
45
45
|
|
|
46
46
|
### 3.1 获取候选沙箱配置
|
|
47
47
|
|
|
48
|
-
- Unix/macOS/Linux:运行时只执行 integration flow 的 `sandbox_config.sh ensure`;[alipay-sandbox-tool](alipay-sandbox-tool.md) 只记录脚本内部冻结的 MCP 契约和维护依据,不作为 Agent 直调入口。
|
|
49
|
-
- Windows
|
|
48
|
+
- Unix/macOS/Linux 或 Windows READY:运行时只执行 integration flow 的 `sandbox_config.sh ensure`;[alipay-sandbox-tool](alipay-sandbox-tool.md) 只记录脚本内部冻结的 MCP 契约和维护依据,不作为 Agent 直调入口。
|
|
49
|
+
- Windows LEGACY:兼容环境未就绪,按第 1.2 节记录 `READY|VERIFY_PENDING`;该分支不调用 `sandbox_config.sh create|verify`,也不伪造 `FLOW:SANDBOX_CONFIGURED`。
|
|
50
50
|
- 工具返回 `success === true` 只代表拿到候选 `data`;必须完成第 4 节字段完整性校验后,才允许写入正式配置文件。
|
|
51
51
|
- `success !== true`、`data` 缺失或字段不完整时,先执行第 6 节既定重试;耗尽后进入本轮待配置状态,只阻断沙箱字段使用、摘要、配置校验和沙箱测试,不阻断代码实现。
|
|
52
52
|
|
|
53
53
|
### 3.2 脚本内部固定处理顺序
|
|
54
54
|
|
|
55
|
-
Unix/macOS/Linux 快速沙箱由 `sandbox_config.sh` 在内部完成以下动作,运行时 Agent 不逐项重做:
|
|
55
|
+
Unix/macOS/Linux 或 Windows READY 快速沙箱由 `sandbox_config.sh` 在内部完成以下动作,运行时 Agent 不逐项重做:
|
|
56
56
|
|
|
57
57
|
1. 提取候选 `data`。
|
|
58
58
|
2. 按第 4 节逐项校验必含字段。
|
|
@@ -61,25 +61,25 @@ Unix/macOS/Linux 快速沙箱由 `sandbox_config.sh` 在内部完成以下动作
|
|
|
61
61
|
5. 后续由商家服务端代码使用当前语言标准 JSON 解析器在运行时读取该文件并映射到 SDK;Agent 不通过 shell 输出字段原文,也不把沙箱密钥复制到源码或重复写入 `.env`。
|
|
62
62
|
6. 代码开发完成且配置后置校验通过后,再使用第 5.2 节的摘要输出入口对客展示沙箱环境配置。
|
|
63
63
|
|
|
64
|
-
Windows 手工沙箱:
|
|
64
|
+
Windows LEGACY 手工沙箱:
|
|
65
65
|
|
|
66
66
|
1. 没有资料且没有明确配置请求时记录 `VERIFY_PENDING` 并继续代码实现,不渲染消息、不探测猜测配置。
|
|
67
67
|
2. 用户明确要求配置且尚未提供资料时,才使用标准消息一次收集当前沙箱应用的 APPID、支付宝公钥、应用公钥、与已确认语言匹配的应用私钥和沙箱账号信息;缺失或校验失败时只补问对应字段。
|
|
68
68
|
3. 按第 4 节校验资料,随后由 Agent 写入目标项目实际使用的本地敏感配置;不要求采用快速沙箱 `data` 的嵌套结构,不把值复制到源码或普通日志。
|
|
69
|
-
4. 检查敏感配置未被 Git 跟踪,并已有适用于实际路径的版本控制忽略保护;能检查 Windows 文件访问控制时确认仅当前用户可访问,不能取得证据时标记为人工待验证。
|
|
70
|
-
5. 只有 `READY` 时才输出第 5 节规定的摘要和 Windows 提醒并从实际本机配置映射到 SDK;Agent 不得在回复或摘要中复述用户提供的沙箱密钥和密码,生产环境应用私钥和密码禁止提供给 Agent。
|
|
69
|
+
4. 检查敏感配置未被 Git 跟踪,并已有适用于实际路径的版本控制忽略保护;能检查 Windows LEGACY 文件访问控制时确认仅当前用户可访问,不能取得证据时标记为人工待验证。
|
|
70
|
+
5. 只有 `READY` 时才输出第 5 节规定的摘要和 Windows LEGACY 提醒并从实际本机配置映射到 SDK;Agent 不得在回复或摘要中复述用户提供的沙箱密钥和密码,生产环境应用私钥和密码禁止提供给 Agent。
|
|
71
71
|
|
|
72
|
-
Unix/macOS/Linux 快速沙箱的流程准备必须使用 integration flow 登记的 `sandbox_config.sh ensure` 入口:配置缺失时脚本内部创建,已存在时脚本内部复核;步骤 3 仅在首次准备为 `READY` 时执行 `reverify`,待配置时直接继续代码开发;代码开发完成且配置仍为 `READY` 后才使用 `summary` 展示摘要。`ensure|reverify` 会把既定重试耗尽转换为受控 `CREATE_PENDING|VERIFY_PENDING`,直接渲染统一消息并返回终态标记;Agent 不得直接选择创建分支、重复检查文件存在性或权限、读取字段结构、拼接沙箱 JSON、另写解析逻辑或自制摘要表。Windows 手工申领分支检查目标项目实际读取的本地配置,不把平台字段擅自改造成快速沙箱返回结构。
|
|
72
|
+
Unix/macOS/Linux 或 Windows READY 快速沙箱的流程准备必须使用 integration flow 登记的 `sandbox_config.sh ensure` 入口:配置缺失时脚本内部创建,已存在时脚本内部复核;步骤 3 仅在首次准备为 `READY` 时执行 `reverify`,待配置时直接继续代码开发;代码开发完成且配置仍为 `READY` 后才使用 `summary` 展示摘要。`ensure|reverify` 会把既定重试耗尽转换为受控 `CREATE_PENDING|VERIFY_PENDING`,直接渲染统一消息并返回终态标记;Agent 不得直接选择创建分支、重复检查文件存在性或权限、读取字段结构、拼接沙箱 JSON、另写解析逻辑或自制摘要表。Windows LEGACY 手工申领分支检查目标项目实际读取的本地配置,不把平台字段擅自改造成快速沙箱返回结构。
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
76
76
|
## 4. 字段完整性校验契约(脚本内部卡点)
|
|
77
77
|
|
|
78
|
-
Unix/macOS/Linux 由 `sandbox_config.sh` 内部逐项校验,Agent 只消费退出码和 flow 登记标记,不手工执行本节清单。Windows 没有该脚本能力时,才按目标项目实际配置逐项检查。任一必含字段缺失或为空时立即停止使用当前候选:Unix/macOS/Linux 不得写入正式 `.alipay-sandbox.json`,Windows 不得把当前本机配置标记为可用;Unix/macOS/Linux 按有限重试和待配置终态继续代码实现,Windows 仍使用登记的资料补充出口。
|
|
78
|
+
Unix/macOS/Linux 或 Windows READY 由 `sandbox_config.sh` 内部逐项校验,Agent 只消费退出码和 flow 登记标记,不手工执行本节清单。Windows LEGACY 没有该脚本能力时,才按目标项目实际配置逐项检查。任一必含字段缺失或为空时立即停止使用当前候选:Unix/macOS/Linux 或 Windows READY 不得写入正式 `.alipay-sandbox.json`,Windows LEGACY 不得把当前本机配置标记为可用;Unix/macOS/Linux 或 Windows READY 按有限重试和待配置终态继续代码实现,Windows LEGACY 仍使用登记的资料补充出口。
|
|
79
79
|
|
|
80
80
|
### 4.1 必含字段清单
|
|
81
81
|
|
|
82
|
-
以下是两条分支共同的语义要求,必须按项目语言和测试账号要求存在且非空。Unix/macOS/Linux 快速沙箱按表中的原始字段名检查;Windows 按目标项目实际配置的等价字段检查,不得为了通过校验擅自改造为快速沙箱嵌套结构:
|
|
82
|
+
以下是两条分支共同的语义要求,必须按项目语言和测试账号要求存在且非空。Unix/macOS/Linux 或 Windows READY 快速沙箱按表中的原始字段名检查;Windows LEGACY 按目标项目实际配置的等价字段检查,不得为了通过校验擅自改造为快速沙箱嵌套结构:
|
|
83
83
|
|
|
84
84
|
| 字段 | 说明 |
|
|
85
85
|
|---|---|
|
|
@@ -118,38 +118,38 @@ Unix/macOS/Linux 由 `sandbox_config.sh` 内部逐项校验,Agent 只消费退
|
|
|
118
118
|
|
|
119
119
|
### 5.1 本地配置文件
|
|
120
120
|
|
|
121
|
-
Unix/macOS/Linux 快速沙箱:
|
|
121
|
+
Unix/macOS/Linux 或 Windows READY 快速沙箱:
|
|
122
122
|
|
|
123
123
|
- 固定写入已确认的目标项目根目录 `.alipay-sandbox.json`。目标目录不可写、`.gitignore` 不是安全普通文件或无法建立 Git 忽略保护时不得落盘或使用当前配置;`ensure|reverify` 将其记录为待配置并继续代码实现,不降级写入系统临时目录、Agent 原始工作目录或其他项目。
|
|
124
124
|
- JSON 文件必须保留沙箱返回的原始字段名和嵌套结构,不要转换成 `.env` 扁平键值。
|
|
125
125
|
- 文件权限必须限制为当前用户可读写,即 `chmod 600`;权限收紧或复核失败时不得使用配置或执行沙箱依赖动作。
|
|
126
126
|
- 配置不得已被 Git 跟踪;项目根目录 `.gitignore` 必须包含精确规则 `/.alipay-sandbox.json`。脚本只在缺失时追加一次,不覆盖既有内容;`.gitignore` 为符号链接或非普通文件时停止。
|
|
127
127
|
|
|
128
|
-
Windows 手工沙箱:
|
|
128
|
+
Windows LEGACY 手工沙箱:
|
|
129
129
|
|
|
130
130
|
- 由 Agent 根据目标项目实际结构选择并写入本机敏感配置路径,不要求用户创建 `.alipay-sandbox.json` 或自行配置项目。
|
|
131
|
-
- 配置必须未被 Git 跟踪,并建立适用于该实际路径的忽略保护;不得因为 Windows 不使用 POSIX `0600` 而声称完成了该权限检查。
|
|
132
|
-
- 只有实际检查到的字段才能进入后续 SDK 映射;无法自动核验的 Windows 文件访问控制或平台页面信息必须标记为人工待验证。
|
|
131
|
+
- 配置必须未被 Git 跟踪,并建立适用于该实际路径的忽略保护;不得因为 Windows LEGACY 不使用 POSIX `0600` 而声称完成了该权限检查。
|
|
132
|
+
- 只有实际检查到的字段才能进入后续 SDK 映射;无法自动核验的 Windows LEGACY 文件访问控制或平台页面信息必须标记为人工待验证。
|
|
133
133
|
|
|
134
|
-
Unix/macOS/Linux 创建阶段把实际本机配置路径和 `FLOW:SANDBOX_CONFIG_READY` 作为带 `ALIPAY_AIPAY_INTERNAL:` 前缀的 stderr 内部事实,stdout 为空;不展示账号、密码、公钥或摘要。Windows 手工分支完成后只在内部保留实际本机配置路径。两条分支在代码开发完成且配置后置校验通过后,才进入摘要展示。
|
|
134
|
+
Unix/macOS/Linux 或 Windows READY 创建阶段把实际本机配置路径和 `FLOW:SANDBOX_CONFIG_READY` 作为带 `ALIPAY_AIPAY_INTERNAL:` 前缀的 stderr 内部事实,stdout 为空;不展示账号、密码、公钥或摘要。Windows LEGACY 手工分支完成后只在内部保留实际本机配置路径。两条分支在代码开发完成且配置后置校验通过后,才进入摘要展示。
|
|
135
135
|
|
|
136
136
|
### 5.2 对话摘要
|
|
137
137
|
|
|
138
|
-
代码开发完成且配置后置校验通过后,Unix/macOS/Linux 从本文件所在的 `references/integration/modules/sandbox/` 目录使用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox summary "<productType>" "<规范化项目路径>" "<已确认服务端语言>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` 复核并展示摘要;该脚本内部负责渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder`,Agent 不得绕过脚本自写摘要。Windows 使用同一消息目录从项目实际读取的本机配置生成摘要,执行:
|
|
138
|
+
代码开发完成且配置后置校验通过后,Unix/macOS/Linux 或 Windows READY 从本文件所在的 `references/integration/modules/sandbox/` 目录使用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" sandbox summary "<productType>" "<规范化项目路径>" "<已确认服务端语言>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` 复核并展示摘要;该脚本内部负责渲染 `sandbox.environment.summary` 与 `sandbox.environment.reminder`,Agent 不得绕过脚本自写摘要。Windows LEGACY 使用同一消息目录从项目实际读取的本机配置生成摘要,执行:
|
|
139
139
|
|
|
140
140
|
```powershell
|
|
141
141
|
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" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
`environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows 的应用 ID 和买家测试账号必须取自步骤 1/3 已校验的同一本机配置,两个密码行的固定保存提示仅在实际确认密码已写入该文件后使用。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
|
|
144
|
+
`environmentRows` 的具体值严禁编造、猜测、补全,禁止使用示例值、占位值或历史对话值替代本轮已校验配置。Unix/macOS/Linux 或 Windows READY 必须由登记脚本直接读取同一配置并生成四行,Agent 不得手填或改写;Windows LEGACY 的应用 ID 和买家测试账号必须取自步骤 1/3 已校验的同一本机配置,两个密码行的固定保存提示仅在实际确认密码已写入该文件后使用。任一必需字段缺失、为空、配置无法读取或来源无法确认时,停止摘要展示并按既有配置失败分支处理,禁止为凑齐四行补值。
|
|
145
145
|
|
|
146
|
-
摘要动态行固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”。Unix/macOS/Linux
|
|
146
|
+
摘要动态行固定依次为“沙箱支付宝应用ID(appID)”“沙箱买家测试账号”“沙箱买家登录密码”“沙箱买家支付密码”。Unix/macOS/Linux 与 Windows READY 都从已校验快速沙箱配置的 `appIds[0].appId`、`sandboxAccounts.user.email`、`sandboxAccounts.user.logonPassword`、`sandboxAccounts.user.payPassword` 取值;Windows LEGACY 手工沙箱只展示前两项实际值,两个密码行固定提示“已写入本地配置文件,默认不在对话中展开”。不得追加 pid、商家或买家 userId、sandboxId;手工沙箱不得将密码原文传入 renderer。以上例外不得扩展到生产环境账号、私钥或密码。
|
|
147
147
|
|
|
148
148
|
renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置不等于测试通过”的边界。禁止另写字段核对表、独立校验结论,或把表名、前后提示改成“沙箱环境校验通过”“沙箱测试通过”“沙箱环境测试通过”。
|
|
149
149
|
|
|
150
150
|
### 5.3 配置准备完成后提示(卡点)
|
|
151
151
|
|
|
152
|
-
`sandbox.environment.summary` 后立即渲染 `sandbox.environment.reminder`:Unix/macOS/Linux 由 `sandbox_config.sh summary` 使用 `DEFAULT`,Windows 使用上方 `WINDOWS` 命令。该消息说明测试资金边界和配置位置;`DEFAULT` 另提醒代码开发阶段自动配置沙箱,正式上线前由用户替换为产品开通流程取得的线上应用配置。安全控制由脚本执行,详细生产配置与上线要求由步骤 7 的 `integration.safety.closeout` 输出。创建阶段不渲染,不维护文案副本。
|
|
152
|
+
`sandbox.environment.summary` 后立即渲染 `sandbox.environment.reminder`:Unix/macOS/Linux 或 Windows READY 由 `sandbox_config.sh summary` 使用 `DEFAULT`,Windows LEGACY 使用上方 `WINDOWS` 命令。该消息说明测试资金边界和配置位置;`DEFAULT` 另提醒代码开发阶段自动配置沙箱,正式上线前由用户替换为产品开通流程取得的线上应用配置。安全控制由脚本执行,详细生产配置与上线要求由步骤 7 的 `integration.safety.closeout` 输出。创建阶段不渲染,不维护文案副本。
|
|
153
153
|
|
|
154
154
|
### 5.4 沙箱对客展示白名单
|
|
155
155
|
|
|
@@ -157,12 +157,12 @@ renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置
|
|
|
157
157
|
|
|
158
158
|
| 场景 | 可对客展示 | 禁止对客展示 |
|
|
159
159
|
|---|---|---|
|
|
160
|
-
| Unix/macOS/Linux 快速沙箱摘要 | `sandbox_config.sh summary` 实际渲染的应用 `appId`、买家 `email/logonPassword/payPassword`、配置文件目录 | `appPrivateKey`、`appPrivatePkcsKey`、`alipayPublicKey`、`appPublicKey`、原始 `.alipay-sandbox.json`、完整 MCP 响应 |
|
|
161
|
-
| Unix/macOS/Linux 网站支付付款体验 | 已校验的沙箱买家登录账号、登录密码、支付密码,以及实际支付页面地址和启动命令 | 商家密码、任何公钥/私钥原文、完整支付表单、签名串 |
|
|
162
|
-
| Windows 手工沙箱 | 配置文件目录、实际沙箱应用 ID 和买家登录账号、两个密码的本机保存提示、官方控制台获取与本机配置完成提示 | 用户提供的应用私钥、支付宝公钥、应用公钥、沙箱账号密码原文 |
|
|
160
|
+
| Unix/macOS/Linux 与 Windows READY 快速沙箱摘要 | `sandbox_config.sh summary` 实际渲染的应用 `appId`、买家 `email/logonPassword/payPassword`、配置文件目录 | `appPrivateKey`、`appPrivatePkcsKey`、`alipayPublicKey`、`appPublicKey`、原始 `.alipay-sandbox.json`、完整 MCP 响应 |
|
|
161
|
+
| Unix/macOS/Linux 与 Windows READY 网站支付付款体验 | 已校验的沙箱买家登录账号、登录密码、支付密码,以及实际支付页面地址和启动命令 | 商家密码、任何公钥/私钥原文、完整支付表单、签名串 |
|
|
162
|
+
| Windows LEGACY 手工沙箱 | 配置文件目录、实际沙箱应用 ID 和买家登录账号、两个密码的本机保存提示、官方控制台获取与本机配置完成提示 | 用户提供的应用私钥、支付宝公钥、应用公钥、沙箱账号密码原文 |
|
|
163
163
|
| 按量付费自动联调 | 受控结论、付款链接和沙箱买家可选体验入口 | `Payment-Proof`、`Payment-Validation` 原文、完整收银请求、临时产物路径中的敏感内容 |
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
仅 Unix/macOS/Linux 与 Windows READY 的 `sandboxCredential` 类型变量可以承载快速沙箱买家登录密码和支付密码;该例外不适用于 Windows LEGACY 手工沙箱或生产账号、生产密码、应用私钥、公钥、token、签名串或 Payment-Proof。
|
|
166
166
|
|
|
167
167
|
### 5.5 网站支付沙箱付款提示(代码生成后、集成收尾前)
|
|
168
168
|
|
|
@@ -172,7 +172,7 @@ renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置
|
|
|
172
172
|
- **渲染验证**:Agent 具备浏览器/UI 能力时,打开回跳页确认非空白、无可见报错且关键内容正常渲染;不具备时,请用户打开精确地址确认。未取得证据时不得宣称回跳页已验证或网站支付代码开发完成。
|
|
173
173
|
- **关闭分支**:用户已明确表示不使用同步回跳时,不要求或猜测 `return_url`;确认 SDK 请求未传该字段,并验证异步通知、交易查询和商户订单查询页。用户未明确关闭时,缺少 `return_url` 必须修复为默认同步回跳分支。
|
|
174
174
|
|
|
175
|
-
完成对应分支校验后按系统渲染:Unix/macOS/Linux 快速沙箱使用 `webpay.sandbox.experience
|
|
175
|
+
完成对应分支校验后按系统渲染:Unix/macOS/Linux 与 Windows READY 快速沙箱使用 `webpay.sandbox.experience`,传入已校验的沙箱买家账号、登录密码、支付密码、实际项目启动命令、浏览器支付页面地址和当前回跳分支说明;Windows LEGACY 手工沙箱使用 `webpay.sandbox.experience.windows`,只传实际启动命令、浏览器支付页面地址和回跳分支说明,密码由用户从已保存的本机配置或支付宝开放平台控制台取得,Agent 不在付款指引中复述。不得使用示例端口、占位 URL 或猜测地址;任一必需值无法确定时不渲染半模板,指出缺失项并标记为人工待补充。
|
|
176
176
|
|
|
177
177
|
`curl` 调用下单接口并取得 HTML 支付表单只属于接口冒烟检查,不能替代用户付款指引,也不能据此标记步骤 6 完成。必须提供用户可在浏览器中打开的支付页面地址;页面打开沙箱收银台后,以下两种体验方式同时告知用户,由用户自行二选一。
|
|
178
178
|
|
|
@@ -200,8 +200,8 @@ renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置
|
|
|
200
200
|
2. 禁止用占位符或示例假数据冒充真实返回值。
|
|
201
201
|
3. 禁止假设“工具返回的应该都有”而跳过逐项校验。
|
|
202
202
|
4. 禁止字段不完整时使用当前配置、写入正式 `.alipay-sandbox.json`、执行配置后置校验或沙箱测试;允许继续不读取沙箱字段的代码实现,最终必须标记沙箱配置未完成。
|
|
203
|
-
5. Windows 只允许用户在标准资料收集消息后提供当前沙箱密钥和账号信息,Agent 不得在回复、摘要或日志中复述;Unix/macOS/Linux 只允许按登记消息展示已校验的快速沙箱买家密码。禁止展示生产环境应用私钥、账号密码或把任何密钥长字段整段刷屏输出。
|
|
204
|
-
6. 禁止继续使用已被 Git 跟踪的沙箱敏感配置。Unix/macOS/Linux 快速沙箱还必须具备 `/.alipay-sandbox.json` 精确忽略规则;Windows 必须具备适用于实际本机敏感配置路径的忽略保护。
|
|
203
|
+
5. Windows LEGACY 只允许用户在标准资料收集消息后提供当前沙箱密钥和账号信息,Agent 不得在回复、摘要或日志中复述;Unix/macOS/Linux 或 Windows READY 只允许按登记消息展示已校验的快速沙箱买家密码。禁止展示生产环境应用私钥、账号密码或把任何密钥长字段整段刷屏输出。
|
|
204
|
+
6. 禁止继续使用已被 Git 跟踪的沙箱敏感配置。Unix/macOS/Linux 或 Windows READY 快速沙箱还必须具备 `/.alipay-sandbox.json` 精确忽略规则;Windows LEGACY 必须具备适用于实际本机敏感配置路径的忽略保护。
|
|
205
205
|
|
|
206
206
|
### 6.2 快速沙箱重复创建边界
|
|
207
207
|
|
|
@@ -216,10 +216,10 @@ renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置
|
|
|
216
216
|
| 创建失败且既定重试耗尽 | `ensure` 使用 `sandbox.configuration.pending/CREATE`,记录 `CREATE_PENDING` 并继续代码实现;代码开发完成后固定提醒用户可对 Agent 说“重新创建并配置沙箱” |
|
|
217
217
|
| 候选字段或已有配置字段复核失败 | 最多自动重试 2 次、每次间隔 3 秒;仍失败时使用 `sandbox.configuration.pending/CREATE|VERIFY` 并继续代码实现,不展示原始字段或响应 |
|
|
218
218
|
| 待配置状态 | 跳过摘要、配置后置校验、按量付费联调和网站支付付款体验;最终 checklist 保持部分通过或未通过,不得宣称代码开发全部通过或生产就绪 |
|
|
219
|
-
| Windows 未提供资料且未明确要求当前配置 | 记录 `VERIFY_PENDING` 并继续代码实现;不输出失败或申领消息,不探测、不读取、不伪造配置 |
|
|
220
|
-
| Windows 手工申领资料或本地项目配置校验未通过 | 使用 `sandbox.create.failure/WINDOWS`;按第 4 节逐项校验,只补问或更正实际缺失、错误字段后由 Agent 更新本机配置,不要求用户执行 Skill 内部脚本,不伪造快速沙箱结果,也不调用快速沙箱重建 |
|
|
219
|
+
| Windows LEGACY 未提供资料且未明确要求当前配置 | 记录 `VERIFY_PENDING` 并继续代码实现;不输出失败或申领消息,不探测、不读取、不伪造配置 |
|
|
220
|
+
| Windows LEGACY 手工申领资料或本地项目配置校验未通过 | 使用 `sandbox.create.failure/WINDOWS`;按第 4 节逐项校验,只补问或更正实际缺失、错误字段后由 Agent 更新本机配置,不要求用户执行 Skill 内部脚本,不伪造快速沙箱结果,也不调用快速沙箱重建 |
|
|
221
221
|
|
|
222
|
-
本模块不维护失败话术副本;Unix/macOS/Linux 待配置正文由 `sandbox.configuration.pending` 固定维护,Windows 缺失字段和恢复动作仍通过 `sandbox.create.failure/WINDOWS` 的受控变量传入。
|
|
222
|
+
本模块不维护失败话术副本;Unix/macOS/Linux 或 Windows READY 待配置正文由 `sandbox.configuration.pending` 固定维护,Windows LEGACY 缺失字段和恢复动作仍通过 `sandbox.create.failure/WINDOWS` 的受控变量传入。
|
|
223
223
|
|
|
224
224
|
---
|
|
225
225
|
|
|
@@ -227,7 +227,7 @@ renderer 固定输出唯一摘要表、密钥字段已落盘提示和“配置
|
|
|
227
227
|
|
|
228
228
|
只有本轮沙箱配置为 `READY` 时,后续步骤才把可信配置接入用户项目并立即做配置准确性后置校验;校验失败时停止联调并修正服务端加载器或 SDK 配置。待配置时只实现会在缺少有效配置时明确失败的加载边界,不读取、复制或伪造沙箱字段。
|
|
229
229
|
|
|
230
|
-
- Unix/macOS/Linux 确认服务端加载器直接读取第 5.1 节的实际 `.alipay-sandbox.json`,从同一 `appIds[0]` 映射 `appId`、应用私钥和支付宝公钥;禁止从对话、历史代码或示例值复制,禁止用 shell 把字段原文输出后再粘贴。Windows 确认项目读取同一套本机沙箱应用配置。
|
|
230
|
+
- Unix/macOS/Linux 或 Windows READY 确认服务端加载器直接读取第 5.1 节的实际 `.alipay-sandbox.json`,从同一 `appIds[0]` 映射 `appId`、应用私钥和支付宝公钥;禁止从对话、历史代码或示例值复制,禁止用 shell 把字段原文输出后再粘贴。Windows LEGACY 确认项目读取同一套本机沙箱应用配置。
|
|
231
231
|
- 检查加载器没有截断、替换、包装或重新编码字段;项目源码、普通日志和额外 `.env` 中不存在沙箱密钥副本。
|
|
232
232
|
- 检查 SDK 配置与私钥字段匹配:`appPrivatePkcsKey` 对应 PKCS#1,`appPrivateKey` 对应 PKCS#8。
|
|
233
233
|
- 检查 SDK 实际接收的私钥值不包含 PEM 头尾、其他前后缀、包装行或说明文字;业务协议直接使用原生密码库签名时,可按密码库要求临时适配调用入参,但不得修改或覆盖原始配置值。
|
|
@@ -230,16 +230,16 @@ def fetch_payment_needed(
|
|
|
230
230
|
method = method.upper()
|
|
231
231
|
if method == "GET":
|
|
232
232
|
if require_status_402:
|
|
233
|
-
headers = run_curl(["-s", "-D", "-", "-o",
|
|
233
|
+
headers = run_curl(["-s", "-D", "-", "-o", os.devnull, "-X", "GET", url])
|
|
234
234
|
payment_needed = parse_payment_needed(headers)
|
|
235
235
|
else:
|
|
236
236
|
headers = run_curl(["-s", "-I", url])
|
|
237
237
|
payment_needed = parse_payment_needed(headers)
|
|
238
238
|
if not payment_needed:
|
|
239
|
-
headers = run_curl(["-s", "-D", "-", "-o",
|
|
239
|
+
headers = run_curl(["-s", "-D", "-", "-o", os.devnull, "-X", "GET", url])
|
|
240
240
|
payment_needed = parse_payment_needed(headers)
|
|
241
241
|
else:
|
|
242
|
-
curl_args = ["-s", "-D", "-", "-o",
|
|
242
|
+
curl_args = ["-s", "-D", "-", "-o", os.devnull, "-X", method, url]
|
|
243
243
|
if body is not None:
|
|
244
244
|
curl_args.extend(["-H", f"Content-Type: {content_type}", "-d", body])
|
|
245
245
|
headers = run_curl(curl_args)
|