@alipay/alipay-aipay 1.2.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +13 -12
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +17 -9
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +5 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +5 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +34 -12
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/file.d.ts +8 -0
- package/dist/utils/file.d.ts.map +1 -1
- package/dist/utils/file.js +161 -9
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/jq.d.ts.map +1 -1
- package/dist/utils/jq.js +8 -0
- package/dist/utils/jq.js.map +1 -1
- package/package.json +9 -5
- package/skill/SKILL.md +15 -169
- package/skill/VERSION +1 -1
- package/skill/references/integration/flow.md +388 -291
- package/skill/references/integration/modules/alipay-sdk-reminder.md +5 -3
- package/skill/references/integration/modules/checklist.md +54 -32
- package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +199 -0
- 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 +8 -4
- 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 +6 -2
- package/skill/references/integration/modules/code-examples/csharp/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.cs +3 -1
- package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +184 -0
- 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 +4 -1
- 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 +5 -2
- package/skill/references/integration/modules/code-examples/java/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemoController.java +3 -1
- package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +135 -0
- 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 +16 -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 +10 -4
- package/skill/references/integration/modules/code-examples/nodejs/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.js +2 -1
- package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +157 -0
- 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 +4 -1
- 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 +5 -2
- package/skill/references/integration/modules/code-examples/php/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.php +2 -1
- package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +128 -0
- 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 +4 -1
- 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 +5 -1
- package/skill/references/integration/modules/code-examples/python/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.py +4 -2
- package/skill/references/integration/modules/interface-contract/aipay-interface-contract.md +52 -0
- package/skill/references/integration/modules/interface-contract/apppay-interface-contract.md +45 -0
- package/skill/references/integration/modules/interface-contract/common-trade-contract.md +42 -0
- package/skill/references/integration/modules/interface-contract/notify-url-contract.md +68 -0
- package/skill/references/integration/modules/interface-contract/webpay-interface-contract.md +44 -0
- package/skill/references/integration/modules/interface-guide.md +38 -71
- package/skill/references/integration/modules/product-decision.md +18 -35
- package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +62 -94
- package/skill/references/integration/modules/sandbox/alipay-sandbox-tool.md +43 -40
- package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +93 -114
- package/skill/references/integration/modules/scripts/local_402_sandbox_pay.py +358 -148
- package/skill/references/integration/modules/scripts/sandbox_config.sh +299 -0
- package/skill/references/integration/modules/troubleshooting-flow.md +28 -0
- package/skill/references/normal/alipay-cli-env.md +15 -5
- package/skill/references/normal/full-process-routing.md +82 -0
- package/skill/references/normal/json/customer-messages.json +942 -0
- package/skill/references/normal/json/policy-rules.json +179 -0
- package/skill/references/normal/rejection-guide.md +12 -7
- package/skill/references/normal/scripts/alipay_cli_env.mjs +33 -0
- package/skill/references/normal/scripts/alipay_cli_env.sh +55 -0
- package/skill/references/normal/scripts/common.sh +151 -0
- package/skill/references/normal/scripts/detect_dev_tool.sh +5 -1
- package/skill/references/normal/scripts/flow_loader.mjs +241 -0
- package/skill/references/normal/scripts/integration_context_runner.mjs +166 -0
- package/skill/references/normal/scripts/integration_message_runner.mjs +1023 -0
- package/skill/references/normal/scripts/interaction_reply.mjs +133 -0
- package/skill/references/normal/scripts/onboarding_discovery_runner.mjs +224 -0
- package/skill/references/normal/scripts/onboarding_message_runner.mjs +451 -0
- package/skill/references/normal/scripts/onboarding_recovery_runner.mjs +96 -0
- package/skill/references/normal/scripts/open_official_url.sh +82 -0
- package/skill/references/normal/scripts/platform_compat.mjs +39 -0
- package/skill/references/normal/scripts/project_route_inspector.sh +132 -0
- package/skill/references/normal/scripts/python_script_runner.mjs +56 -0
- package/skill/references/normal/scripts/render_customer_message.mjs +1288 -0
- package/skill/references/normal/scripts/self_update.mjs +160 -0
- package/skill/references/normal/scripts/telemetry.mjs +1327 -0
- package/skill/references/normal/self-update.md +18 -51
- package/skill/references/normal/telemetry.md +26 -0
- package/skill/references/onboarding/flow.md +421 -309
- package/skill/references/onboarding/modules/app-release.md +44 -438
- package/skill/references/onboarding/modules/authorization.md +25 -281
- package/skill/references/onboarding/modules/error-handling.md +31 -237
- package/skill/references/onboarding/modules/product-sign.md +25 -294
- package/skill/references/onboarding/modules/scripts/app.sh +445 -169
- package/skill/references/onboarding/modules/scripts/ar_sign_apply.sh +47 -28
- package/skill/references/onboarding/modules/scripts/auth.sh +484 -167
- package/skill/references/onboarding/modules/scripts/download_key_tool.sh +157 -0
- package/skill/references/onboarding/modules/scripts/error_handler.sh +101 -130
- package/skill/references/onboarding/modules/scripts/network_retry.sh +96 -0
- package/skill/references/onboarding/modules/scripts/query_sign_status.sh +20 -71
- package/skill/references/onboarding/modules/scripts/service.sh +154 -89
- package/skill/references/onboarding/modules/scripts/sign_status_parser.sh +58 -0
- package/skill/references/onboarding/modules/scripts/upload_screenshots.sh +34 -20
- package/skill/references/onboarding/modules/service-registration.md +20 -317
- package/skill/references/runtime-entry.md +63 -0
|
@@ -1,244 +1,152 @@
|
|
|
1
|
-
|
|
1
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:START -->
|
|
2
|
+
# 支付产品-产品开通流程说明
|
|
2
3
|
|
|
3
|
-
> ⚠️ **前置声明**:本 flow
|
|
4
|
+
> ⚠️ **前置声明**:本 flow 仅支持 **AI 网页应用收款、AI 移动应用收款、AI 按量付费**三种产品的产品开通。原有“网站支付”“APP 支付”“按量付费”仍作为输入别名和资源目录名。**其他产品(当面付、订单码支付、JSAPI支付、预授权支付、商家扣款等)暂不支持**,如需开通请前往[支付宝商家平台](https://b.alipay.com/page/portal/home)完成。
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
## 📂 文件路由表
|
|
18
|
-
|
|
19
|
-
> 本文件位于 `references/onboarding/`。下表中的 `modules/...`、`../normal/...` 路径均相对本文件所在目录;若从技能包根目录定位,请加前缀 `references/onboarding/`。
|
|
20
|
-
|
|
21
|
-
| 文件 | 说明 | 引用位置 |
|
|
22
|
-
|------|------|----------|
|
|
23
|
-
| **flow.md** | ⭐ 主入口 - 签约流程全览(本文档) | - |
|
|
24
|
-
| **../normal/** | 通用模块 | - |
|
|
25
|
-
| ↳ ../normal/alipay-cli-env.md | alipay-cli 检测与安装 | Step 1 环境检查 |
|
|
26
|
-
| ↳ ../normal/rejection-guide.md | 拒绝引导话术 | 通用 |
|
|
27
|
-
| ↳ ../normal/scripts/detect_dev_tool.sh | AI编程工具检测 | Step 1 |
|
|
28
|
-
| ↳ ../normal/scripts/common.sh | shell 公共函数与初始化入口 | 签约脚本公共依赖 |
|
|
29
|
-
| **modules/** | 子模块目录 | - |
|
|
30
|
-
| ↳ modules/mcc-reference.md | MCC类目参考表 | Step 2 方案规划 |
|
|
31
|
-
| ↳ modules/authorization.md | 登录授权模块 | Step 3 登录授权 |
|
|
32
|
-
| ↳ modules/product-sign.md | 签约模块 | Step 3.1 签约查询 + Step 5.1 签约提交 |
|
|
33
|
-
| ↳ modules/service-registration.md | 服务市场注册模块 | Step 3.1 按量付费服务查询 + Step 5.2 写操作 |
|
|
34
|
-
| ↳ modules/app-release.md | 应用发布模块 | Step 3.1 应用查询 + Step 5.3 后续操作 |
|
|
35
|
-
| ↳ modules/error-handling.md | 错误处理说明 | 全流程 |
|
|
36
|
-
| **modules/scripts/** | 签约流程脚本 | - |
|
|
37
|
-
| ↳ modules/scripts/auth.sh | 登录授权全流程 | Step 3 |
|
|
38
|
-
| ↳ modules/scripts/query_sign_status.sh | 签约状态查询 | Step 3.1 |
|
|
39
|
-
| ↳ modules/scripts/upload_screenshots.sh | 截图上传 | Step 4 |
|
|
40
|
-
| ↳ modules/scripts/ar_sign_apply.sh | 签约提交 | Step 5.1 |
|
|
41
|
-
| ↳ modules/scripts/service.sh | 服务查询与注册 | Step 3.1 查询 + Step 5.2 写操作 |
|
|
42
|
-
| ↳ modules/scripts/app.sh | 应用查询与发布 | Step 3.1 查询 + Step 5.3 后续操作 |
|
|
43
|
-
| ↳ modules/scripts/error_handler.sh | 统一错误检测(共享库) | 全流程 |
|
|
44
|
-
|
|
45
|
-
> 📌 **使用建议**:从 flow.md 主入口开始,按流程顺序执行各 Step。各 Step 中已标注对应的脚本调用命令。
|
|
8
|
+
## 执行入口与重启原则
|
|
9
|
+
|
|
10
|
+
运行时仅用 `../normal/scripts/flow_loader.mjs` 按 marker 提取当前阶段,禁止整份预读;本 flow 仍是唯一执行依据。依次加载 `entry`;方案确认经 `interaction_reply.mjs` 校验后加载 `execute --product-type "$PRODUCT_TYPE"`(含通用护栏);发现完成后加载 `branch-summary`;轮到分支时加载 `signing|service|application --product-type "$PRODUCT_TYPE"`;最后加载 `closeout`。bundle 仅供内部执行,workdir 仍为 `references/onboarding/`。正常路径只执行 phase 的完整命令;脚本异常、用户要求解释或 phase 明示缺少依据时,才读当前一个模块。禁止预读全部分支模块、凭记忆拼 MCP 或绕过 `auth.sh` 登录。已由 `SKILL.md` 与 `runtime-entry.md` 加载的通用护栏不在 bundle 重复输出,原 flow 保留完整规则供校验。
|
|
11
|
+
|
|
12
|
+
每次开始都先校验登录、scope 和 MCC,再查询签约状态、应用候选和适用服务候选,并只依据当前真实结果继续。不得根据历史对话推定外部操作结果。
|
|
13
|
+
|
|
14
|
+
步骤顺序固定为方案确认后授权,再执行全部适用只读查询,最后处理独立分支。查询失败只阻断对应分支,不得当作空列表;其他查询成功的分支可以继续。
|
|
15
|
+
|
|
16
|
+
方案确认前只允许根据 `modules/mcc-reference.md` 当前匹配行陈述 MCC 名称、适用商家和特殊资质原文;特殊资质为 `-` 只表示当前表未列出,不代表对企业/个人签约资格作出结论。表内没有明确依据的主体资格、前提或材料结论统一说明无法确认,禁止补充常识推断。
|
|
46
17
|
|
|
47
18
|
---
|
|
48
19
|
|
|
49
20
|
## ⛔ 核心铁律(签约流程强制遵守)
|
|
50
21
|
|
|
51
|
-
|
|
22
|
+
<!-- GENERATED:ONBOARDING-GUARDS:START -->
|
|
23
|
+
<!-- 此区块由 scripts/generate-skill-guards.mjs 生成,禁止手改 -->
|
|
24
|
+
### 生成式执行护栏
|
|
25
|
+
|
|
26
|
+
- `P-MCP-CONTRACT-FROZEN`:只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。
|
|
27
|
+
- `P-AUTH-BEFORE-ONBOARDING`:登录、scope 和 MCC 全部校验通过前,禁止执行任何 onboarding 查询或写操作。
|
|
28
|
+
- `P-WRITE-CONFIRM`:签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用创建由用户针对当前应用候选列表明确选择新建来确认,候选重查未变化且条件字段齐备时不再追加确认;用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;新建应用的公钥校验成功后直接提交应用审核,不增加额外确认点。
|
|
29
|
+
- `P-WRITE-UNKNOWN`:非幂等写操作结果不明时先用现有只读能力核验;无法确认时进入 UNKNOWN,禁止盲目重试。
|
|
30
|
+
- `P-PARTIAL-RESULT`:签约、服务和应用分支独立记录结果,不回滚已成功动作,不用整体失败或整体成功覆盖部分结果。
|
|
31
|
+
- `P-MATERIAL-CATEGORY`:每轮只展示一个材料类别,同类一次收齐;提前提供的后续材料直接接收并校验,之后不重复索取。
|
|
32
|
+
- `P-KEY-NO-PRIVATE`:不得请求、读取、处理、保存或输出生产应用私钥;本轮不提供本地命令生成密钥能力。
|
|
33
|
+
- `P-KEY-PUBLIC-USER`:应用公钥只能由用户自行生成并明确提供;缺少公钥时禁止调用 createKeyConfirmPage,不补全、不改写、不加 PEM 头尾。
|
|
34
|
+
- `P-AUTH-URL`:授权链接只能由 auth.sh 在固定产品/MCC 上下文校验通过后构造;只允许 https://aipay.alipay.com/cli-auth、deviceCode/productCode/mccCode 和可选 platform,禁止其他域名、路径、参数、重复参数、fragment 或 verification_url。
|
|
35
|
+
- `P-KEY-URL`:公钥确认只展示 createKeyConfirmPage 返回的 confirmPageUrl 裸 URL;禁止展示二维码链接和 alipays:// 深链。
|
|
36
|
+
- `P-URL-AUTO-OPEN`:授权页和公钥确认页在 URL 完整校验通过后默认调用受控 opener;失败、无 GUI 或宿主要求权限时保留同一裸 URL 和复制访问兜底。
|
|
37
|
+
- `P-KEY-TOOL-DOWNLOAD`:缺少应用公钥时按当前操作系统自动下载官方密钥工具并输出实际安装包路径、安装引导和官方文档兜底;只下载,不安装、不启动、不生成密钥,失败或系统不支持时只输出官方文档手动下载引导。
|
|
38
|
+
- `P-SENSITIVE-STATE`:用户可以为当前应用设钥明确提供应用公钥,但该输入只用于本次 app.sh key/verify-key/verify-key-and-audit 调用;Agent 回复、对话摘要、普通日志、跨会话状态和宽权限临时文件禁止复述或保存公钥原文。除 P-SANDBOX-CREDENTIAL-EXCEPTION 明确允许的 Windows 手工沙箱当前资料输入外,私钥、token、Payment-Proof、签名串、完整支付表单和未脱敏 MCP 响应同样禁止进入这些位置。临时 URL 只有在 flow 明确登记、已由脚本或 renderer 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。
|
|
39
|
+
- `P-CUSTOMER-OUTPUT-EXCLUSIVE`:flow 指定 renderer 或托管脚本时,其 stdout 是该动作唯一对客正文;工具输出记录、折叠面板或日志不等于已对客发送,Agent 必须把 stdout 原文作为当前回复正文发给用户。禁止在前后添加执行说明、消息 ID、控制标记、摘要、转述或近似话术。阻塞消息发出后立即停止本轮并等待用户。
|
|
40
|
+
- `P-ONBOARDING-CONTROL-CHANNEL`:Onboarding 登记脚本的内部事实行统一以 ALIPAY_AIPAY_INTERNAL: 开头;即使宿主合并 stdout/stderr,也必须整行剔除后再判断对客正文。内部行严禁对客;成功且剔除内部行后正文为空时直接转移,不补写话术。
|
|
41
|
+
- `P-SCAN-PAGE-DELIVERY-BARRIER`:所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障,当前包括 `auth.page` 和 `application.key.page`。脚本产生页面 stdout 后,Agent 必须先把剔除内部事实后的 stdout 作为独立对客消息送达,再执行对应 opener 和后续有限轮询;不得把后续 `auth.pending`、`application.key.pending`、`process.partial_result` 或其他 stdout 合并在同一条对客回复中。该屏障不等待用户确认,不新增确认或其他用户操作。
|
|
42
|
+
- `P-DETERMINISTIC-HANDOFF`:flow 已登记脚本或 renderer 时只执行动作发生位置的固定命令;退出码和登记终态标记满足后立即按 flow 转移,禁止追加 jq、cat、grep、curl 或临时脚本重复解析、复核或解释同一结果。失败只走登记恢复分支;项目代码实现和运行验证除外,但不得把沙箱配置或其他敏感文件打印到工具输出。
|
|
43
|
+
<!-- GENERATED:ONBOARDING-GUARDS:END -->
|
|
44
|
+
|
|
45
|
+
生成区块与 `SKILL.md` 红线适用于全部步骤。Onboarding 禁止修改用户项目代码或支付配置文件,只输出需由用户自行应用的配置;CLI 调用均由脚本设置 `PLATFORM`、`PLATFORM_ID`、`PRODUCT`;`aipay|webpay|apppay` 严格映射为 `AIPAY|WEBPAY|APPPAY`,`PRODUCT` 不进入 MCP 请求 JSON;禁止硬编码 `PLATFORM` 或分号拼环境变量。scope/MCC 不匹配只走 `auth.sh mismatch`;logout 未确认成功不得重授权;`AUTH_FLOW:RETRY_WITH_NETWORK` 或输出不可唯一解析只表示当前 Agent 执行环境无法确认结果,必须申请联网权限后重试同一条脚本命令,不得解释为用户本机 logout/login 失败或支付宝业务失败。签约 `request+ctx` 与应用/服务 `request` 由脚本冻结,禁止绕开脚本混用或重组。
|
|
46
|
+
|
|
47
|
+
### 标准消息执行规则
|
|
48
|
+
|
|
49
|
+
对客消息遵守 `SKILL.md` 并优先使用登记 runner/脚本。仅无托管入口时先查 schema,再用 `jq --arg/--argjson` 构造输入(无变量传 `{}`):
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
❌ 禁止:自动为用户生成公钥或密钥对
|
|
57
|
-
❌ 禁止:向用户表示可以"帮助生成公钥"、"帮助生成密钥对"
|
|
58
|
-
❌ 禁止:提供任何密钥生成代码、命令或脚本
|
|
59
|
-
❌ 禁止:请求、接收或处理用户的私钥信息
|
|
60
|
-
❌ 禁止:在用户未明确提供 publicKey 时调用 createKeyConfirmPage
|
|
61
|
-
❌ 禁止:自动生成、推断、补全、改写或添加前后缀到 publicKey
|
|
62
|
-
✅ 必须:引导用户前往支付宝开放平台官方密钥生成工具
|
|
63
|
-
✅ 必须:只接受用户明确输入的完整 publicKey
|
|
64
|
-
✅ 必须:提醒用户妥善保管私钥,切勿泄露给任何人
|
|
65
|
-
```
|
|
66
|
-
> 详见 `modules/app-release.md`
|
|
67
|
-
|
|
68
|
-
### 2. 用户项目文件修改铁律
|
|
69
|
-
```
|
|
70
|
-
❌ 禁止:直接修改用户项目中的 .ts / .tsx / .js 文件
|
|
71
|
-
❌ 禁止:修改 alipay-sdk-config.ts 或类似的支付配置文件
|
|
72
|
-
✅ 正确:输出配置内容让用户自行复制
|
|
73
|
-
✅ 正确:告知用户需要修改的文件路径和具体内容
|
|
51
|
+
```bash
|
|
52
|
+
node ../normal/scripts/render_customer_message.mjs --schema <messageId> --variant <VARIANT>
|
|
53
|
+
printf '%s' "$MESSAGE_INPUT_JSON" | node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIANT>
|
|
74
54
|
```
|
|
75
55
|
|
|
76
|
-
|
|
77
|
-
**本铁律适用于签约全流程所有需要输出引导话术的场景**
|
|
78
|
-
```
|
|
79
|
-
🚨 【强制】Agent 话术约束(最高优先级):
|
|
80
|
-
❌ 禁止:篡改各模块标准引导话术中的链接、格式或内容
|
|
81
|
-
❌ 禁止:添加标准话术中没有的内容(如"PEM格式"、"-----BEGIN PUBLIC KEY-----"等)
|
|
82
|
-
❌ 禁止:替换标准话术中的官方链接(如将 opendocs.alipay.com 替换为其他链接)
|
|
83
|
-
❌ 禁止:自行创造、补充、解释任何未见于标准话术的格式说明
|
|
84
|
-
✅ 必须:100% 复制使用各模块文档中的「标准引导话术」原文
|
|
85
|
-
✅ 必须:当需要补充说明时,只能引用官方文档链接
|
|
86
|
-
|
|
87
|
-
📌 典型反例:
|
|
88
|
-
❌ 错误:将 https://opendocs.alipay.com/common/02kipk 替换为 https://open.alipay.com/keytool
|
|
89
|
-
❌ 错误:在引导话术中添加"公钥以 -----BEGIN PUBLIC KEY----- 开头"
|
|
90
|
-
❌ 错误:自行解释"PEM格式"、"PKCS#1/PKCS#8"等格式概念
|
|
91
|
-
```
|
|
92
|
-
> 详见各模块文档中的「标准引导话术」
|
|
56
|
+
托管消息禁止改为临时 `jq+renderer`。失败停步且不手写兜底;stdout 和阻塞规则按 `SKILL.md` 执行。
|
|
93
57
|
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
✅ 必须:在每个 alipay-cli 调用前设置 PLATFORM 环境变量
|
|
97
|
-
✅ 必须:DEV_TOOL_NAME 由脚本公共初始化获得,缺失时填 "unknown"
|
|
98
|
-
❌ 禁止:省略 PLATFORM 环境变量直接调用 alipay-cli
|
|
99
|
-
❌ 禁止:硬编码 PLATFORM 值(如 PLATFORM=claudeCode)
|
|
100
|
-
❌ 禁止:使用分号 ; 连接(可能导致环境变量泄露)
|
|
101
|
-
```
|
|
58
|
+
**工作目录**:本文 Skill 相对命令以 `references/onboarding/` 为 workdir。Onboarding 不改用户项目;检查本机路径时显式传规范化绝对路径,不得切换到启动目录、用户项目或另一份 Skill。
|
|
102
59
|
|
|
103
|
-
###
|
|
104
|
-
**CLI 的 `login` 命令返回 `verification_url` 字段,此链接无法用于授权,禁止透出给用户!**
|
|
105
|
-
```
|
|
106
|
-
❌ 禁止透出:https://opengw.alipay.com/oauth/device(此链接无法授权)
|
|
107
|
-
✅ 正确链接:https://aipay.alipay.com/cli-auth?deviceCode=xxx&productCode=xxx&mccCode=xxx(可选追加 platform=xxx)
|
|
108
|
-
✅ 必须:先单独提示“无法跳链时,请复制下方链接到网页浏览器打开”,授权链接独占下一行
|
|
109
|
-
```
|
|
110
|
-
> 详见 `modules/authorization.md`
|
|
60
|
+
### 耗时事件规则
|
|
111
61
|
|
|
112
|
-
|
|
113
|
-
**返回结果中禁止展示二维码链接和 `alipays://` 协议链接,只展示 `confirmPageUrl` 的 Markdown 链接。**
|
|
114
|
-
```
|
|
115
|
-
❌ 禁止展示:二维码提示、alipays:// 协议链接
|
|
116
|
-
✅ 必须:将 confirmPageUrl 以 Markdown 链接格式输出
|
|
117
|
-
✅ 必须:先单独提示“无法跳链时,请复制下方链接到网页浏览器打开”,确认链接独占下一行
|
|
118
|
-
✅ 必须:等待用户确认后再继续后续步骤
|
|
119
|
-
```
|
|
120
|
-
> 详见 `modules/app-release.md`
|
|
62
|
+
`start-run` 已确定 `run_id`。各 stage 由 loader、标准消息和动作 runner/script 自动异步记录;Agent 不手工执行 `telemetry.mjs stage`。遥测关闭、落盘、网络或上传失败不改变 stdout、退出语义和 flow 转移;内部行禁止对客。实现与诊断细节按需读取 `../normal/telemetry.md`。
|
|
121
63
|
|
|
122
|
-
|
|
123
|
-
**当检测到授权范围不满足时,必须执行 logout 退出登录,然后重新授权。**
|
|
124
|
-
```
|
|
125
|
-
❌ 禁止:检测到授权范围不满足后继续执行后续操作
|
|
126
|
-
❌ 禁止:不执行 logout 直接重新登录
|
|
127
|
-
✅ 必须:检测到后先 logout 再重新授权
|
|
128
|
-
✅ 必须:重新授权时使用正确的 scope(根据当前 salesCode 确定)
|
|
129
|
-
```
|
|
130
|
-
> 详见 `modules/authorization.md` §8.1:检测脚本只返回不匹配信号并停止当前操作;`modules/scripts/auth.sh mismatch` 统一执行一次 logout,再使用正确 scope 发起重新授权
|
|
64
|
+
---
|
|
131
65
|
|
|
132
|
-
|
|
133
|
-
**执行任何模块操作前,必须读取当前操作对应的 references 章节并覆盖该分支的完整参数、约束和错误处理,禁止凭记忆执行;无关产品和尚未进入的写操作章节不提前读取。**
|
|
134
|
-
```
|
|
135
|
-
✅ 签约查询/提交前 → 分别读取 modules/product-sign.md 中对应章节
|
|
136
|
-
✅ 应用查询/复用/创建/提审前 → 分别读取 modules/app-release.md 中对应章节
|
|
137
|
-
✅ 服务查询/复用/创建/修改前 → 分别读取 modules/service-registration.md 中对应章节
|
|
138
|
-
✅ 登录授权前 → 读取 modules/authorization.md 中当前授权操作所需章节
|
|
139
|
-
❌ 禁止:不读文档直接调用任何 MCP 方法
|
|
140
|
-
❌ 禁止:凭记忆猜测或推断 MCP 方法名、参数名、参数结构
|
|
141
|
-
❌ 禁止:自行编造文档中不存在的 MCP 方法
|
|
142
|
-
```
|
|
66
|
+
## 二、主流程
|
|
143
67
|
|
|
144
|
-
### 9. MCP调用铁律
|
|
145
|
-
**签约/查询模块与应用/服务模块的参数结构完全不同,禁止混用!**
|
|
146
68
|
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
❌ 禁止:将应用发布模块的无 ctx 习惯带入签约模块
|
|
151
|
-
❌ 禁止:省略 ctx:{}(签约模块)
|
|
152
|
-
❌ 禁止:添加 ctx(应用/服务模块)
|
|
69
|
+
Step 1: 方案规划 → Step 2: 环境检查 → Step 3: 登录授权
|
|
70
|
+
→ Step 3.1: 三分支只读发现 → Step 4: 分支摘要与分类材料
|
|
71
|
+
→ Step 5: 独立分支推进 → Step 6: 分支级收口
|
|
153
72
|
```
|
|
154
73
|
|
|
155
|
-
###
|
|
156
|
-
```
|
|
157
|
-
✅ 必须:没有确定依据时明确说明无法确认
|
|
158
|
-
✅ 签约、费率、额度解限、可收款时间解限等不确定问题 → 引导用户前往支付宝商家平台咨询客服
|
|
159
|
-
✅ 代码集成、应用创建、应用发布等不确定问题 → 引导用户前往支付宝开放平台或支付宝技术支持咨询客服
|
|
160
|
-
❌ 禁止:猜测签约审核规则、额度解限条件、可收款时间、费率优惠、应用创建限制或接口能力
|
|
161
|
-
```
|
|
74
|
+
### 启动前材料预告与分流
|
|
162
75
|
|
|
163
|
-
|
|
76
|
+
先确定唯一产品;未确定时只澄清业务场景,不一次展示三产品材料。进入 Step 1 后简短预告当前产品的条件材料,不要求用户确认齐备;登录查询后先展示三分支短摘要,再一次只收集一个可推进类别。`full_process` 固定在 integration 完成后进入本流程,进入前不展示或收集签约材料。
|
|
164
77
|
|
|
165
|
-
|
|
78
|
+
**执行规则**:
|
|
79
|
+
- 网站支付或 APP 支付确定为 `NOT_SIGNED` 且签约页面材料尚不存在时,只把签约分支置为 `WAITING_USER`;服务/应用分支仍按自身条件推进。`onboarding_only` 不得因此修改项目或切换意图,只在收口时提醒仍需代码开发。若页面和支付能力已存在、仅缺首页、商品页、支付页图片,则在签约材料类别收集并上传;已签约时不再要求这组图片。
|
|
80
|
+
- 截图要求以“支付页”为准;支付页指展示支付宝付款方式,等待用户去支付的页面,不得自行改口为“支付成功页”或要求用户提供文档未定义的页面。
|
|
81
|
+
- `full_process` 按 `../normal/full-process-routing.md` 的完整接入编排先完成 Integration 的实际修改与校验,再进入本流程;不得提前登录、查询或收集产品开通材料。
|
|
166
82
|
|
|
167
83
|
---
|
|
168
84
|
|
|
169
|
-
|
|
85
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:END -->
|
|
170
86
|
|
|
171
|
-
|
|
87
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:START -->
|
|
88
|
+
进入任何产品开通环境检查、产品/MCC 澄清或方案确认前,先从本 flow 目录执行一次确定性平台入口:
|
|
172
89
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
| 网站支付 | webpay | I1080300001000041203 | app:all,fast_instant_trade_pay:write | 需要3张网站截图 |
|
|
177
|
-
| APP支付 | apppay | I1080300001000041313 | app:all,auth_alipay_apppay:write | 未签约时需要 APP 名称和3张APP界面截图,签约状态固定按 `OFFLINE` 提交;选择新建应用时在 Step 4 前置采集移动平台信息,Step 5.3 才用于创建 |
|
|
90
|
+
```bash
|
|
91
|
+
node ../normal/scripts/onboarding_message_runner.mjs platform-entry
|
|
92
|
+
```
|
|
178
93
|
|
|
179
|
-
|
|
94
|
+
- Windows:runner stdout 是唯一对客正文,必须原文发送;发送后停止本 flow 的产品开通动作,不再执行 Step 1、MCC 澄清、方案确认、登录或材料收集。`onboarding_only` 在根意图识别后进入本 flow 即执行;`full_process` 保留已完成的 Integration 实际结果,在衔接本 flow 时执行。
|
|
95
|
+
- 非 Windows:runner 成功且 stdout 为空,直接继续下方既有流程,不输出平台提示,不改变步骤、确认或完成条件。
|
|
96
|
+
- 命令失败或输出无法唯一判断时停止并核对 runner,禁止手写、改写或补发近似引导。
|
|
180
97
|
|
|
181
|
-
|
|
98
|
+
企业账号边界:如果用户明确表示当前要用企业账号通过 Skill 完成产品开通,必须执行下列标准消息命令并停止本 flow 的产品开通动作,引导前往支付宝商家平台。不得主动增加账号类型确认,也不得根据 MCC、营业执照字段或“公司”等泛化描述推断为企业账号;没有明确依据时继续按本 flow 执行。
|
|
182
99
|
|
|
100
|
+
```bash
|
|
101
|
+
printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs onboarding.enterprise.unsupported --variant <ONBOARDING_ONLY|FULL_PROCESS>
|
|
183
102
|
```
|
|
184
|
-
Step 1: 环境检查 → Step 2: 方案规划 → Step 3: 登录授权
|
|
185
|
-
→ Step 3.1: 状态与资源查询 → Step 4: 一次性资料与资源决策
|
|
186
|
-
→ Step 5: 入驻推进 → Step 6: 本轮流程收口
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### 启动前材料预告与分流
|
|
190
|
-
|
|
191
|
-
进入 onboarding 后才预告可能需要的材料,不在登录前要求用户确认材料齐备。签约材料以“一、产品映射”为准,新建应用的条件资料以 Step 4“应用分支”为准;登录查询实际状态后再一次性收集当前分支所需材料。`full_process` 在主编排的项目/集成状态检查阶段以及 integration 阶段均不得提前读取或展示本节材料。
|
|
192
103
|
|
|
193
|
-
|
|
104
|
+
`onboarding_only` 固定使用 `ONBOARDING_ONLY`;`full_process` 只会在代码开发已通过后进入本 flow,固定使用 `FULL_PROCESS`。renderer stdout 是该意图的最终产品开通消息,必须把 stdout 原文作为当前回复正文发给用户;命令面板、折叠输出或“已渲染/已展示”说明不能替代对客消息。发出 stdout 原文后直接停止本 flow,不再执行 Step 6 或追加第二份收口。
|
|
194
105
|
|
|
195
|
-
|
|
106
|
+
## 一、产品映射
|
|
196
107
|
|
|
197
|
-
|
|
198
|
-
- 产品尚未明确时使用上述话术;产品已明确时不再展示三产品通用话术,Step 2 只预告当前产品的条件材料。两种情况都不得在 Step 3.1 查询前要求用户提交或确认全部材料。
|
|
199
|
-
- `full_process` 在进入 onboarding 前必须已经确定目标产品,因此不得使用“产品尚未明确”的三产品通用材料话术,只展示当前目标产品的签约信息。
|
|
200
|
-
- 网站支付或 APP支付确定为 `NOT_SIGNED` 且尚未完成支付页面或支付能力集成时,暂停签约写操作,切换到集成流程。“尚未完成”的依据仅限:`full_process` 用户明确更正统一分流确认中的集成状态;`onboarding_only` 用户明确声明目标产品尚未完成集成;或 Agent 按 `../../SKILL.md` 的目标项目检查规则重新检查项目代码后取得直接证据。用户声明必须标注为“用户声明”,不得表述为代码检测结果;签约状态、应用列表和服务列表只说明 onboarding 资源状态,不能单独证明代码未集成。若页面和支付能力已存在、仅缺签约申请需要上传的首页、商品页、支付页图片,则保留在 Step 4 收集并上传,不进入集成流程;已签约时不再为签约要求这组图片。
|
|
201
|
-
- 截图要求以“支付页”为准;不得自行改口为“支付成功页”或要求用户提供文档未定义的页面。
|
|
202
|
-
- `full_process` 按 `../../SKILL.md` 的“完整接入编排”完成二维项目状态判断和统一分流确认;只有用户确认所选项目为 `TARGET_COMPLETE`,或本轮 integration 全部完成后才能进入 onboarding。进入后复用已经取得的实际材料,不重复询问。
|
|
108
|
+
> 术语说明:本 Skill 对客统一使用“AI 网页应用收款”,覆盖电脑网页和手机浏览器网页/H5 场景;“网站支付”“电脑网站支付”“PC网站支付”“手机网站支付”“H5支付”均作为输入别名映射到同一产品。签约 payload 中的 `appType=PC_WEB` 是接口字段名,不代表只能用于 PC 端网页。
|
|
203
109
|
|
|
204
|
-
|
|
110
|
+
| 产品 | productType | CLI `PRODUCT` | salesCode | scope | 资料采集要求 |
|
|
111
|
+
|------|-------------|---------------|-----------|-------|-------------|
|
|
112
|
+
| AI 按量付费 | aipay | AIPAY | I1080300001000160457 | app:all,machine_pay:write,agmnt:write | 无需截图 |
|
|
113
|
+
| AI 网页应用收款 | webpay | WEBPAY | I1080300001000041203 | app:all,fast_instant_trade_pay:write | 需要3张网站截图 |
|
|
114
|
+
| AI 移动应用收款 | apppay | APPPAY | I1080300001000041313 | app:all,auth_alipay_apppay:write | 未签约时需要 APP 名称和 3 张 APP 界面截图,签约状态固定按 `OFFLINE` 提交;选择新建应用时在 Step 4 前置采集移动平台信息,Step 5.3 才用于创建 |
|
|
205
115
|
|
|
206
116
|
## 三、Step 详解
|
|
207
117
|
|
|
208
|
-
### Step 1:
|
|
118
|
+
### Step 1: 方案规划
|
|
209
119
|
|
|
210
|
-
|
|
211
|
-
- `../normal/alipay-cli-env.md` - alipay-cli 检测、安装、验证规范
|
|
120
|
+
**产品匹配规则**:
|
|
212
121
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
122
|
+
| 场景关键词 | 推荐产品 |
|
|
123
|
+
|-----------|----------|
|
|
124
|
+
| AI、智能体、大模型、Agent、MCP | AI 按量付费 |
|
|
125
|
+
| 网站、网页、PC、电脑、电商、商城、H5 | AI 网页应用收款 |
|
|
126
|
+
| APP、应用内支付、手机 APP | AI 移动应用收款 |
|
|
216
127
|
|
|
217
|
-
|
|
218
|
-
1. 检查 alipay-cli 是否安装,未安装则自动安装
|
|
219
|
-
2. 确认 AI 编程工具检测脚本可用;签约脚本执行时会通过公共初始化设置 DEV_TOOL_NAME
|
|
220
|
-
3. 有任务工具时创建7个任务:环境检查、方案规划、登录授权、状态与资源查询、一次性资料与资源决策、入驻推进、本轮流程收口;没有 `TaskCreate` / `TaskUpdate` 时,不在本步骤单独输出待办,直接把 Step 2 一次性方案确认中的完整待办作为用户可见清单并在后续更新
|
|
221
|
-
4. 初始化内存状态
|
|
128
|
+
产品能够从用户已提供的产品名称或业务描述中可靠映射时直接使用,不重复询问。仍无法唯一确定时,只执行下列固定消息命令;renderer stdout 是本轮唯一对客正文,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止并等待用户回复产品名称或明确业务描述。回复后仍无法唯一确定时继续执行同一消息,禁止自由补问或推定产品。
|
|
222
129
|
|
|
223
|
-
|
|
130
|
+
```bash
|
|
131
|
+
printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs product.clarify --variant DEFAULT
|
|
132
|
+
```
|
|
224
133
|
|
|
225
|
-
|
|
134
|
+
产品明确后,若用户尚未提供经营描述或已知 MCC,只执行 `node ../normal/scripts/onboarding_message_runner.mjs mcc-clarify --product-type "$PRODUCT_TYPE"`,把 stdout 原文作为当前回复正文发给用户并停止本轮。`mcc-clarify` 只用于首次缺少检索输入;用户已经提供任何可检索描述后不得再次调用。
|
|
226
135
|
|
|
227
|
-
|
|
228
|
-
- `modules/mcc-reference.md` - MCC类目参考表
|
|
136
|
+
已有经营描述或明确类目时,将其作为 `MCC_SEARCH_QUERY` 执行唯一的本地确定性解析入口;该命令不调用远程服务:
|
|
229
137
|
|
|
230
|
-
|
|
138
|
+
```bash
|
|
139
|
+
node ../normal/scripts/onboarding_message_runner.mjs mcc-resolve --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE"
|
|
140
|
+
```
|
|
231
141
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
| 网站、网页、PC、电脑、电商、商城、H5 | 网站支付 |
|
|
236
|
-
| APP、应用内支付、手机APP | APP支付 |
|
|
142
|
+
只接受唯一 `ALIPAY_AIPAY_INTERNAL:MCC_RESOLUTION=<json>`:`matchType=UNIQUE` 时必须恰有一条候选,复用同一行 `mccCode/mccName/qualification`,且剔除内部行后 stdout 为空;`MULTIPLE` 时 runner stdout 已直接渲染固定候选消息,必须原文发送并停止,等待用户回复序号、MCC 二级类目名称或编码;`NONE` 时 runner stdout 已直接渲染独立 `onboarding.mcc.no_match`,必须原文发送并停止。禁止再次调用旧的 `mcc-search`/`mcc-candidates` 组合、自由拼候选表、解释、示例或“是否继续”等近似问法。
|
|
143
|
+
|
|
144
|
+
用户回复序号时,只能映射到上一条 `mcc-resolve` stdout 中同一份候选表的对应行,并把该行完整 MCC 编码作为新的 `MCC_SEARCH_QUERY` 再执行同一 `mcc-resolve`;用户回复 MCC 二级类目名称、编码或新的经营描述时也自动作为新查询执行同一入口。只有新结果为 `UNIQUE` 才继续方案确认;`MULTIPLE|NONE` 继续使用 runner 本次真实 stdout。无需固定重试口令,不得猜测或追加近似候选。
|
|
237
145
|
|
|
238
146
|
产品确定后,`salesCode`、`scope` 和材料要求统一取自“一、产品映射”,禁止在本步骤另建映射或改写固定值。
|
|
239
147
|
|
|
240
148
|
**MCC类目**:
|
|
241
|
-
-
|
|
149
|
+
- 正常唯一命中使用 runner 返回的表内原值;只有非唯一命中才按需读取 `modules/mcc-reference.md`
|
|
242
150
|
- 示例:互联网综合电商平台 (A0002_B0114)
|
|
243
151
|
- mccCode 格式:`Axxxx_Bxxxx`
|
|
244
152
|
|
|
@@ -249,245 +157,449 @@ Step 1: 环境检查 → Step 2: 方案规划 → Step 3: 登录授权
|
|
|
249
157
|
1. 产品名称、`salesCode` 和授权 `scope`。
|
|
250
158
|
2. MCC 名称与编码。
|
|
251
159
|
3. 当前产品在“未签约”或“需要新建应用”时可能需要的条件材料;不在状态查询前要求用户确认材料齐备状态。
|
|
252
|
-
4.
|
|
253
|
-
|
|
160
|
+
4. 固定展示企业账号暂不支持通过 Skill 完成产品开通,并引导前往支付宝商家平台;这只是边界预告,不新增账号类型问题。用户已经明确表示使用企业账号时不得继续展示可确认方案,改走入口处的停止分支。
|
|
161
|
+
|
|
162
|
+
方案确认必须使用 `../normal/json/customer-messages.json` 的 `onboarding.plan.confirm` 当前产品变体,并执行下列命令渲染;`<VARIANT>` 只能是 `AIPAY`、`WEBPAY` 或 `APPPAY`。三个变体都固定展示企业账号边界和支付宝商家平台链接,不得删减或改写。MCC 名称、编码和特殊资质必须逐字来自 runner 唯一命中或 `mcc-reference.md` 的同一行,并通过 renderer 交叉校验;特殊资质为 `-` 时固定显示“当前类目参考表未列出”,不得解释为企业/个人资格结论。禁止自由补充主体资格、营业执照、审核规则或其他模板未列出的前提。用户明确表示企业账号要通过 Skill 完成产品开通时,改用 `onboarding.enterprise.unsupported` 并停止产品开通,不得继续生成授权或收集材料。用户要求修改产品或 MCC 时重新渲染完整摘要;旧回复失效。字段齐备后不得先输出产品判断、材料预告、企业账号提示或待办;renderer stdout 是 Step 1 唯一对客消息,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止本轮。
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
166
|
+
--arg mccCode "$MCC_CODE" \
|
|
167
|
+
--arg mccName "$MCC_NAME" \
|
|
168
|
+
--arg mccQualification "$MCC_QUALIFICATION" \
|
|
169
|
+
'{mccCode:$mccCode,mccName:$mccName,mccQualification:$mccQualification}')
|
|
170
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
171
|
+
| node ../normal/scripts/render_customer_message.mjs onboarding.plan.confirm --variant <VARIANT>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
产品无法可靠识别时只使用上方 `product.clarify`;产品明确但尚无 MCC 检索输入时只使用一次 `mcc-clarify`;已有检索输入后统一使用 `mcc-resolve`,由 runner 直接返回唯一事实、候选或 `onboarding.mcc.no_match`。产品与 MCC 都明确后才进入方案确认。用户已经明确提供的信息不得重复询问,但未经用户明确确认不得执行 `login`。登录后必须先执行 Step 3.1 的只读查询,再根据实际结果收集签约、服务和应用分支的必要资料。
|
|
175
|
+
|
|
176
|
+
**阻塞规则(执行约束,不是对客正文)**:必须等待用户明确确认产品、MCC 和授权范围。确认信息有误时先更新并重新渲染标准消息;`full_process` 的项目状态回答、代码开发确认和服务声明确认均不能替代本确认。已经取得材料时继承实际图片引用、APP 名称、缺失项和校验结果,不重复采集,但仍需完成本步骤确认。缺少实际入参或校验证据时必须补齐;产品或 MCC 变化后旧回复失效。
|
|
177
|
+
|
|
178
|
+
`full_process` 的完整接入启动确认不能替代本确认;MCC 或产品变化后必须重新确认。收到回复后执行 `node ../normal/scripts/interaction_reply.mjs confirm --reply "$USER_REPLY"`;只有唯一 `REPLY_DECISION=CONFIRMED` 表示确认,否定、疑问、取消、修改意见和无法唯一判断的回复按问题、修改或补充处理。`1`、`继续`、`继续推进`、`好了`、`确认`、`OK` 等登记的明确肯定表达语义等价。
|
|
254
179
|
|
|
255
|
-
|
|
180
|
+
当前方案的回复通过统一判定器后,执行 `node ../normal/scripts/flow_loader.mjs onboarding execute --product-type "$PRODUCT_TYPE"` 加载 Step 2/3;该 loader 自动记录 `onboarding.user_confirmed`。禁止直接跳到环境检查、授权或发现查询。
|
|
256
181
|
|
|
257
|
-
|
|
182
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:END -->
|
|
258
183
|
|
|
259
|
-
|
|
184
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_EXECUTE:START -->
|
|
185
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.user_confirmed -->
|
|
186
|
+
### Step 2: 环境检查
|
|
187
|
+
|
|
188
|
+
用户对 Step 1 当前方案的回复通过统一肯定语义判定后,先进入本 flow 的 `execute` 阶段;阶段 loader 自动记录 `onboarding.user_confirmed`。随后从本 flow 目录执行只读检查:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
bash ../normal/scripts/alipay_cli_env.sh check --product-type "$PRODUCT_TYPE"
|
|
192
|
+
```
|
|
260
193
|
|
|
261
|
-
|
|
194
|
+
- 唯一 `CLI_ENV:READY`:直接进入 Step 3,不读取完整安装文档。
|
|
195
|
+
- `CLI_ENV:NEEDS_SETUP`:此时才读取 `../normal/alipay-cli-env.md`,按其现有安装、PATH、联网权限和验证规则补齐缺失项,再重跑同一检查;未取得 `READY` 不得进入 Step 3。
|
|
196
|
+
- 其他输出、非 0 或 marker 冲突:停在本步骤核对脚本,不得猜测环境已就绪。
|
|
197
|
+
|
|
198
|
+
签约脚本仍通过 `error_handler.sh -> common.sh` 初始化 `DEV_TOOL_NAME`、`PLATFORM`、当前 `run_id` 对应的 `PLATFORM_ID` 和当前产品对应的 `PRODUCT`。有任务工具时只在内部记录实际阶段,不手工维护任务数量;只保留当前对话所需最小上下文,不创建业务进度文件。
|
|
199
|
+
|
|
200
|
+
本步骤成功时不输出“环境检查完成”“任务已创建”等对客消息,直接进入 Step 3;只有安装失败、权限不足或缺少必需工具时才输出实际问题和恢复动作。工具能力差异不得导致任务、步骤或完成状态被省略。
|
|
262
201
|
|
|
263
202
|
### Step 3: 登录授权
|
|
264
203
|
|
|
265
|
-
|
|
266
|
-
- `modules/authorization.md` - 登录授权模块
|
|
204
|
+
用户确认方案后只调用本节 `auth.sh init|open|wait|confirm|mismatch` 命令;脚本异常需要核对授权业务语义时才读取 `modules/authorization.md`。禁止直调 `alipay-cli login`、解析原始输出或展示 `verification_url`。
|
|
267
205
|
|
|
268
|
-
|
|
269
|
-
|
|
206
|
+
取得当前方案摘要的有效肯定确认后,`execute` 阶段 loader 已记录 `onboarding.user_confirmed`;`auth.sh init` 会在固定授权上下文机器校验通过、开始授权业务动作前记录 `onboarding.auth.start`。两者都不替代登录、scope 或 MCC 完成条件,不得另行执行 telemetry 命令造成重复事件。
|
|
207
|
+
|
|
208
|
+
这些脚本是联网命令,首次执行即按 `../normal/alipay-cli-env.md` 申请权限。`AUTH_FLOW:RETRY_WITH_NETWORK` 只表示当前执行环境无法确认结果:取得权限后重试同一完整命令,不得解释为用户本机或支付宝业务失败,也不得改为手工 logout/login。
|
|
270
209
|
|
|
271
|
-
|
|
210
|
+
Step 1 的方案确认和 Step 2 的环境 READY 都是授权前置;产品或 MCC 未有效确认、环境未就绪时禁止 login,`full_process` 也不得绕过。
|
|
211
|
+
|
|
212
|
+
`auth.sh init --defer-open` 和本节登记的 `app.sh key` 命令先校验 URL 并输出页面说明;Agent 把 stdout 原文作为独立对客消息送达后,立即执行对应 open 子命令使用受控 opener,不新增确认。具体中性文案和兜底见对应模块,不改变 MCP 契约。
|
|
272
213
|
|
|
273
214
|
**完整流程**:
|
|
274
215
|
```
|
|
275
|
-
1. bash modules/scripts/auth.sh init --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
276
|
-
├─ AUTH_FLOW:SKIP →
|
|
277
|
-
├─ AUTH_FLOW:
|
|
278
|
-
├─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH →
|
|
216
|
+
1. bash modules/scripts/auth.sh init --defer-open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
217
|
+
├─ AUTH_FLOW:SKIP → 进入 Step 3.1并复用合法签约查询事实
|
|
218
|
+
├─ AUTH_FLOW:READY_TO_OPEN → 输出非阻塞授权页,执行第 2 项
|
|
219
|
+
├─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH → 执行第 4 项
|
|
220
|
+
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
279
221
|
└─ AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止进入 Step 3.1
|
|
280
|
-
2. 仅 AUTH_FLOW:
|
|
281
|
-
|
|
282
|
-
├─ AUTH_FLOW:
|
|
283
|
-
├─
|
|
222
|
+
2. 仅 AUTH_FLOW:READY_TO_OPEN:把 init 的 stdout 原文作为独立对客消息送达后,立即执行 bash modules/scripts/auth.sh open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME";open 无对客 stdout,打开失败不影响已交付 URL。随后执行 bash modules/scripts/auth.sh wait --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
223
|
+
├─ open 返回 AUTH_FLOW:CONTEXT_MISMATCH → 不执行 wait;使用当前已确认的完整参数重新执行第 1 项
|
|
224
|
+
├─ open 返回 AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止执行 wait 或进入 Step 3.1
|
|
225
|
+
├─ open 返回 AUTH_OPEN:OPENED|OPEN_FAILED|GUI_UNAVAILABLE|LINK_ONLY → 继续执行 wait;后 3 种只表示 opener 结果,不影响已交付 URL
|
|
226
|
+
├─ 最多 12 次、间隔 5 秒;成功或过期立即停止
|
|
227
|
+
├─ AUTH_FLOW:AUTH_SUCCESS → 进入 Step 3.1并复用合法签约查询事实
|
|
228
|
+
├─ AUTH_FLOW:PENDING → 输出 auth.pending,等待用户明确表示扫码已完成
|
|
284
229
|
├─ AUTH_FLOW:EXPIRED → 重新执行第 1 项生成授权链接
|
|
230
|
+
├─ AUTH_FLOW:CONTEXT_MISMATCH → 当前动作未执行 login --complete/logout;使用当前已确认的完整参数重新执行第 1 项
|
|
231
|
+
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
285
232
|
├─ AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止进入 Step 3.1
|
|
286
|
-
└─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH →
|
|
287
|
-
|
|
288
|
-
|
|
233
|
+
└─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH → 执行第 4 项
|
|
234
|
+
3. 仅 PENDING 后把用户原始回复传给 `node ../normal/scripts/onboarding_recovery_runner.mjs auth-confirm --reply "$USER_REPLY" --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"`;runner 复用统一肯定语义判定(包括 `1`、“继续”“好了”“已完成”“OK”等),接受后只执行一次原 `auth.sh confirm`。否定、疑问、取消、修改意见或含糊输入返回内部拒绝且不得查询;成功后的转移同第 2 项,PENDING 继续等待且不重启轮询
|
|
235
|
+
4. bash modules/scripts/auth.sh mismatch --defer-open --scope "$SCOPE" --sales-code "$SALES_CODE" --mcc-code "$MCC_CODE" --product-name "$PRODUCT_NAME" --mcc-name "$MCC_NAME"
|
|
236
|
+
├─ AUTH_FLOW:READY_TO_OPEN → 输出非阻塞授权页并按第 2 项执行 open + wait
|
|
237
|
+
├─ AUTH_FLOW:CONTEXT_MISMATCH → 未执行 logout;使用当前已确认的完整参数重新执行第 1 项
|
|
238
|
+
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
239
|
+
└─ mismatch 统一 logout;成功后用正确 scope 重建授权页
|
|
289
240
|
```
|
|
290
241
|
|
|
291
|
-
|
|
242
|
+
`AUTH_FLOW:CONTEXT_MISMATCH` 适用于 `open|wait|confirm|mismatch` 的显式上下文与同一次 init 短时状态不一致;脚本必须在任何 `login --complete/logout` 前停止且不输出对客正文。Agent 不得忽略差异、改用旧状态继续或手工清理状态;必须立即用当前 Step 1 已确认的完整参数重新执行第 1 项。新的 init 先完成固定产品/MCC 机器校验,再安全替换旧短时状态;若 CLI 仍处于登录态,因为签约查询没有权威 MCC 字段,init 必须返回对应 `SCOPE_MISMATCH/MCC_MISMATCH` 并转第 4 项,不得返回 `SKIP`。CLI 未登录时直接生成当前上下文的新授权页。两种分支都不得复用旧 deviceCode 或新增用户确认。
|
|
243
|
+
|
|
244
|
+
`auth.page` 非阻塞并追加“扫码完成后请回到 Agent 对话页面”;`auth.pending` 仅由 wait 耗尽或单次 confirm 的 PENDING 渲染,其他对客终态由脚本渲染对应消息。自动轮询期间即使 `login --complete` 已返回可复核状态,只要 `whoami` 尚未取得有效本机登录态,也继续按 PENDING 处理并消耗本次 wait 预算,不输出断头失败文案。剔除 `ALIPAY_AIPAY_INTERNAL:` 内部行后的 stdout 是当前动作唯一对客正文;禁止再次调用 renderer、另写近似话术、输出 stderr 或内部行、重复转述。授权脚本明确返回链接过期时必须重建,旧回复失效。
|
|
292
245
|
|
|
293
246
|
授权 `scope` 统一使用“一、产品映射”中当前产品的固定值,禁止自行修改。
|
|
294
247
|
|
|
295
|
-
|
|
248
|
+
必须原样展示 init stdout,并在 login 前完成固定产品/MCC 上下文和 URL 逐项校验。禁止 CLI `verification_url`、非登记 URL 或要求用户输入确认码;这些正常路径约束均由本节命令和 `auth.sh` 托管,不为重复确认而读取模块。
|
|
296
249
|
|
|
297
250
|
#### Step 3.1: 状态与资源查询(登录授权后置检查)
|
|
298
251
|
|
|
299
252
|
**只读查询组**:登录成功后自动连续执行,不增加“是否查询”确认:
|
|
300
253
|
|
|
301
|
-
|
|
254
|
+
开始执行任一签约、应用或服务只读查询时,只使用本步骤登记的 discovery runner;runner 会在子查询启动前记录 `onboarding.discovery.start`,不得另行执行 telemetry 命令。
|
|
255
|
+
|
|
256
|
+
授权成功后执行全部适用只读查询,不增加确认。直接从本 flow 目录执行唯一 discovery runner;runner 在内部并发调用现有只读脚本、解析查询语义并隔离普通分支失败,正常成功路径不再预读 `product-sign.md`、`service-registration.md` 或 `app-release.md` 查询章节。不得拆回 Agent 手工并发、改写底层命令或自行合并 MCP:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# auth.sh 已提供合法可复用签约事实时,追加同一组 --reuse-sign-status/--reuse-sign-flow;否则不传。
|
|
260
|
+
node ../normal/scripts/onboarding_discovery_runner.mjs run --product-type "$PRODUCT_TYPE" --sales-code "$SALES_CODE" [--reuse-sign-status "$SIGN_STATUS" --reuse-sign-flow "$SIGN_FLOW"]
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
只接受唯一 `ALIPAY_AIPAY_INTERNAL:DISCOVERY_RESULT=<json>`。runner stdout 保留底层脚本已有的受控错误正文,并在没有全局授权阻断时追加原 `onboarding.discovery.summary` 标准正文;必须原文送达,不得手写、压缩或再次调用 `discovery-summary`。envelope 中每个分支只允许 `SUCCESS|QUERY_FAILED|NOT_APPLICABLE`:成功分支携带原脚本的确定状态和候选,失败不得伪装为空列表;存在 `global_blocker=AUTHORIZATION_INVALID` 时停止查询组,按 Step 3 重新授权,不进入 Step 4。
|
|
264
|
+
|
|
265
|
+
不存在全局授权阻断时,执行 `node ../normal/scripts/flow_loader.mjs onboarding branch-summary` 加载 Step 4 和三个分支共用的 Step 5 约束;共用区块只加载一次,不得整份读取后续 flow。
|
|
266
|
+
|
|
267
|
+
Step 5 直接使用对应 phase 的完整命令;仅出现脚本异常、需要解释登记业务语义或用户明确要求详情时读取当前分支模块,错误恢复时才读取 `error-handling.md`。不得提前加载其他分支,也不重复读取已经读过且未变化的章节。
|
|
302
268
|
|
|
303
|
-
1.
|
|
304
|
-
2.
|
|
305
|
-
3.
|
|
269
|
+
1. 签约:若本次成功的 `auth.sh init|wait|confirm` 内部事实同时且唯一包含 `AUTH_SIGN_QUERY_REUSABLE=true`、合法 `SIGN_STATUS` 和匹配当前产品的 `FLOW:*`,把后两项原样传给 runner 复用;三者缺失、冲突、重复或解析失败时不传复用参数,由 runner 执行原 `query_sign_status.sh` 完整命令。复用只省略同一请求的重复调用,不省略签约分支错误检测和状态处理。
|
|
270
|
+
2. 服务:仅按量付费由 runner 执行原 `service.sh list`;其他产品 envelope 固定为 `NOT_APPLICABLE`。成功候选只取 envelope 的 `service.candidates`。
|
|
271
|
+
3. 应用:runner 执行原 `app.sh list --product-type "$PRODUCT_TYPE" --sales-code "$SALES_CODE"`。成功候选和 `WEBAPP|MOBILEAPP` 只取 envelope 的 application 分支;不得宣称返回应用已与当前支付产品绑定。
|
|
306
272
|
|
|
307
|
-
> ⚠️ 脚本通过 `error_handler.sh` 间接初始化 `DEV_TOOL_NAME`;签约查询必须传入当前产品的 `--sales-code
|
|
273
|
+
> ⚠️ 脚本通过 `error_handler.sh` 间接初始化 `DEV_TOOL_NAME`、当前 `run_id` 对应的 `PLATFORM_ID` 和 CLI `PRODUCT`;签约查询必须传入当前产品的 `--sales-code` 和 `--product-type`(aipay|webpay|apppay)做一致性校验。AI 网页应用收款和 AI 移动应用收款使用不同 salesCode,禁止混用。
|
|
308
274
|
|
|
309
|
-
各适用查询仍是独立 CLI/MCP
|
|
275
|
+
各适用查询仍是独立 CLI/MCP 调用,runner 只编排现有脚本,必须分别完成原有错误检测,禁止伪造合并 MCP。失败后按错误类型处理:
|
|
276
|
+
|
|
277
|
+
所有内部事实行都必须以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并 stdout/stderr 时也逐行剔除。无前缀的相似文本不得作为流程事实;唯一字段缺失、重复或冲突时按结构异常处理。
|
|
310
278
|
|
|
311
279
|
- MCP 认证失败或产品/scope/MCC 授权不匹配:立即停止查询组,不再调用剩余查询;授权不匹配时调用 Step 3 的 `auth.sh mismatch`,由该命令统一 logout 并重新授权。重新授权后仅恢复尚未执行的查询,保留重新授权前已经成功取得且主体未变化的结果。若无法确认仍为同一账号主体,则重新执行全部适用查询。
|
|
312
280
|
- 单个业务失败、响应结构错误或 MCP 服务失败,但当前会话仍有效:把该分支标记为查询失败,继续其他不依赖该结果的只读查询,最后一次性输出“已取得结果 + 失败分支”摘要。不得把失败视为空列表;应用查询失败时禁止应用复用/创建,服务查询失败时禁止服务复用/新建/修改。
|
|
313
|
-
-
|
|
281
|
+
- 签约查询失败:只阻断签约分支;可继续应用/服务查询、候选展示、资源决策及其独立资料采集和写操作。不得推断签约状态,不得采集签约截图或签约所需 APP 名称,`signStatus` 和签约 `materialStatus` 保持未设置。签约查询恢复成功后,只有状态为 `NOT_SIGNED` 才进入签约材料类别。应用或服务查询失败也只阻断对应分支;认证失败、授权不匹配或无法确认登录主体一致时仍是全局阻断。
|
|
314
282
|
|
|
315
283
|
任何恢复都不得要求用户重交未变化且已验证的资料,也不得重做不受会话主体变化影响的成功步骤。
|
|
316
284
|
|
|
317
|
-
签约状态和 `FLOW:*` 映射只按
|
|
285
|
+
签约状态和 `FLOW:*` 映射只按 discovery runner 的签约 envelope 与共用 parser 结果执行:`SIGNED_EFFECTIVE` 与 `SIGN_SUBMITTED` 均禁止重复提交签约;`OTHER_STATUS` 不提交签约,只展示已确认结果和待核验项。Step 4 再根据脚本输出的实际状态收集签约材料并处理应用/服务候选。
|
|
286
|
+
|
|
287
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_EXECUTE:END -->
|
|
288
|
+
|
|
289
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_BRANCH_SUMMARY:START -->
|
|
290
|
+
### Step 4: 分支摘要与分类材料
|
|
291
|
+
|
|
292
|
+
Step 3.1 的 discovery runner 已在同一次 stdout 中展示签约、服务市场和应用发布摘要;网站支付和 APP 支付的服务市场固定为“无需处理”,查询失败显示“查询失败”。进入本阶段后只消费同一 `DISCOVERY_RESULT` envelope,禁止再次调用 `discovery-summary`、手写状态枚举或重复输出摘要。
|
|
318
293
|
|
|
319
|
-
|
|
294
|
+
随后按“签约 -> 服务 -> 应用”的默认顺序一次只处理一个实际适用且当前可推进的类别。三个适用分支均已处理,或其实际失败、未知、待生效、待审核和人工待办已经登记后,执行 `node ../normal/scripts/flow_loader.mjs onboarding closeout` 加载 Step 6;仍有可推进分支未处理时不得提前收口。
|
|
320
295
|
|
|
321
|
-
|
|
296
|
+
轮到某类别且即将执行其业务动作时,先执行对应 loader:签约用 `node ../normal/scripts/flow_loader.mjs onboarding signing --product-type "$PRODUCT_TYPE"`,仅按量付费服务用 `node ../normal/scripts/flow_loader.mjs onboarding service --product-type "$PRODUCT_TYPE"`,应用用 `node ../normal/scripts/flow_loader.mjs onboarding application --product-type "$PRODUCT_TYPE"`。loader 自动记录该分支 stage;未轮到或不适用的分支不得加载、不得记录。
|
|
297
|
+
|
|
298
|
+
轮到服务或应用类别时才执行对应 runner;其 stdout 一次生成候选事实和适用选择提示,是当前唯一对客正文。禁止提前展示、手工拼表、压缩为纯 ID、拆开渲染或改写:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# 仅按量付费,轮到服务类别时
|
|
302
|
+
printf '%s' "$SERVICE_CANDIDATES_JSON" \
|
|
303
|
+
| node ../normal/scripts/onboarding_message_runner.mjs service-candidates
|
|
304
|
+
|
|
305
|
+
# 轮到应用类别时
|
|
306
|
+
printf '%s' "$APP_CANDIDATES_JSON" \
|
|
307
|
+
| node ../normal/scripts/onboarding_message_runner.mjs application-candidates --application-type "$APPLICATION_TYPE"
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
空候选时直接进入新建资料分支;非空时发出 runner stdout 后等待当前候选允许的选择。
|
|
311
|
+
|
|
312
|
+
每次只展示一个类别的现状、选择和缺失字段;同一类别一次收齐,只补问缺失或校验失败字段。材料收集提示只允许通过 `onboarding_message_runner.mjs material-collect` 输出:签约分支传 `--category signing`,服务分支传 `--category service`,应用分支传 `--category application`。禁止直接调用 renderer 手写 `categoryName`、`currentStatus` 或 `missingFields`,也禁止使用 `签约资料` 等同义词、`mobilePlatform`、`网站支付签约截图` 等自由文本作为 renderer 入参;常见字段别名只能交给 runner 规范化。材料收集提示必须使用:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
# 当前分支先设置 MATERIAL_CATEGORY,只允许 signing|service|application
|
|
316
|
+
case "$CURRENT_STATUS" in
|
|
317
|
+
"待补充") MATERIALS_STATE="INITIAL" ;;
|
|
318
|
+
"部分已提供,待补充") MATERIALS_STATE="PARTIAL" ;;
|
|
319
|
+
"校验失败,需更正") MATERIALS_STATE="INVALID" ;;
|
|
320
|
+
*) echo "❌ 未知材料状态,停止渲染" >&2; exit 1 ;;
|
|
321
|
+
esac
|
|
322
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
323
|
+
--arg missingFields "$MISSING_FIELDS" \
|
|
324
|
+
'{missingFields:$missingFields}')
|
|
325
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
326
|
+
| node ../normal/scripts/onboarding_message_runner.mjs material-collect --category "$MATERIAL_CATEGORY" --state "$MATERIALS_STATE" --product-type "$PRODUCT_TYPE"
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
`INITIAL` 不展示内部状态;`PARTIAL` 固定使用“还需补充”;`INVALID` 固定使用“以下内容需要更正”。renderer 会校验变体与 `currentStatus` 一致,禁止 Agent 自由选用不匹配话术。
|
|
330
|
+
|
|
331
|
+
用户主动提前提供后续类别材料时立即接收并校验,写入对应类别的已验证材料集合;轮到该类别时不得要求重复提供,只回显校验结果并补问剩余字段。某类别被业务错误阻断时记录该分支恢复动作并继续下一个逻辑独立类别。签约状态尚未取得时,签约资料需求仍未知,不得提前采集签约资料,也不得阻止服务或应用类别推进。
|
|
322
332
|
|
|
323
333
|
**签约分支**:
|
|
324
334
|
|
|
325
335
|
- `NOT_SIGNED` 网站支付:一次收集首页、商品页、支付页 3 张截图。
|
|
326
|
-
- `NOT_SIGNED` APP支付:一次收集 APP 名称和首页、商品页、支付页 3 张截图,签约状态仍固定按 `OFFLINE` 提交。
|
|
336
|
+
- `NOT_SIGNED` APP 支付:一次收集 APP 名称和首页、商品页、支付页 3 张截图,签约状态仍固定按 `OFFLINE` 提交。
|
|
327
337
|
- `NOT_SIGNED` 按量付费:签约申请无需上传页面图片。
|
|
328
338
|
- `SIGNED_EFFECTIVE` / `SIGN_SUBMITTED`:不再为签约采集 APP 名称或截图,禁止重复提交签约。
|
|
329
339
|
|
|
330
340
|
**应用分支**:
|
|
331
341
|
|
|
332
|
-
-
|
|
333
|
-
-
|
|
334
|
-
- 列表确实为空或用户选择新建时,按量付费/网站支付一次说明应用公钥要求;APP支付一次收集 `mobilePlatform` 及对应的 `bundleId` / `appPackage` / `appSign`,并同时说明应用公钥要求。这些平台字段可在签约提交前采集和校验,但只能在 Step 5.3 创建应用时使用。
|
|
335
|
-
- 应用公钥原文只能由用户明确提供,不得生成、推断、改写或持久化到资料状态;可在资料状态中只记录“已准备/未准备”。未准备公钥不阻止应用创建,但创建后必须停在设置公钥阶段。
|
|
342
|
+
- `app.sh list` 只提供带统一前缀的内部候选事实;应用类别正文只能由上方 `application-candidates` runner 使用同一快照一次生成。`ON_LINE` 只接受完整 `appId` 或 `新建`;仅非上线候选时由用户选 `暂不新建` 或 `新建`。
|
|
343
|
+
- 列表确实为空或用户选择新建时,按量付费/网站支付一次说明应用公钥要求;APP 支付必须执行下方 `APP_MOBILE_INITIAL` 固定命令,一次展示三个可创建平台组合并要求用户在一条回复中提供所选组合全部资料,禁止先单独询问 `mobilePlatform`。iOS 对应内部值 `mobilePlatform=IOS` 和 `bundleId`,Android 对应 `mobilePlatform=ANDROID`、`appPackage`、`appSign`,iOS + Android 对应 `mobilePlatform=ALL` 及三项字段;这些内部名只用于参数映射,不得作为未解释的对客字段名。字段缺失时使用 `PARTIAL` 和中文字段名,校验失败时使用 `INVALID` 和中文字段名;已通过字段不得重复收集。这些字段可在签约提交前采集和校验,但只能在 Step 5.3 创建应用时使用。HarmonyOS 不收集或编造 `mobilePlatform`、审核材料或 MCP 字段,必须执行 `printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs application.harmony.manual_create --variant DEFAULT` 并等待当前消息后的明确肯定回复;回复先经 `interaction_reply.mjs` 校验,确认后重新查询 `MOBILEAPP` 列表。只有实际返回 `ON_LINE` 候选时进入复用路径,否则应用分支转为人工待办;该等待和待办都不阻断签约及其他事实明确的独立分支。
|
|
336
344
|
|
|
337
|
-
|
|
345
|
+
```bash
|
|
346
|
+
printf '%s' '{}' \
|
|
347
|
+
| node ../normal/scripts/onboarding_message_runner.mjs material-collect --category application --state APP_MOBILE_INITIAL --product-type "$PRODUCT_TYPE"
|
|
348
|
+
```
|
|
338
349
|
|
|
339
|
-
APP
|
|
350
|
+
APP 支付后续补充提示只允许以下对客字段名,并按用户所选平台计算缺失项:`iOS Bundle ID(bundleId)`、`Android 应用包名(appPackage)`、`Android 应用签名摘要(appSign)`。用户在同一条回复中主动提供应用公钥时直接接收并按公钥红线处理;未提供公钥不阻止创建应用。
|
|
351
|
+
- 应用公钥原文只能由用户明确提供,不得生成、推断或改写;输入只用于当前 `app.sh key/verify-key/verify-key-and-audit` 调用,Agent 不得复述或写入状态/日志。资料状态只记录“已准备/未准备”。未准备公钥不阻止创建,但创建后停在设钥阶段。
|
|
352
|
+
- 目标 `appId` 已确定但用户尚未准备公钥时,自动执行 `bash modules/scripts/download_key_tool.sh`。macOS/Windows 下载到当前用户可写的默认 Downloads 目录并在脚本内部使用 `key_tool.download.result` 展示实际安装包路径、安装引导和 `https://opendocs.alipay.com/isv/02kipk` 手动下载兜底;Linux、目录不可用、网络不可达、依赖缺失、跳转不可信或包校验失败时在脚本内部使用 `key_tool.download.fallback`。该脚本 stdout 是当前动作唯一对客正文,不输出 `DOWNLOADED`、`PATH=`、`DOWNLOAD_FAILED`、`DOWNLOAD_REASON` 等机器标记;只下载,不安装、不启动、不生成密钥。本地 OpenSSL 命令生成方式仍为待定,禁止输出或执行。
|
|
353
|
+
|
|
354
|
+
**应用候选选择铁律**:存在 `ON_LINE` 候选时只接受当前完整 `appId` 或 `新建`;仅有非上线候选时只接受 `新建` 或 `暂不新建`;列表为空时进入新建资料分支。禁止序号、历史候选或 Agent 自报 ID。复用后始终使用所选完整 ID;`新建` 即为创建确认,不追加回复 `1`。创建前重查列表并用 `application-recheck` 比较前后快照:stdout 为空且资料齐备时创建,非空时旧选择失效并原文发出后重新选择。
|
|
355
|
+
|
|
356
|
+
**按量付费服务分支**:列表为空时进入新建资料分支;存在候选时只接受当前完整 `serviceId`、`新建` 或 `修改:<当前serviceId>`,拒绝候选外 ID、序号、自由格式修改、Agent 自报或历史 ID。不额外按状态过滤,不单独渲染选择提示;用户可在选择新建/修改时同时提供完整五项资料。
|
|
357
|
+
|
|
358
|
+
APP 支付未签约时的签约字段:
|
|
340
359
|
| 字段 | 必填条件 | 说明 |
|
|
341
360
|
|------|----------|------|
|
|
342
361
|
| APP名称 | 必填 | 传入 `ar_sign_apply.sh --app-name` |
|
|
343
362
|
| APP界面截图 | 必填 | 3张截图,支持拖拽上传或提供本地文件路径,顺序为首页、商品页、支付页 |
|
|
344
363
|
|
|
345
364
|
**脚本**:
|
|
346
|
-
- `bash modules/scripts/upload_screenshots.sh <img1> <img2> <img3>` - 上传3张截图;用户可拖拽上传图片,Agent 将拖拽后的本地文件路径传给脚本
|
|
365
|
+
- `bash modules/scripts/upload_screenshots.sh --product-type "$PRODUCT_TYPE" <img1> <img2> <img3>` - 上传3张截图;用户可拖拽上传图片,Agent 将拖拽后的本地文件路径传给脚本
|
|
347
366
|
|
|
348
|
-
|
|
367
|
+
上传成功时只把脚本 stdout 的“截图上传成功”原文对客;从带统一前缀的 `SCREENSHOT_HOME_REF`、`SCREENSHOT_SHOP_REF`、`SCREENSHOT_PAY_REF` 内部事实按首页、商品页、支付页顺序记录三个图片引用,严禁对客展示这些引用或 `collect_information` 等内部状态。APP 支付同时保留已校验的 APP 名称。
|
|
349
368
|
|
|
350
|
-
### Step 5:
|
|
369
|
+
### Step 5: 产品开通推进
|
|
351
370
|
|
|
352
|
-
|
|
353
|
-
- `NOT_SIGNED`:读取 `modules/product-sign.md` 的签约提交、提交后推进和错误处理章节。
|
|
354
|
-
- 按量付费且处理服务:读取 `modules/service-registration.md` 中当前决策对应的收集、校验、提交或复用章节。
|
|
355
|
-
- 处理应用:读取 `modules/app-release.md` 中当前决策对应的复用、创建、公钥设置或提审章节。
|
|
356
|
-
- 已在 Step 3.1 读取且内容未变化的查询章节不重复读取;不适用的产品或分支不读取。
|
|
371
|
+
只加载当前实际推进的 `signing|service|application` phase;模块仅按上方异常/解释条件读取,已读且未变化的内容不重复读取。
|
|
357
372
|
|
|
358
|
-
|
|
373
|
+
签约状态为 `NOT_SIGNED` 时,材料缺失/错误继续使用 `materials.category.collect`,完整通过后直接执行 5.1,不增加回复 `1`。服务资料通过后展示非阻塞 `service.create.summary` 并创建;仅修改需要确认。应用创建复用当前候选后的“新建”选择;用户公钥按本节固定命令交给带当前 `--product-type` 的 `app.sh key` 生成官方页面,页面 stdout 独立送达后执行 `app.sh open-key-page`。新建应用在页面确认后按固定命令执行 `app.sh verify-key-and-audit`,复用最后一次成功密钥响应完成 guard 并提审,不增加回复 `1`。
|
|
359
374
|
|
|
360
|
-
|
|
375
|
+
服务创建信息固定使用 `../normal/json/customer-messages.json` 的 `service.create.summary`。该消息非阻塞,只传入即将提交的五项服务资料;renderer 成功后同一流程直接执行 5.2 创建命令。必须执行:
|
|
361
376
|
|
|
362
|
-
|
|
377
|
+
```bash
|
|
378
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
379
|
+
--arg serviceName "$SERVICE_NAME" \
|
|
380
|
+
--arg serviceDescription "$SERVICE_DESCRIPTION" \
|
|
381
|
+
--arg serviceUrl "$SERVICE_URL" \
|
|
382
|
+
--arg servicePricing "$SERVICE_PRICING" \
|
|
383
|
+
--arg serviceSchema "$SERVICE_SCHEMA" \
|
|
384
|
+
'{serviceName:$serviceName,serviceDescription:$serviceDescription,serviceUrl:$serviceUrl,servicePricing:$servicePricing,serviceSchema:$serviceSchema}')
|
|
385
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
386
|
+
| node ../normal/scripts/render_customer_message.mjs service.create.summary --variant DEFAULT
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
服务修改的外部写确认固定使用 `onboarding.write.confirm/SERVICE_UPDATE_ONLY`。`MESSAGE_INPUT_JSON` 必须由当前摘要字段通过 `jq -cn --arg` 构造,禁止手写拼接包含用户值的 JSON:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
393
|
+
--arg sessionSummary "$SESSION_SUMMARY" \
|
|
394
|
+
--arg subjectSummary "$SUBJECT_SUMMARY" \
|
|
395
|
+
--arg productName "AI 按量付费" \
|
|
396
|
+
--arg actionTypes "服务修改" \
|
|
397
|
+
--arg serviceId "$SERVICE_ID" \
|
|
398
|
+
--arg serviceName "$SERVICE_NAME" \
|
|
399
|
+
--arg serviceDescription "$SERVICE_DESCRIPTION" \
|
|
400
|
+
--arg serviceUrl "$SERVICE_URL" \
|
|
401
|
+
--arg servicePricing "$SERVICE_PRICING" \
|
|
402
|
+
--arg serviceSchema "$SERVICE_SCHEMA" \
|
|
403
|
+
'{sessionSummary:$sessionSummary,subjectSummary:$subjectSummary,productName:$productName,actionTypes:$actionTypes,serviceId:$serviceId,serviceName:$serviceName,serviceDescription:$serviceDescription,serviceUrl:$serviceUrl,servicePricing:$servicePricing,serviceSchema:$serviceSchema}')
|
|
404
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
405
|
+
| node ../normal/scripts/render_customer_message.mjs onboarding.write.confirm --variant SERVICE_UPDATE_ONLY
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
创建摘要和修改确认中的参数必须逐字来自本轮用户材料及即将执行的脚本参数;服务单价以 `service.sh validate` 输出的带统一前缀 `SERVICE_PRICING=<纯数字>` 内部事实为准并原样复用到 renderer 和 `service.sh save`,不得重新追加 `元/次` 或说明文字,模板会展示单位。修改确认的会话、脱敏主体和 `serviceId` 还必须来自本轮实际查询。renderer 必须拒绝 variant/动作不匹配、缺字段、多传无关字段、非按量付费服务修改、非法单价或非法 JSON。禁止加入未列动作。创建摘要不得要求用户回复或停止流程;修改时把用户原始回复交给 `node ../normal/scripts/interaction_reply.mjs confirm --reply "$USER_REPLY"`,唯一 `REPLY_DECISION=CONFIRMED` 后先核对摘要仍未变化,再执行固定修改命令。目标、参数、登录会话或主体变化时旧修改确认立即失效并重新展示。签约提交、服务创建、应用创建和应用提审不得使用 `onboarding.write.confirm` 重复确认。
|
|
363
409
|
|
|
364
|
-
|
|
410
|
+
脚本使用 `network_retry.sh` 时,业务错误只调用一次;网络/服务错误最多自动重试两次、每次间隔 3 秒。非幂等写结果为 `MAYBE_SENT` 时停止重试,使用现有只读查询核验;无法确认时明确输出未知结果,禁止盲目重复写入。自动重试预算耗尽后不立即询问“重试/退出”:记录失败动作、受影响分支和恢复方式,依赖允许时继续其他独立分支,并在 Step 6 一次收口所有仍未恢复的分支。
|
|
365
411
|
|
|
366
|
-
|
|
412
|
+
**阻塞规则(执行约束,不是对客正文)**:服务创建不进入阻塞确认;五项资料完整、格式校验通过且当前服务数量小于固定上限 `10` 后,展示 `service.create.summary` 并直接创建;达到 `10` 个时禁止调用保存方法。只有服务修改必须在同一有效登录会话、产品、动作和目标摘要后等待用户的明确肯定回复;`1` 只是快捷输入,`继续/确认/OK/好了` 等登记肯定表达语义等价。CLI 未返回主体标识时,标准摘要必须说明由用户确认当前登录账号就是操作目标。启动确认、其他目标或动作的确认、沉默和仅提供资料均不能替代修改确认。签约提交不进入本阻塞确认:只有签约状态为 `NOT_SIGNED` 且当前产品所需材料全部完整并校验通过时才直接执行,缺失或校验失败继续材料提示。应用创建只接受本轮当前候选列表后的明确 `新建` 选择,候选变化必须重新选择;本节登记的 `app.sh key` 命令仅生成公钥确认页,用户提供完整公钥后直接调用,页面 stdout 独立送达后执行 `app.sh open-key-page`,最终设置仍由用户在官方页面确认;新建应用的公钥校验成功后直接提审。登录会话、主体、产品、服务修改目标或关键金额变化时必须重新确认。服务修改确认 renderer stdout 是该动作唯一对客消息,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止本轮。
|
|
367
413
|
|
|
368
|
-
|
|
414
|
+
写失败或响应不明先按现有只读能力核验,禁止直接重复;尚不存在的 `appId`、公钥确认或审核结果不能提前授权。
|
|
369
415
|
|
|
370
|
-
|
|
371
|
-
- 产品签约负责开通按量付费能力,使用 `salesCode=I1080300001000160457` 和 `scope=app:all,machine_pay:write,agmnt:write`。
|
|
372
|
-
- 服务市场注册负责生成或复用按量付费服务,服务信息中的服务单价、服务地址和请求示例用于正式环境配置与收银。
|
|
373
|
-
- 应用发布负责生成或复用 `WEBAPP` 应用,并取得正式集成所需的 `appId`、应用私钥对应的应用公钥配置状态、支付宝公钥。
|
|
374
|
-
- 正式环境按量付费配置中,`sellerId` 来自商户 PID/2088,服务市场注册结果中的真实 `serviceId` 作为正式环境产物保留,在跨流程上下文中标记为 `productionServiceId`(仅用于区分用途,不改变 MCP 的 `serviceId` 字段名);`appId/alipayPublicKey` 来自应用发布或复用结果。`full_process` 进入 onboarding 前已经完成 integration 沙箱联调,取得这些正式产物后不得重新进入 integration 或重复沙箱测试,只需把生产配置替换列为上线待办。`onboarding_only` 后续另行进入 integration 时,沙箱联调仍固定使用 `api_mock_service_id`,不得使用 `productionServiceId` 或再次向用户索要 `serviceId`;正式上线前再替换为已保留的 `productionServiceId`。
|
|
416
|
+
登录、scope、MCC 是共同前置;之后三分支按自身查询、材料、选择和确认独立推进,单分支失败不阻断或回滚其他分支。默认按 5.1/5.2/5.3 串行,但不得把顺序当作签约成功依赖。认证、授权或主体变化时全局停止新操作并重新校验。
|
|
375
417
|
|
|
418
|
+
**按量付费产物**:签约固定使用 `salesCode=I1080300001000160457`、`scope=app:all,machine_pay:write,agmnt:write`;服务分支产出真实 `productionServiceId`,应用分支产出 `WEBAPP` 的 `appId`、公钥配置/支付宝公钥状态,正式 `sellerId` 来自 PID/2088。`productionServiceId` 只是跨流程用途名,不改 MCP 字段;沙箱始终使用 `api_mock_service_id`。`full_process` 只记录生产替换待办,不返回 integration 或重跑沙箱;后续独立 integration 也先用 mock,正式上线再替换。
|
|
376
419
|
|
|
420
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_BRANCH_SUMMARY:END -->
|
|
421
|
+
|
|
422
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SIGNING:START -->
|
|
423
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.signing.start -->
|
|
377
424
|
#### 5.1 产品签约
|
|
378
425
|
|
|
379
|
-
仅 `NOT_SIGNED`
|
|
426
|
+
仅 `NOT_SIGNED` 执行本节;其他状态禁止重复提交。使用当前产品、MCC 和已验证材料执行下列固定命令;脚本拥有完整固定字段、FLOW 信号和解析,模块只保留业务语义与维护依据。按量付费没有页面材料,产品与 MCC 已确认且本轮签约状态为 `NOT_SIGNED` 后直接提交;网站支付必须在三个图片引用均上传并通过校验后直接提交;APP 支付必须在 APP 名称和三个图片引用全部通过校验后直接提交。任一字段缺失或校验失败时回到 Step 4 的 `materials.category.collect`,禁止执行下列命令,也不增加回复 `1`。
|
|
427
|
+
|
|
428
|
+
进入本 flow 的 `signing` 阶段时,阶段 loader 会在签约分支动作开始前记录 `onboarding.signing.start`;不得另行执行 telemetry 命令。
|
|
380
429
|
|
|
381
430
|
**固定命令契约**:按当前产品原样使用对应命令结构,只替换尖括号中的实际值,禁止增删、改名或猜测参数:
|
|
382
431
|
|
|
432
|
+
<!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
|
|
383
433
|
```bash
|
|
384
|
-
# 按量付费
|
|
385
434
|
bash modules/scripts/ar_sign_apply.sh --product aipay --sales-code "I1080300001000160457" --mcc-code "<mccCode>"
|
|
386
|
-
|
|
435
|
+
```
|
|
436
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
437
|
+
<!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
|
|
438
|
+
```bash
|
|
387
439
|
bash modules/scripts/ar_sign_apply.sh --product webpay --sales-code "I1080300001000041203" --mcc-code "<mccCode>" --picurl1 "<imageRef1>" --picurl2 "<imageRef2>" --picurl3 "<imageRef3>"
|
|
388
|
-
|
|
440
|
+
```
|
|
441
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
442
|
+
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
443
|
+
```bash
|
|
389
444
|
bash modules/scripts/ar_sign_apply.sh --product apppay --sales-code "I1080300001000041313" --mcc-code "<mccCode>" --app-name "<APP名称>" --picurl1 "<imageRef1>" --picurl2 "<imageRef2>" --picurl3 "<imageRef3>"
|
|
390
445
|
```
|
|
446
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
447
|
+
|
|
448
|
+
提交成功后不等待或轮询签约生效,只记录“已提交,等待生效”。服务和应用是否推进只取决于各自前置条件,不取决于本次签约提交是否成功;复用 Step 3.1 和 Step 4 的成功结果,只在会话、主体、候选资源变化或原查询失败时刷新受影响分支,刷新失败不清除其他成功结果。
|
|
391
449
|
|
|
392
|
-
|
|
450
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SIGNING:END -->
|
|
393
451
|
|
|
452
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SERVICE:START -->
|
|
453
|
+
<!-- ALIPAY_AIPAY_PRODUCTS:aipay -->
|
|
454
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.service.start products=aipay -->
|
|
394
455
|
#### 5.2 服务市场注册(仅按量付费)
|
|
395
456
|
|
|
396
|
-
|
|
457
|
+
按本节固定命令复用、创建或修改;创建/修改必须用完整五项资料通过 `validate`。服务单价可输入纯数字或带 `元`/`元/次` 后缀(可空格);后续只用脚本的 `SERVICE_PRICING=0.08` 内部事实,禁止对客。创建校验通过后先输出非阻塞 `service.create.summary` 并直接执行创建;修改校验通过后必须完成 `SERVICE_UPDATE_ONLY` 确认再执行。成功取得的实际 `serviceId` 记为 `productionServiceId`。保存响应不含服务状态;仅后续列表按 `serviceId` 查到时记录实际状态,否则写“状态未取得”,不得推断或重复 `save`。
|
|
458
|
+
|
|
459
|
+
进入本 flow 的 `service` 阶段时,阶段 loader 会在服务分支动作开始前记录 `onboarding.service.start`;不得另行执行 telemetry 命令。
|
|
397
460
|
|
|
398
461
|
**固定命令契约**:复用已有服务不调用 `save`;创建不传 `--service-id`,修改必须传入用户从 Step 3.1 候选中选定的实际 `serviceId` 和全部字段:
|
|
399
462
|
|
|
400
463
|
```bash
|
|
401
464
|
bash modules/scripts/service.sh validate --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
465
|
+
# 创建:先成功渲染 service.create.summary/DEFAULT,再直接执行
|
|
402
466
|
bash modules/scripts/service.sh save --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
467
|
+
# 修改:先取得 onboarding.write.confirm/SERVICE_UPDATE_ONLY 的有效确认,再执行
|
|
403
468
|
bash modules/scripts/service.sh save --service-id "<serviceId>" --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
404
469
|
```
|
|
405
470
|
|
|
471
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SERVICE:END -->
|
|
472
|
+
|
|
473
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_APPLICATION:START -->
|
|
474
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.application.start -->
|
|
406
475
|
#### 5.3 应用发布
|
|
407
476
|
|
|
408
|
-
**应用分支**:按量付费/网站支付使用 `WEBAPP`,APP支付使用 `MOBILEAPP`。复用 Step 3.1 候选和 Step 4
|
|
477
|
+
**应用分支**:按量付费/网站支付使用 `WEBAPP`,APP 支付使用 `MOBILEAPP`。复用 Step 3.1 候选和 Step 4 条件资料,按本节固定命令执行复用或新建、设置/校验应用公钥和提审;产品上下文、平台字段、`appSign` 边界、MCP 参数和返回处理由 `app.sh` 托管,只有异常诊断或业务解释时读取 `modules/app-release.md`。
|
|
478
|
+
|
|
479
|
+
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
480
|
+
APP 支付通过 Skill 创建只支持 `IOS`、`ANDROID` 和 `ALL`,其中 `ALL` 只表示 iOS + Android。HarmonyOS 移动应用不得调用 `app.sh create`;执行固定 renderer 命令输出 `application.harmony.manual_create`,用户在开放平台完成创建及平台要求的后续配置后明确表示操作完成,再重新执行 Step 3.1 的应用列表查询。只有实际查询到 `ON_LINE` 候选后才能按既有复用路径继续,否则应用分支保持人工待办。
|
|
481
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
482
|
+
|
|
483
|
+
进入本 flow 的 `application` 阶段时,阶段 loader 会在应用分支动作开始前记录 `onboarding.application.start`;不得另行执行 telemetry 命令。
|
|
409
484
|
|
|
410
|
-
|
|
485
|
+
**固定命令契约**:只替换实际值,禁止改写位置参数。所有命令的 `appId` 必须逐字使用本轮候选或 `create` 输出;新建应用使用组合命令,复用缺公钥仍使用 `verify-key` 后 `reuse`。
|
|
411
486
|
|
|
487
|
+
<!-- ALIPAY_AIPAY_PRODUCT:aipay,webpay:START -->
|
|
412
488
|
```bash
|
|
413
|
-
# 按量付费/网站支付新建 WEBAPP
|
|
414
489
|
bash modules/scripts/app.sh create --product-type "<aipay|webpay>" --sales-code "<当前产品码>"
|
|
415
|
-
|
|
490
|
+
```
|
|
491
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
492
|
+
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
493
|
+
```bash
|
|
416
494
|
bash modules/scripts/app.sh create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform IOS --bundle-id "<bundleId>"
|
|
417
495
|
bash modules/scripts/app.sh create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform ANDROID --app-package "<appPackage>" --app-sign "<appSign>"
|
|
418
496
|
bash modules/scripts/app.sh create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform ALL --bundle-id "<bundleId>" --app-package "<appPackage>" --app-sign "<appSign>"
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
bash
|
|
497
|
+
printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs application.harmony.manual_create --variant DEFAULT
|
|
498
|
+
```
|
|
499
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
# 下列子命令的 appId/publicKey 均为位置参数
|
|
503
|
+
bash modules/scripts/app.sh reuse --product-type "$PRODUCT_TYPE" "<appId>"
|
|
504
|
+
bash modules/scripts/app.sh key --product-type "$PRODUCT_TYPE" --defer-open "<appId>" "<用户明确提供的完整publicKey>"
|
|
505
|
+
bash modules/scripts/app.sh open-key-page "<appId>"
|
|
506
|
+
# 新建应用:页面确认后校验并直接提审
|
|
507
|
+
bash modules/scripts/app.sh verify-key-and-audit --product-type "$PRODUCT_TYPE" "<本轮create输出的appId>" "<同一publicKey>"
|
|
508
|
+
# 复用应用缺公钥恢复:校验后重新执行 reuse
|
|
509
|
+
bash modules/scripts/app.sh verify-key --product-type "$PRODUCT_TYPE" "<appId>" "<同一publicKey>"
|
|
510
|
+
# 仅有限轮询耗尽且用户明确表示已完成页面操作:原分支只查询一次,不重启自动轮询
|
|
511
|
+
node ../normal/scripts/onboarding_recovery_runner.mjs application-key --reply "$USER_REPLY" --product-type "$PRODUCT_TYPE" --mode verify-key-and-audit --app-id "<本轮create输出的appId>" --public-key "<同一publicKey>"
|
|
512
|
+
node ../normal/scripts/onboarding_recovery_runner.mjs application-key --reply "$USER_REPLY" --product-type "$PRODUCT_TYPE" --mode verify-key --app-id "<appId>" --public-key "<同一publicKey>"
|
|
513
|
+
# 独立提审恢复入口仍保留完整密钥查询 guard
|
|
514
|
+
bash modules/scripts/app.sh audit --product-type "$PRODUCT_TYPE" "<appId>"
|
|
424
515
|
```
|
|
425
516
|
|
|
426
|
-
**复用应用**:执行 `bash modules/scripts/app.sh reuse "<appId>"`,其中 `<appId>`
|
|
517
|
+
**复用应用**:执行 `bash modules/scripts/app.sh reuse --product-type "$PRODUCT_TYPE" "<appId>"`,其中 `<appId>` 必须逐字来自本轮最近一次 `app.sh list` 的实际候选,并由用户按完整 ID 选定;不接受序号、历史候选或 Agent 转换值。复用已有 `MOBILEAPP` 时不需要采集 `mobilePlatform`、`bundleId`、`appPackage` 或 `appSign`;这些字段仅在新建 `MOBILEAPP` 时需要。
|
|
427
518
|
|
|
428
|
-
仅 `CREATE`
|
|
519
|
+
仅 `CREATE` 分支重查列表,将本次唯一快照记为 `RECHECK_APP_CANDIDATES_JSON` 后执行下列 runner,禁止 Agent 手工比较。stdout 为空且资料齐备时直接创建;非空时原文发出并重新选择;重查失败时禁止创建但不回滚其他分支。非 `ON_LINE` 不可复用,`FLOW:PENDING_APPLICATIONS` 不得当作空列表。
|
|
429
520
|
|
|
430
|
-
|
|
521
|
+
```bash
|
|
522
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
523
|
+
--argjson previousCandidates "$APP_CANDIDATES_JSON" \
|
|
524
|
+
--argjson currentCandidates "$RECHECK_APP_CANDIDATES_JSON" \
|
|
525
|
+
'{previousCandidates:$previousCandidates,currentCandidates:$currentCandidates}')
|
|
526
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
527
|
+
| node ../normal/scripts/onboarding_message_runner.mjs application-recheck --application-type "$APPLICATION_TYPE"
|
|
528
|
+
```
|
|
431
529
|
|
|
432
|
-
|
|
530
|
+
公钥页 stdout 必须先作为独立对客消息送达,再执行 `app.sh open-key-page "<appId>"` 和对应校验;不得把后续 `application.key.pending` 或最终收口合并到同一条对客回复中。自动打开成功、后续轮询成功或后续 stdout 为空都不能替代实际 `confirmPageUrl` 交付。校验生产固定最多 20 次、间隔 2 秒,成功即停;新建分支复用最终安全密钥响应完成双公钥 guard 后提审,禁止重复查询,guard 失败不提审。耗尽才输出 `application.key.pending`;用户随后给出登记的明确肯定回复时,只执行上方对应的 `onboarding_recovery_runner.mjs application-key` 命令,由 runner 校验原始回复并触发一次查询。否定、疑问、取消、修改意见或含糊表达不得触发查询。没有准确依据时不得推定公钥确认页过期、有效期或旧链接失效;只有用户主动反馈当前页面或扫码有问题时,才重新执行上方 `app.sh key` 命令生成新页面并重新进入固定 open + 轮询。写文件失败记录 `MANUAL_CONFIGURATION_REQUIRED` 但不阻塞提审;HarmonyOS 仍只走人工分支。
|
|
433
531
|
|
|
434
|
-
|
|
532
|
+
用户提供完整公钥后直接调用上方 `app.sh key` 命令;脚本输出非阻塞 `application.key.page` 并校验 URL,Agent 送达 stdout 后立即调用 `app.sh open-key-page` 受控打开,失败只保留同一裸 URL、复制兜底和“扫码完成后请回到 Agent 对话页面”。Agent 不得代写/重渲染,响应不明进入 `UNKNOWN` 且不得生成第二页。
|
|
435
533
|
|
|
436
|
-
`
|
|
534
|
+
复用应用返回 `FLOW:REUSE_NO_KEY` 时,必须将应用分支标记为未完成,不得输出复用成功,并执行下列命令说明当前应用缺少已确认 RSA2 应用公钥。该消息不增加二次确认:目标 `appId` 已由用户从当前候选中选定,随后直接进入当前应用的设钥准备;如果用户在消息后明确要求重新选择或新建应用,再返回 Step 4 重新决策。取得用户明确提供的完整应用公钥后执行 `bash modules/scripts/app.sh key --product-type "$PRODUCT_TYPE" --defer-open "<同一appId>" "<用户明确提供的完整publicKey>"`;该脚本 stdout 独立送达后立即执行 `bash modules/scripts/app.sh open-key-page "<同一appId>"`,再执行带同一 `--product-type` 的 `verify-key` 有限轮询,确认成功后重新执行带同一 `--product-type` 的 `reuse`,不得跳过应用状态与支付宝公钥检查,也不得改变 `appId/publicKey` 的位置参数形式或替换 ID。
|
|
437
535
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
536
|
+
```bash
|
|
537
|
+
MESSAGE_INPUT_JSON=$(jq -cn --arg appId "$APP_ID" '{appId:$appId}')
|
|
538
|
+
printf '%s' "$MESSAGE_INPUT_JSON" | node ../normal/scripts/render_customer_message.mjs application.reuse.no_key --variant DEFAULT
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_APPLICATION:END -->
|
|
542
|
+
|
|
543
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CLOSEOUT:START -->
|
|
544
|
+
### Step 6: 本轮流程收口
|
|
441
545
|
|
|
442
|
-
|
|
546
|
+
`integration_only` 不应进入本步骤。`onboarding_only` 和 `full_process` 按实际请求范围处理后续衔接;`full_process` 只保留两个子流程的实际状态,不转换成另一套状态。
|
|
443
547
|
|
|
444
|
-
|
|
445
|
-
|------|------|------|
|
|
446
|
-
| 📦 产品信息 | 产品类型 | {productName} |
|
|
447
|
-
| 📦 产品信息 | 经营类目 | {mccName} |
|
|
448
|
-
| 📋 签约信息 | 签约状态 | {实际取得时输出} |
|
|
449
|
-
| 📋 签约信息 | 费率 | {实际取得费率时才输出} |
|
|
450
|
-
| 🧩 服务信息 | 服务ID | {按量付费且实际取得 serviceId 时输出} |
|
|
451
|
-
| 🧩 服务信息 | 服务状态 | {按量付费且实际取得状态时输出} |
|
|
452
|
-
| 📱 应用信息 | 应用ID | {实际取得 appId 时输出} |
|
|
453
|
-
| 📱 应用信息 | 应用状态 | {实际取得状态时输出} |
|
|
454
|
-
| 🔑 配置信息 | 支付宝公钥导出状态 | {实际取得导出状态时输出} |
|
|
548
|
+
**完成条件**:当前登录、scope 和 MCC 必须有效;签约必须由实际查询确认为已生效;仅按量付费适用的服务分支必须复用或保存成功并取得实际 `serviceId`;应用必须达到 `ON_LINE`、应用公钥已生效且支付宝公钥已实际导出。存在失败、未知、待生效、待审核或人工配置时不得宣称产品开通完成。不维护人工完成条件数量。
|
|
455
549
|
|
|
456
|
-
|
|
550
|
+
使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 消息逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出,并把 runner 完整 stdout 原文发送给用户。禁止用 Agent 手写短摘要替代、删减 `productionReadinessBlock`、删减 AI 网页应用收款限制引导或改写后续衔接;AI 网页应用收款收口缺少“【上线前有以下关键点】”和“AI 网页应用收款限制”时视为标准收口未送达,必须重新发送同一次 closeout stdout。自动重试耗尽、业务错误或查询失败且到本步骤仍未恢复的动作,统一写入对应分支结果和 `remainingActions`,只说明一次,不在收口后再次询问是否重试。必须执行:
|
|
457
551
|
|
|
458
|
-
|
|
459
|
-
- {只列出未取得、待生效、待审核、待手动配置或需要用户继续处理的项目;没有则省略本节。}
|
|
552
|
+
`SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId`、公钥文件路径、错误码、截图证据或其他自由文本;这些证据只保留在脚本输出、内部事实或人工待办字段中,不能污染分支结果枚举。
|
|
460
553
|
|
|
461
|
-
|
|
462
|
-
-
|
|
463
|
-
|
|
554
|
+
```bash
|
|
555
|
+
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
556
|
+
--arg productName "$PRODUCT_NAME" \
|
|
557
|
+
--arg processResultTitle "$PROCESS_RESULT_TITLE" \
|
|
558
|
+
--arg integrationResult "$INTEGRATION_RESULT" \
|
|
559
|
+
--arg sandboxConfigState "$SANDBOX_CONFIG_STATE" \
|
|
560
|
+
--arg signingResult "$SIGNING_RESULT" \
|
|
561
|
+
--arg serviceResult "$SERVICE_RESULT" \
|
|
562
|
+
--arg applicationResult "$APPLICATION_RESULT" \
|
|
563
|
+
--arg remainingActions "$REMAINING_ACTIONS" \
|
|
564
|
+
--arg manualVerificationItems "$MANUAL_VERIFICATION_ITEMS" \
|
|
565
|
+
--arg applicationOperationAppId "${APPLICATION_OPERATION_APP_ID:-}" \
|
|
566
|
+
--arg applicationOperationActualStatus "${APPLICATION_OPERATION_ACTUAL_STATUS:-}" \
|
|
567
|
+
--arg applicationOperationNextAction "${APPLICATION_OPERATION_NEXT_ACTION:-}" \
|
|
568
|
+
--arg nextFlowReminder "$NEXT_FLOW_REMINDER" \
|
|
569
|
+
'({productName:$productName,processResultTitle:$processResultTitle,integrationResult:$integrationResult,signingResult:$signingResult,serviceResult:$serviceResult,applicationResult:$applicationResult,remainingActions:$remainingActions,nextFlowReminder:$nextFlowReminder}
|
|
570
|
+
+ if $sandboxConfigState == "" then {} else {sandboxConfigState:$sandboxConfigState} end
|
|
571
|
+
+ if $manualVerificationItems == "" then {} else {manualVerificationItems:$manualVerificationItems} end
|
|
572
|
+
+ if $applicationOperationAppId == "" and $applicationOperationActualStatus == "" and $applicationOperationNextAction == "" then {} else {applicationOperationAppId:$applicationOperationAppId,applicationOperationActualStatus:$applicationOperationActualStatus,applicationOperationNextAction:$applicationOperationNextAction} end)')
|
|
573
|
+
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
574
|
+
| node ../normal/scripts/onboarding_message_runner.mjs closeout
|
|
464
575
|
```
|
|
465
576
|
|
|
466
|
-
|
|
577
|
+
`onboarding_only` 的代码开发栏写“不在本轮执行范围”,`SANDBOX_CONFIG_STATE` 传空字符串,`MANUAL_VERIFICATION_ITEMS` 传空字符串,并把 `nextFlowReminder` 固定为“还需完成支付产品-代码开发,才能在业务系统中实际发起支付。”。`full_process` 中,代码开发全部通过时填“已完成”并传 `READY`;只有沙箱待配置且其余代码与安全检查通过时填“部分完成,沙箱配置待完成”,并原样传 `CREATE_PENDING|VERIFY_PENDING`;沙箱为 `READY` 且代码开发只剩非阻塞人工待验证项时填“部分完成,人工待验证”,传 `READY`,把代码开发 checklist 的 `manualItems` 原样作为 `MANUAL_VERIFICATION_ITEMS` 传入,并在 `REMAINING_ACTIONS` 中写明“完成下方人工待验证项”或同等实际待办,禁止传“无”;把 `nextFlowReminder` 固定为“代码开发已在本轮执行;后续只按上表实际待办继续。”,该值仅用于 renderer 校验执行模式,`full_process` 最终对客不展示“后续衔接”行。renderer 会校验结果与沙箱状态、人工待验证项一致,并派生恢复口令或人工待验证展示行;该展示不增加确认点或用户回复要求。不得在其 stdout 前后单独追加衔接提醒,不伪造本轮代码修改、沙箱创建或测试结果,也不重复进入 integration。
|
|
467
578
|
|
|
468
|
-
|
|
579
|
+
若 `full_process` 最后一跳紧接着应用创建、审核提交或复用结果,不再单独输出一条 `application.operation.result` 后又立刻输出本收口消息;必须把同样的 `appId`、实际状态和下一步分别记录为 `APPLICATION_OPERATION_APP_ID`、`APPLICATION_OPERATION_ACTUAL_STATUS`、`APPLICATION_OPERATION_NEXT_ACTION`,交给 closeout runner 处理,且 `APPLICATION_OPERATION_ACTUAL_STATUS` 必须与 `APPLICATION_RESULT` 枚举原文一致。应用结果已为“已上线且配置完整”时不再展开“应用分支结果”,由结果表和上线前检查块承接;待审核、待设置公钥、需人工配置、失败或结果未知时合并展示为“应用分支结果”并保留完成态红线。`onboarding_only`、应用分支仍需等待用户补材料/确认,或应用操作结果不是紧邻 Step 6 最终收口时,仍按应用模块原规则输出 `application.operation.result`。合并展示不得改写应用完成条件,待审核、待设置公钥或待人工配置时仍不得表述为应用发布完成。
|
|
469
580
|
|
|
470
|
-
|
|
581
|
+
当且仅当签约结果为“已提交,等待生效”且应用结果为“已提交审核,等待上线”时,renderer 从消息目录自动在 `remainingActions` 后追加状态查询提示;该提示不是 flow 入参,Agent 禁止自行传入、拼接或在模板外重复输出。其他结果组合不展示该提示。
|
|
471
582
|
|
|
472
|
-
|
|
583
|
+
renderer 还会按 `productName` 和分支完成条件自动派生上线前检查块。Agent 不传入、不改写该字段,也不得在模板外补第二份生产上线清单。该检查使用“【当前状态】/【上线前有以下关键点】/【提示】/【其他】”结构,不单列“相关站点”,也不在模板尾部追加第二个查询入口;必要 URL 只放在具体操作步骤中。完成态只能表述为代码开发和产品开通流程已完成,不得替用户确认生产配置已替换、产品真实可收款或应用页面状态;上线条件固定引导用户前往支付宝 AI 付站点,进入一站式接入 → 选择产品 → 密钥配置查看产品开通和应用上线情况;正式参数以生产 `appId`、应用公钥、应用私钥、支付宝公钥和生产网关为核心;AI 网页应用收款和 AI 移动应用收款必须完成公网 HTTPS `notify_url` 的验签、关键字段校验、幂等、`success` 回写和补偿查询;AI 按量付费必须把沙箱 `api_mock_service_id` 替换为服务市场真实 `serviceId`,A2M 示例中的 `sellerId` 来自商户 PID/2088,由商家自行在支付宝平台确认,不由 Agent 猜测、生成或代填。生产环境应用私钥、账号密码、支付凭证和未脱敏通知内容仍禁止提供给 Agent。分支未完成时,该派生块必须明确上表待办完成前不能正式收款。该提示只在消息目录维护,不增加用户确认点,Agent 不得在模板外重复输出或改写。
|
|
473
584
|
|
|
474
|
-
|
|
585
|
+
签约、服务和应用分别按本轮脚本实际结果表达:签约提交成功但未生效时,`signingResult` 固定使用“已提交,等待生效”;服务创建或修改成功且取得 `serviceId`、但未取得服务状态时,`serviceResult` 分别固定使用“创建成功,状态未取得”或“修改成功,状态未取得”;应用按消息目录的实际阶段枚举填写。任一分支失败或结果未知不清除其他分支成功,也不能概括为“全部失败”。
|
|
586
|
+
|
|
587
|
+
只输出实际取得且有判断依据的费率、`serviceId`、`appId`、应用状态和公钥导出状态;没有取得的字段进入确定的下一步,不使用占位值、空值或推断值。只有签约为“已生效”、按量付费服务已复用或保存成功并取得实际 `serviceId`(消息值为“已复用”“创建成功,状态未取得”“修改成功,状态未取得”或“已完成”;网站支付和 APP 支付为“无需处理”)、应用为“已上线且配置完整”且剩余待办为“无”时,`processResultTitle` 才能使用“支付产品-产品开通已完成”;否则固定使用“流程进展”。“状态未取得”只表示保存响应未提供服务状态,不得改写为保存失败;renderer 会交叉校验这些条件,禁止在模板外另写相反结论。
|
|
588
|
+
|
|
589
|
+
使用 TaskUpdate 只把已经实际执行并取得结果的内部任务标记为 completed。签约待生效、应用待审核、人工配置或其他外部待办必须保持 pending 或在用户可见待办中明确列出,不得为了结束本轮对话把这些事项标记为 completed。对于 `full_process`,此处只表示 onboarding 子流程已执行至当前可推进终点;最终是否完成直接依据两个子流程的实际结果和待办,不得另建状态推断。
|
|
475
590
|
|
|
476
|
-
|
|
591
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CLOSEOUT:END -->
|
|
477
592
|
|
|
478
|
-
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## 四、错误处理(全局规则)
|
|
479
596
|
|
|
480
|
-
|
|
481
|
-
|------|----------|
|
|
482
|
-
| 意图与方案 | `intention`、`productName`、`productType`、`salesCode`、`scope`、`mccCode`、`mccName` |
|
|
483
|
-
| 签约 | 查询成功后记录 `signStatus`;仅状态可确定后记录 `materialStatus`、`missingMaterials`、三个图片引用,APP支付未签约时另保留 `appName` |
|
|
484
|
-
| 服务 | 决策、候选 ID/名称/状态、`serviceId`、五项服务资料、校验状态和实际结果 |
|
|
485
|
-
| 应用 | 决策、候选 ID/名称/状态、`appId`、应用类型、新建 MOBILEAPP 所需平台字段、`publicKeyPrepared`、校验状态、应用状态和支付宝公钥导出状态/可选路径 |
|
|
597
|
+
所有 CLI/MCP 操作立即使用脚本内置错误检测,失败后禁止解析业务结果;分类与恢复以 `modules/scripts/error_handler.sh` 和按需读取的 `modules/error-handling.md` 为准。Step 3.1 查询失败仍按分支隔离。
|
|
486
598
|
|
|
487
|
-
|
|
599
|
+
---
|
|
488
600
|
|
|
489
|
-
|
|
601
|
+
## 五、当前会话事实
|
|
490
602
|
|
|
491
|
-
|
|
603
|
+
只保留当前已确认产品/MCC、已验证材料、候选和脚本结果;重入时重新校验授权并查询全部适用分支。可验证的提前材料直接复用,否则重收。
|
|
492
604
|
|
|
493
|
-
|
|
605
|
+
写结果不明时用现有只读能力核验;仍无法确认则输出未知,禁止推定失败或重复写入。应用公钥只用于本次 `app.sh key/verify-key/verify-key-and-audit` 且不得复述/记录;其他敏感值遵守 `SKILL.md`。`appSign` 仅指 Android 应用签名摘要。
|