@alipay/alipay-aipay 1.4.9 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -2
- package/skill/SKILL.md +2 -2
- package/skill/VERSION +1 -1
- package/skill/references/integration/flow.md +109 -41
- package/skill/references/integration/modules/checklist.md +25 -17
- package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
- package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
- package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
- package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
- package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//345/274/202/346/255/245/351/200/232/347/237/245/345/244/204/347/220/206/344/273/243/347/240/201/347/244/272/344/276/213.md +1 -1
- package/skill/references/integration/modules/interface-contract/aipay-interface-contract.md +3 -4
- package/skill/references/integration/modules/interface-contract/apppay-interface-contract.md +4 -4
- package/skill/references/integration/modules/interface-contract/common-trade-contract.md +1 -1
- package/skill/references/integration/modules/interface-contract/notify-url-contract.md +4 -4
- package/skill/references/integration/modules/interface-contract/webpay-interface-contract.md +4 -4
- package/skill/references/integration/modules/interface-guide.md +15 -13
- package/skill/references/integration/modules/product-decision.md +13 -13
- package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +2 -2
- package/skill/references/integration/modules/scripts/local_402_sandbox_pay.py +1 -1
- package/skill/references/integration/modules/scripts/sandbox_config.sh +1 -1
- package/skill/references/integration/modules/troubleshooting-flow.md +3 -3
- package/skill/references/normal/alipay-cli-env.md +2 -2
- package/skill/references/normal/full-process-routing.md +7 -5
- package/skill/references/normal/json/customer-messages.json +56 -51
- package/skill/references/normal/json/policy-rules.json +6 -6
- package/skill/references/normal/rejection-guide.md +1 -1
- package/skill/references/normal/scripts/alipay_cli_env.mjs +6 -2
- package/skill/references/normal/scripts/alipay_cli_env.sh +36 -2
- package/skill/references/normal/scripts/common.sh +64 -0
- 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 +237 -15
- 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 +27 -12
- package/skill/references/normal/scripts/onboarding_recovery_runner.mjs +96 -0
- package/skill/references/normal/scripts/project_route_inspector.sh +3 -3
- package/skill/references/normal/scripts/python_script_runner.mjs +1 -1
- package/skill/references/normal/scripts/render_customer_message.mjs +67 -42
- package/skill/references/normal/scripts/telemetry.mjs +54 -5
- package/skill/references/normal/telemetry.md +26 -0
- package/skill/references/onboarding/flow.md +166 -152
- package/skill/references/onboarding/modules/app-release.md +39 -386
- package/skill/references/onboarding/modules/authorization.md +25 -270
- package/skill/references/onboarding/modules/error-handling.md +50 -253
- package/skill/references/onboarding/modules/product-sign.md +24 -289
- package/skill/references/onboarding/modules/scripts/app.sh +58 -21
- package/skill/references/onboarding/modules/scripts/ar_sign_apply.sh +15 -12
- package/skill/references/onboarding/modules/scripts/auth.sh +6 -1
- package/skill/references/onboarding/modules/scripts/error_handler.sh +1 -0
- package/skill/references/onboarding/modules/scripts/query_sign_status.sh +5 -3
- package/skill/references/onboarding/modules/scripts/service.sh +3 -2
- package/skill/references/onboarding/modules/scripts/upload_screenshots.sh +24 -12
- package/skill/references/onboarding/modules/service-registration.md +20 -312
- package/skill/references/runtime-entry.md +17 -16
|
@@ -1,30 +1,13 @@
|
|
|
1
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:START -->
|
|
1
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
|
## 执行入口与重启原则
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
进入任何产品开通环境检查、产品/MCC 澄清或方案确认前,先从本 flow 目录执行一次确定性平台入口:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
node ../normal/scripts/onboarding_message_runner.mjs platform-entry
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
- Windows:runner stdout 是唯一对客正文,必须原文发送;发送后停止本 flow 的产品开通动作,不再执行 Step 1、MCC 澄清、方案确认、登录或材料收集。`onboarding_only` 在根意图识别后进入本 flow 即执行;`full_process` 保留已完成的 Integration 实际结果,在衔接本 flow 时执行。
|
|
18
|
-
- 非 Windows:runner 成功且 stdout 为空,直接继续下方既有流程,不输出平台提示,不改变步骤、确认或完成条件。
|
|
19
|
-
- 命令失败或输出无法唯一判断时停止并核对 runner,禁止手写、改写或补发近似引导。
|
|
20
|
-
|
|
21
|
-
企业账号边界:如果用户明确表示当前要用企业账号通过 Skill 完成产品开通,必须执行下列标准消息命令并停止本 flow 的产品开通动作,引导前往支付宝商家平台。不得主动增加账号类型确认,也不得根据 MCC、营业执照字段或“公司”等泛化描述推断为企业账号;没有明确依据时继续按本 flow 执行。
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs onboarding.enterprise.unsupported --variant <ONBOARDING_ONLY|FULL_PROCESS>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
`onboarding_only` 固定使用 `ONBOARDING_ONLY`;`full_process` 只会在代码开发已通过后进入本 flow,固定使用 `FULL_PROCESS`。renderer stdout 是该意图的最终产品开通消息,必须把 stdout 原文作为当前回复正文发给用户;命令面板、折叠输出或“已渲染/已展示”说明不能替代对客消息。发出 stdout 原文后直接停止本 flow,不再执行 Step 6 或追加第二份收口。
|
|
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 保留完整规则供校验。
|
|
28
11
|
|
|
29
12
|
每次开始都先校验登录、scope 和 MCC,再查询签约状态、应用候选和适用服务候选,并只依据当前真实结果继续。不得根据历史对话推定外部操作结果。
|
|
30
13
|
|
|
@@ -42,7 +25,7 @@ printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs onboarding
|
|
|
42
25
|
|
|
43
26
|
- `P-MCP-CONTRACT-FROZEN`:只执行当前 Skill 已验证脚本中的 MCP 方法、参数和解析;禁止推断、改名、替换或尝试近似方法。
|
|
44
27
|
- `P-AUTH-BEFORE-ONBOARDING`:登录、scope 和 MCC 全部校验通过前,禁止执行任何 onboarding 查询或写操作。
|
|
45
|
-
- `P-WRITE-CONFIRM
|
|
28
|
+
- `P-WRITE-CONFIRM`:签约材料完整且校验通过后直接执行签约提交,不增加额外确认点;材料缺失或校验失败时继续使用受控材料提示,禁止提交。服务创建资料完整且校验通过后展示受控创建摘要并直接执行,不增加额外确认点;服务修改执行前必须展示当前会话、脱敏主体、产品、动作和目标摘要,并取得绑定当前摘要、通过统一肯定语义判定器校验的明确确认。应用创建由用户针对当前应用候选列表明确选择新建来确认,候选重查未变化且条件字段齐备时不再追加确认;用户提供应用公钥后生成确认页不重复确认,由用户在官方页面完成公钥确认;新建应用的公钥校验成功后直接提交应用审核,不增加额外确认点。
|
|
46
29
|
- `P-WRITE-UNKNOWN`:非幂等写操作结果不明时先用现有只读能力核验;无法确认时进入 UNKNOWN,禁止盲目重试。
|
|
47
30
|
- `P-PARTIAL-RESULT`:签约、服务和应用分支独立记录结果,不回滚已成功动作,不用整体失败或整体成功覆盖部分结果。
|
|
48
31
|
- `P-MATERIAL-CATEGORY`:每轮只展示一个材料类别,同类一次收齐;提前提供的后续材料直接接收并校验,之后不重复索取。
|
|
@@ -55,60 +38,42 @@ printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs onboarding
|
|
|
55
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 完成白名单及当前上下文校验且当前动作必须对客展示时,才允许进入该动作的唯一对客正文;即使获准展示,也禁止进入对话摘要、普通日志、跨会话状态或宽权限临时文件。
|
|
56
39
|
- `P-CUSTOMER-OUTPUT-EXCLUSIVE`:flow 指定 renderer 或托管脚本时,其 stdout 是该动作唯一对客正文;工具输出记录、折叠面板或日志不等于已对客发送,Agent 必须把 stdout 原文作为当前回复正文发给用户。禁止在前后添加执行说明、消息 ID、控制标记、摘要、转述或近似话术。阻塞消息发出后立即停止本轮并等待用户。
|
|
57
40
|
- `P-ONBOARDING-CONTROL-CHANNEL`:Onboarding 登记脚本的内部事实行统一以 ALIPAY_AIPAY_INTERNAL: 开头;即使宿主合并 stdout/stderr,也必须整行剔除后再判断对客正文。内部行严禁对客;成功且剔除内部行后正文为空时直接转移,不补写话术。
|
|
58
|
-
- `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
|
|
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 合并在同一条对客回复中。该屏障不等待用户确认,不新增确认或其他用户操作。
|
|
59
42
|
- `P-DETERMINISTIC-HANDOFF`:flow 已登记脚本或 renderer 时只执行动作发生位置的固定命令;退出码和登记终态标记满足后立即按 flow 转移,禁止追加 jq、cat、grep、curl 或临时脚本重复解析、复核或解释同一结果。失败只走登记恢复分支;项目代码实现和运行验证除外,但不得把沙箱配置或其他敏感文件打印到工具输出。
|
|
60
43
|
<!-- GENERATED:ONBOARDING-GUARDS:END -->
|
|
61
44
|
|
|
62
|
-
生成区块与 `SKILL.md` 红线适用于全部步骤。Onboarding
|
|
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` 由脚本冻结,禁止绕开脚本混用或重组。
|
|
63
46
|
|
|
64
47
|
### 标准消息执行规则
|
|
65
48
|
|
|
66
|
-
对客消息遵守 `SKILL.md
|
|
49
|
+
对客消息遵守 `SKILL.md` 并优先使用登记 runner/脚本。仅无托管入口时先查 schema,再用 `jq --arg/--argjson` 构造输入(无变量传 `{}`):
|
|
67
50
|
|
|
68
51
|
```bash
|
|
69
52
|
node ../normal/scripts/render_customer_message.mjs --schema <messageId> --variant <VARIANT>
|
|
70
53
|
printf '%s' "$MESSAGE_INPUT_JSON" | node ../normal/scripts/render_customer_message.mjs <messageId> --variant <VARIANT>
|
|
71
54
|
```
|
|
72
55
|
|
|
73
|
-
|
|
56
|
+
托管消息禁止改为临时 `jq+renderer`。失败停步且不手写兜底;stdout 和阻塞规则按 `SKILL.md` 执行。
|
|
74
57
|
|
|
75
58
|
**工作目录**:本文 Skill 相对命令以 `references/onboarding/` 为 workdir。Onboarding 不改用户项目;检查本机路径时显式传规范化绝对路径,不得切换到启动目录、用户项目或另一份 Skill。
|
|
76
59
|
|
|
77
60
|
### 耗时事件规则
|
|
78
61
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
node ../normal/scripts/telemetry.mjs stage "<stage>" --root-intent "$ROOT_INTENT" --product-type "$PRODUCT_TYPE"
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
`ROOT_INTENT` 只使用 `onboarding_only|full_process`。`run.product_clarify.start`、`onboarding.mcc_prepare.start`、`onboarding.plan_confirm.start`、`onboarding.branch_summary.start`、`onboarding.material_collect.start` 和 `onboarding.closeout.start` 由对应标准消息/runner 自动输出;最终 closeout 成功生成后,runner 自动记录 `run.terminal` 并结束 `onboarding_only|full_process` 当前 run。其余下文列明的阶段在动作开始前执行一次。sync-log 上传失败静默保留 outbox,后续 telemetry 命令继续补传,不补问、不改变对客正文。
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## 一、产品映射
|
|
90
|
-
|
|
91
|
-
> 术语说明:本 Skill 中“网站支付”是唯一的网页支付产品概念,覆盖电脑网页和手机浏览器网页/H5 场景;“电脑网站支付”“PC网站支付”“手机网站支付”“H5支付”均按网站支付处理。签约 payload 中的 `appType=PC_WEB` 是接口字段名,不代表只能用于 PC 端网页。
|
|
92
|
-
|
|
93
|
-
| 产品 | productType | salesCode | scope | 资料采集要求 |
|
|
94
|
-
|------|-------------|-----------|-------|-------------|
|
|
95
|
-
| 按量付费 | aipay | I1080300001000160457 | app:all,machine_pay:write,agmnt:write | 无需截图 |
|
|
96
|
-
| 网站支付 | webpay | I1080300001000041203 | app:all,fast_instant_trade_pay:write | 需要3张网站截图 |
|
|
97
|
-
| APP 支付 | apppay | I1080300001000041313 | app:all,auth_alipay_apppay:write | 未签约时需要 APP 名称和 3 张 APP 界面截图,签约状态固定按 `OFFLINE` 提交;选择新建应用时在 Step 4 前置采集移动平台信息,Step 5.3 才用于创建 |
|
|
62
|
+
`start-run` 已确定 `run_id`。各 stage 由 loader、标准消息和动作 runner/script 自动异步记录;Agent 不手工执行 `telemetry.mjs stage`。遥测关闭、落盘、网络或上传失败不改变 stdout、退出语义和 flow 转移;内部行禁止对客。实现与诊断细节按需读取 `../normal/telemetry.md`。
|
|
98
63
|
|
|
99
64
|
---
|
|
100
65
|
|
|
101
66
|
## 二、主流程
|
|
102
67
|
|
|
103
68
|
```
|
|
104
|
-
Step 1:
|
|
69
|
+
Step 1: 方案规划 → Step 2: 环境检查 → Step 3: 登录授权
|
|
105
70
|
→ Step 3.1: 三分支只读发现 → Step 4: 分支摘要与分类材料
|
|
106
71
|
→ Step 5: 独立分支推进 → Step 6: 分支级收口
|
|
107
72
|
```
|
|
108
73
|
|
|
109
74
|
### 启动前材料预告与分流
|
|
110
75
|
|
|
111
|
-
先确定唯一产品;未确定时只澄清业务场景,不一次展示三产品材料。进入 Step
|
|
76
|
+
先确定唯一产品;未确定时只澄清业务场景,不一次展示三产品材料。进入 Step 1 后简短预告当前产品的条件材料,不要求用户确认齐备;登录查询后先展示三分支短摘要,再一次只收集一个可推进类别。`full_process` 固定在 integration 完成后进入本流程,进入前不展示或收集签约材料。
|
|
112
77
|
|
|
113
78
|
**执行规则**:
|
|
114
79
|
- 网站支付或 APP 支付确定为 `NOT_SIGNED` 且签约页面材料尚不存在时,只把签约分支置为 `WAITING_USER`;服务/应用分支仍按自身条件推进。`onboarding_only` 不得因此修改项目或切换意图,只在收口时提醒仍需代码开发。若页面和支付能力已存在、仅缺首页、商品页、支付页图片,则在签约材料类别收集并上传;已签约时不再要求这组图片。
|
|
@@ -117,35 +82,48 @@ Step 1: 环境检查 → Step 2: 方案规划 → Step 3: 登录授权
|
|
|
117
82
|
|
|
118
83
|
---
|
|
119
84
|
|
|
120
|
-
|
|
85
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CORE:END -->
|
|
86
|
+
|
|
87
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:START -->
|
|
88
|
+
进入任何产品开通环境检查、产品/MCC 澄清或方案确认前,先从本 flow 目录执行一次确定性平台入口:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
node ../normal/scripts/onboarding_message_runner.mjs platform-entry
|
|
92
|
+
```
|
|
121
93
|
|
|
122
|
-
|
|
94
|
+
- Windows:runner stdout 是唯一对客正文,必须原文发送;发送后停止本 flow 的产品开通动作,不再执行 Step 1、MCC 澄清、方案确认、登录或材料收集。`onboarding_only` 在根意图识别后进入本 flow 即执行;`full_process` 保留已完成的 Integration 实际结果,在衔接本 flow 时执行。
|
|
95
|
+
- 非 Windows:runner 成功且 stdout 为空,直接继续下方既有流程,不输出平台提示,不改变步骤、确认或完成条件。
|
|
96
|
+
- 命令失败或输出无法唯一判断时停止并核对 runner,禁止手写、改写或补发近似引导。
|
|
123
97
|
|
|
124
|
-
|
|
98
|
+
企业账号边界:如果用户明确表示当前要用企业账号通过 Skill 完成产品开通,必须执行下列标准消息命令并停止本 flow 的产品开通动作,引导前往支付宝商家平台。不得主动增加账号类型确认,也不得根据 MCC、营业执照字段或“公司”等泛化描述推断为企业账号;没有明确依据时继续按本 flow 执行。
|
|
125
99
|
|
|
126
100
|
```bash
|
|
127
|
-
|
|
101
|
+
printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs onboarding.enterprise.unsupported --variant <ONBOARDING_ONLY|FULL_PROCESS>
|
|
128
102
|
```
|
|
129
103
|
|
|
130
|
-
|
|
131
|
-
- `CLI_ENV:NEEDS_SETUP`:此时才读取 `../normal/alipay-cli-env.md`,按其现有安装、PATH、联网权限和验证规则补齐缺失项,再重跑同一检查;未取得 `READY` 不得进入 Step 2。
|
|
132
|
-
- 其他输出、非 0 或 marker 冲突:停在本步骤核对脚本,不得猜测环境已就绪。
|
|
104
|
+
`onboarding_only` 固定使用 `ONBOARDING_ONLY`;`full_process` 只会在代码开发已通过后进入本 flow,固定使用 `FULL_PROCESS`。renderer stdout 是该意图的最终产品开通消息,必须把 stdout 原文作为当前回复正文发给用户;命令面板、折叠输出或“已渲染/已展示”说明不能替代对客消息。发出 stdout 原文后直接停止本 flow,不再执行 Step 6 或追加第二份收口。
|
|
133
105
|
|
|
134
|
-
|
|
106
|
+
## 一、产品映射
|
|
135
107
|
|
|
136
|
-
|
|
108
|
+
> 术语说明:本 Skill 对客统一使用“AI 网页应用收款”,覆盖电脑网页和手机浏览器网页/H5 场景;“网站支付”“电脑网站支付”“PC网站支付”“手机网站支付”“H5支付”均作为输入别名映射到同一产品。签约 payload 中的 `appType=PC_WEB` 是接口字段名,不代表只能用于 PC 端网页。
|
|
137
109
|
|
|
138
|
-
|
|
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 才用于创建 |
|
|
115
|
+
|
|
116
|
+
## 三、Step 详解
|
|
139
117
|
|
|
140
|
-
### Step
|
|
118
|
+
### Step 1: 方案规划
|
|
141
119
|
|
|
142
120
|
**产品匹配规则**:
|
|
143
121
|
|
|
144
122
|
| 场景关键词 | 推荐产品 |
|
|
145
123
|
|-----------|----------|
|
|
146
|
-
| AI、智能体、大模型、Agent、MCP | 按量付费 |
|
|
147
|
-
| 网站、网页、PC、电脑、电商、商城、H5 |
|
|
148
|
-
| APP、应用内支付、手机 APP |
|
|
124
|
+
| AI、智能体、大模型、Agent、MCP | AI 按量付费 |
|
|
125
|
+
| 网站、网页、PC、电脑、电商、商城、H5 | AI 网页应用收款 |
|
|
126
|
+
| APP、应用内支付、手机 APP | AI 移动应用收款 |
|
|
149
127
|
|
|
150
128
|
产品能够从用户已提供的产品名称或业务描述中可靠映射时直接使用,不重复询问。仍无法唯一确定时,只执行下列固定消息命令;renderer stdout 是本轮唯一对客正文,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止并等待用户回复产品名称或明确业务描述。回复后仍无法唯一确定时继续执行同一消息,禁止自由补问或推定产品。
|
|
151
129
|
|
|
@@ -155,23 +133,15 @@ printf '%s' '{}' | node ../normal/scripts/render_customer_message.mjs product.cl
|
|
|
155
133
|
|
|
156
134
|
产品明确后,若用户尚未提供经营描述或已知 MCC,只执行 `node ../normal/scripts/onboarding_message_runner.mjs mcc-clarify --product-type "$PRODUCT_TYPE"`,把 stdout 原文作为当前回复正文发给用户并停止本轮。`mcc-clarify` 只用于首次缺少检索输入;用户已经提供任何可检索描述后不得再次调用。
|
|
157
135
|
|
|
158
|
-
已有经营描述或明确类目时,将其作为 `MCC_SEARCH_QUERY`
|
|
136
|
+
已有经营描述或明确类目时,将其作为 `MCC_SEARCH_QUERY` 执行唯一的本地确定性解析入口;该命令不调用远程服务:
|
|
159
137
|
|
|
160
138
|
```bash
|
|
161
|
-
node ../normal/scripts/onboarding_message_runner.mjs mcc-
|
|
139
|
+
node ../normal/scripts/onboarding_message_runner.mjs mcc-resolve --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE"
|
|
162
140
|
```
|
|
163
141
|
|
|
164
|
-
|
|
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` 组合、自由拼候选表、解释、示例或“是否继续”等近似问法。
|
|
165
143
|
|
|
166
|
-
|
|
167
|
-
node ../normal/scripts/onboarding_message_runner.mjs mcc-candidates --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE"
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
用户回复序号时,只能映射到上一条 `mcc-candidates` stdout 中同一份候选表的对应行;用户回复 MCC 二级类目名称或编码时,必须重新执行 `mcc-search` 并得到 `UNIQUE` 后才可使用。完全无本地候选即 `matchType=NONE` 时,只执行下列 runner 命令;runner 必须输出独立的 `onboarding.mcc.no_match`,不得回退或再次渲染 `onboarding.mcc.clarify`。Agent 必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止。用户下一条输入新的经营描述、MCC 二级类目名称或编码时,必须将该输入作为新的 `MCC_SEARCH_QUERY` 自动重新执行 `mcc-search`:`UNIQUE` 继续方案确认,`MULTIPLE` 输出真实候选,仍为 `NONE` 才再次输出 `onboarding.mcc.no_match`;无需用户输入固定重试口令,不得继续猜测或追加近似候选。
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
node ../normal/scripts/onboarding_message_runner.mjs mcc-candidates --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE"
|
|
174
|
-
```
|
|
144
|
+
用户回复序号时,只能映射到上一条 `mcc-resolve` stdout 中同一份候选表的对应行,并把该行完整 MCC 编码作为新的 `MCC_SEARCH_QUERY` 再执行同一 `mcc-resolve`;用户回复 MCC 二级类目名称、编码或新的经营描述时也自动作为新查询执行同一入口。只有新结果为 `UNIQUE` 才继续方案确认;`MULTIPLE|NONE` 继续使用 runner 本次真实 stdout。无需固定重试口令,不得猜测或追加近似候选。
|
|
175
145
|
|
|
176
146
|
产品确定后,`salesCode`、`scope` 和材料要求统一取自“一、产品映射”,禁止在本步骤另建映射或改写固定值。
|
|
177
147
|
|
|
@@ -189,7 +159,7 @@ node ../normal/scripts/onboarding_message_runner.mjs mcc-candidates --query "$MC
|
|
|
189
159
|
3. 当前产品在“未签约”或“需要新建应用”时可能需要的条件材料;不在状态查询前要求用户确认材料齐备状态。
|
|
190
160
|
4. 固定展示企业账号暂不支持通过 Skill 完成产品开通,并引导前往支付宝商家平台;这只是边界预告,不新增账号类型问题。用户已经明确表示使用企业账号时不得继续展示可确认方案,改走入口处的停止分支。
|
|
191
161
|
|
|
192
|
-
方案确认必须使用 `../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
|
|
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 原文作为当前回复正文发给用户,发出后立即停止本轮。
|
|
193
163
|
|
|
194
164
|
```bash
|
|
195
165
|
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
@@ -201,23 +171,45 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
201
171
|
| node ../normal/scripts/render_customer_message.mjs onboarding.plan.confirm --variant <VARIANT>
|
|
202
172
|
```
|
|
203
173
|
|
|
204
|
-
产品无法可靠识别时只使用上方 `product.clarify`;产品明确但尚无 MCC 检索输入时只使用一次 `mcc-clarify
|
|
174
|
+
产品无法可靠识别时只使用上方 `product.clarify`;产品明确但尚无 MCC 检索输入时只使用一次 `mcc-clarify`;已有检索输入后统一使用 `mcc-resolve`,由 runner 直接返回唯一事实、候选或 `onboarding.mcc.no_match`。产品与 MCC 都明确后才进入方案确认。用户已经明确提供的信息不得重复询问,但未经用户明确确认不得执行 `login`。登录后必须先执行 Step 3.1 的只读查询,再根据实际结果收集签约、服务和应用分支的必要资料。
|
|
205
175
|
|
|
206
176
|
**阻塞规则(执行约束,不是对客正文)**:必须等待用户明确确认产品、MCC 和授权范围。确认信息有误时先更新并重新渲染标准消息;`full_process` 的项目状态回答、代码开发确认和服务声明确认均不能替代本确认。已经取得材料时继承实际图片引用、APP 名称、缺失项和校验结果,不重复采集,但仍需完成本步骤确认。缺少实际入参或校验证据时必须补齐;产品或 MCC 变化后旧回复失效。
|
|
207
177
|
|
|
208
|
-
`full_process` 的完整接入启动确认不能替代本确认;MCC
|
|
178
|
+
`full_process` 的完整接入启动确认不能替代本确认;MCC 或产品变化后必须重新确认。收到回复后执行 `node ../normal/scripts/interaction_reply.mjs confirm --reply "$USER_REPLY"`;只有唯一 `REPLY_DECISION=CONFIRMED` 表示确认,否定、疑问、取消、修改意见和无法唯一判断的回复按问题、修改或补充处理。`1`、`继续`、`继续推进`、`好了`、`确认`、`OK` 等登记的明确肯定表达语义等价。
|
|
179
|
+
|
|
180
|
+
当前方案的回复通过统一判定器后,执行 `node ../normal/scripts/flow_loader.mjs onboarding execute --product-type "$PRODUCT_TYPE"` 加载 Step 2/3;该 loader 自动记录 `onboarding.user_confirmed`。禁止直接跳到环境检查、授权或发现查询。
|
|
181
|
+
|
|
182
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_ENTRY:END -->
|
|
183
|
+
|
|
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
|
+
```
|
|
193
|
+
|
|
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;只有安装失败、权限不足或缺少必需工具时才输出实际问题和恢复动作。工具能力差异不得导致任务、步骤或完成状态被省略。
|
|
209
201
|
|
|
210
202
|
### Step 3: 登录授权
|
|
211
203
|
|
|
212
|
-
|
|
204
|
+
用户确认方案后只调用本节 `auth.sh init|open|wait|confirm|mismatch` 命令;脚本异常需要核对授权业务语义时才读取 `modules/authorization.md`。禁止直调 `alipay-cli login`、解析原始输出或展示 `verification_url`。
|
|
213
205
|
|
|
214
|
-
|
|
206
|
+
取得当前方案摘要的有效肯定确认后,`execute` 阶段 loader 已记录 `onboarding.user_confirmed`;`auth.sh init` 会在固定授权上下文机器校验通过、开始授权业务动作前记录 `onboarding.auth.start`。两者都不替代登录、scope 或 MCC 完成条件,不得另行执行 telemetry 命令造成重复事件。
|
|
215
207
|
|
|
216
208
|
这些脚本是联网命令,首次执行即按 `../normal/alipay-cli-env.md` 申请权限。`AUTH_FLOW:RETRY_WITH_NETWORK` 只表示当前执行环境无法确认结果:取得权限后重试同一完整命令,不得解释为用户本机或支付宝业务失败,也不得改为手工 logout/login。
|
|
217
209
|
|
|
218
|
-
Step 2
|
|
210
|
+
Step 1 的方案确认和 Step 2 的环境 READY 都是授权前置;产品或 MCC 未有效确认、环境未就绪时禁止 login,`full_process` 也不得绕过。
|
|
219
211
|
|
|
220
|
-
`auth.sh init --defer-open`
|
|
212
|
+
`auth.sh init --defer-open` 和本节登记的 `app.sh key` 命令先校验 URL 并输出页面说明;Agent 把 stdout 原文作为独立对客消息送达后,立即执行对应 open 子命令使用受控 opener,不新增确认。具体中性文案和兜底见对应模块,不改变 MCP 契约。
|
|
221
213
|
|
|
222
214
|
**完整流程**:
|
|
223
215
|
```
|
|
@@ -233,13 +225,13 @@ Step 2 的方案确认是授权前置;产品或 MCC 未有效确认时禁止 l
|
|
|
233
225
|
├─ open 返回 AUTH_OPEN:OPENED|OPEN_FAILED|GUI_UNAVAILABLE|LINK_ONLY → 继续执行 wait;后 3 种只表示 opener 结果,不影响已交付 URL
|
|
234
226
|
├─ 最多 12 次、间隔 5 秒;成功或过期立即停止
|
|
235
227
|
├─ AUTH_FLOW:AUTH_SUCCESS → 进入 Step 3.1并复用合法签约查询事实
|
|
236
|
-
├─ AUTH_FLOW:PENDING → 输出 auth.pending
|
|
228
|
+
├─ AUTH_FLOW:PENDING → 输出 auth.pending,等待用户明确表示扫码已完成
|
|
237
229
|
├─ AUTH_FLOW:EXPIRED → 重新执行第 1 项生成授权链接
|
|
238
230
|
├─ AUTH_FLOW:CONTEXT_MISMATCH → 当前动作未执行 login --complete/logout;使用当前已确认的完整参数重新执行第 1 项
|
|
239
231
|
├─ AUTH_FLOW:RETRY_WITH_NETWORK → 取得联网权限后重试同一完整命令
|
|
240
232
|
├─ AUTH_FLOW:FAILED → 停止并按错误输出恢复,禁止进入 Step 3.1
|
|
241
233
|
└─ AUTH_FLOW:SCOPE_MISMATCH / MCC_MISMATCH → 执行第 4 项
|
|
242
|
-
3. 仅 PENDING
|
|
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 继续等待且不重启轮询
|
|
243
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"
|
|
244
236
|
├─ AUTH_FLOW:READY_TO_OPEN → 输出非阻塞授权页并按第 2 项执行 open + wait
|
|
245
237
|
├─ AUTH_FLOW:CONTEXT_MISMATCH → 未执行 logout;使用当前已确认的完整参数重新执行第 1 项
|
|
@@ -247,31 +239,40 @@ Step 2 的方案确认是授权前置;产品或 MCC 未有效确认时禁止 l
|
|
|
247
239
|
└─ mismatch 统一 logout;成功后用正确 scope 重建授权页
|
|
248
240
|
```
|
|
249
241
|
|
|
250
|
-
`AUTH_FLOW:CONTEXT_MISMATCH` 适用于 `open|wait|confirm|mismatch` 的显式上下文与同一次 init 短时状态不一致;脚本必须在任何 `login --complete/logout` 前停止且不输出对客正文。Agent 不得忽略差异、改用旧状态继续或手工清理状态;必须立即用当前 Step
|
|
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 或新增用户确认。
|
|
251
243
|
|
|
252
244
|
`auth.page` 非阻塞并追加“扫码完成后请回到 Agent 对话页面”;`auth.pending` 仅由 wait 耗尽或单次 confirm 的 PENDING 渲染,其他对客终态由脚本渲染对应消息。自动轮询期间即使 `login --complete` 已返回可复核状态,只要 `whoami` 尚未取得有效本机登录态,也继续按 PENDING 处理并消耗本次 wait 预算,不输出断头失败文案。剔除 `ALIPAY_AIPAY_INTERNAL:` 内部行后的 stdout 是当前动作唯一对客正文;禁止再次调用 renderer、另写近似话术、输出 stderr 或内部行、重复转述。授权脚本明确返回链接过期时必须重建,旧回复失效。
|
|
253
245
|
|
|
254
246
|
授权 `scope` 统一使用“一、产品映射”中当前产品的固定值,禁止自行修改。
|
|
255
247
|
|
|
256
|
-
|
|
248
|
+
必须原样展示 init stdout,并在 login 前完成固定产品/MCC 上下文和 URL 逐项校验。禁止 CLI `verification_url`、非登记 URL 或要求用户输入确认码;这些正常路径约束均由本节命令和 `auth.sh` 托管,不为重复确认而读取模块。
|
|
257
249
|
|
|
258
250
|
#### Step 3.1: 状态与资源查询(登录授权后置检查)
|
|
259
251
|
|
|
260
252
|
**只读查询组**:登录成功后自动连续执行,不增加“是否查询”确认:
|
|
261
253
|
|
|
262
|
-
|
|
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。
|
|
263
264
|
|
|
264
|
-
|
|
265
|
+
不存在全局授权阻断时,执行 `node ../normal/scripts/flow_loader.mjs onboarding branch-summary` 加载 Step 4 和三个分支共用的 Step 5 约束;共用区块只加载一次,不得整份读取后续 flow。
|
|
265
266
|
|
|
266
|
-
Step 5
|
|
267
|
+
Step 5 直接使用对应 phase 的完整命令;仅出现脚本异常、需要解释登记业务语义或用户明确要求详情时读取当前分支模块,错误恢复时才读取 `error-handling.md`。不得提前加载其他分支,也不重复读取已经读过且未变化的章节。
|
|
267
268
|
|
|
268
|
-
1.
|
|
269
|
-
2.
|
|
270
|
-
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 分支;不得宣称返回应用已与当前支付产品绑定。
|
|
271
272
|
|
|
272
|
-
> ⚠️ 脚本通过 `error_handler.sh` 间接初始化 `DEV_TOOL_NAME
|
|
273
|
+
> ⚠️ 脚本通过 `error_handler.sh` 间接初始化 `DEV_TOOL_NAME`、当前 `run_id` 对应的 `PLATFORM_ID` 和 CLI `PRODUCT`;签约查询必须传入当前产品的 `--sales-code` 和 `--product-type`(aipay|webpay|apppay)做一致性校验。AI 网页应用收款和 AI 移动应用收款使用不同 salesCode,禁止混用。
|
|
273
274
|
|
|
274
|
-
各适用查询仍是独立 CLI/MCP
|
|
275
|
+
各适用查询仍是独立 CLI/MCP 调用,runner 只编排现有脚本,必须分别完成原有错误检测,禁止伪造合并 MCP。失败后按错误类型处理:
|
|
275
276
|
|
|
276
277
|
所有内部事实行都必须以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并 stdout/stderr 时也逐行剔除。无前缀的相似文本不得作为流程事实;唯一字段缺失、重复或冲突时按结构异常处理。
|
|
277
278
|
|
|
@@ -281,38 +282,18 @@ Step 5 只读取当前实际推进的签约、服务或应用模块;错误恢
|
|
|
281
282
|
|
|
282
283
|
任何恢复都不得要求用户重交未变化且已验证的资料,也不得重做不受会话主体变化影响的成功步骤。
|
|
283
284
|
|
|
284
|
-
签约状态和 `FLOW:*` 映射只按
|
|
285
|
+
签约状态和 `FLOW:*` 映射只按 discovery runner 的签约 envelope 与共用 parser 结果执行:`SIGNED_EFFECTIVE` 与 `SIGN_SUBMITTED` 均禁止重复提交签约;`OTHER_STATUS` 不提交签约,只展示已确认结果和待核验项。Step 4 再根据脚本输出的实际状态收集签约材料并处理应用/服务候选。
|
|
285
286
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
先使用 `onboarding_message_runner.mjs discovery-summary` 展示查询摘要:签约、服务市场、应用发布各一行;网站支付和 APP 支付的服务市场由 runner/renderer 固定为“无需处理”。状态只能来自本轮脚本结果,查询失败必须显示“查询失败”,不得当作空列表。
|
|
287
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_EXECUTE:END -->
|
|
289
288
|
|
|
290
|
-
|
|
289
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_BRANCH_SUMMARY:START -->
|
|
290
|
+
### Step 4: 分支摘要与分类材料
|
|
291
291
|
|
|
292
|
-
|
|
293
|
-
- `serviceFlow` 仅按量付费传入,只允许 `FLOW:CREATE_NEW|FLOW:SELECT|QUERY_FAILED`;网站支付和 APP 支付不得构造或传入服务状态字段。
|
|
294
|
-
- `appFlow` 只允许 `FLOW:CREATE_NEW|FLOW:SELECT|FLOW:PENDING_APPLICATIONS|QUERY_FAILED`。
|
|
292
|
+
Step 3.1 的 discovery runner 已在同一次 stdout 中展示签约、服务市场和应用发布摘要;网站支付和 APP 支付的服务市场固定为“无需处理”,查询失败显示“查询失败”。进入本阶段后只消费同一 `DISCOVERY_RESULT` envelope,禁止再次调用 `discovery-summary`、手写状态枚举或重复输出摘要。
|
|
295
293
|
|
|
296
|
-
|
|
294
|
+
随后按“签约 -> 服务 -> 应用”的默认顺序一次只处理一个实际适用且当前可推进的类别。三个适用分支均已处理,或其实际失败、未知、待生效、待审核和人工待办已经登记后,执行 `node ../normal/scripts/flow_loader.mjs onboarding closeout` 加载 Step 6;仍有可推进分支未处理时不得提前收口。
|
|
297
295
|
|
|
298
|
-
|
|
299
|
-
if [ "$PRODUCT_TYPE" = "aipay" ]; then
|
|
300
|
-
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
301
|
-
--arg signStatus "$SIGN_STATUS" \
|
|
302
|
-
--arg serviceFlow "$SERVICE_FLOW" \
|
|
303
|
-
--arg appFlow "$APP_FLOW" \
|
|
304
|
-
'{signStatus:$signStatus,serviceFlow:$serviceFlow,appFlow:$appFlow}')
|
|
305
|
-
else
|
|
306
|
-
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
307
|
-
--arg signStatus "$SIGN_STATUS" \
|
|
308
|
-
--arg appFlow "$APP_FLOW" \
|
|
309
|
-
'{signStatus:$signStatus,appFlow:$appFlow}')
|
|
310
|
-
fi
|
|
311
|
-
printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
312
|
-
| node ../normal/scripts/onboarding_message_runner.mjs discovery-summary --product-type "$PRODUCT_TYPE"
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
随后按“签约 -> 服务 -> 应用”的默认顺序一次只处理一个实际适用且当前可推进的类别。
|
|
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;未轮到或不适用的分支不得加载、不得记录。
|
|
316
297
|
|
|
317
298
|
轮到服务或应用类别时才执行对应 runner;其 stdout 一次生成候选事实和适用选择提示,是当前唯一对客正文。禁止提前展示、手工拼表、压缩为纯 ID、拆开渲染或改写:
|
|
318
299
|
|
|
@@ -359,7 +340,7 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
359
340
|
**应用分支**:
|
|
360
341
|
|
|
361
342
|
- `app.sh list` 只提供带统一前缀的内部候选事实;应用类别正文只能由上方 `application-candidates` runner 使用同一快照一次生成。`ON_LINE` 只接受完整 `appId` 或 `新建`;仅非上线候选时由用户选 `暂不新建` 或 `新建`。
|
|
362
|
-
- 列表确实为空或用户选择新建时,按量付费/网站支付一次说明应用公钥要求;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`
|
|
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` 候选时进入复用路径,否则应用分支转为人工待办;该等待和待办都不阻断签约及其他事实明确的独立分支。
|
|
363
344
|
|
|
364
345
|
```bash
|
|
365
346
|
printf '%s' '{}' \
|
|
@@ -381,15 +362,15 @@ APP 支付未签约时的签约字段:
|
|
|
381
362
|
| APP界面截图 | 必填 | 3张截图,支持拖拽上传或提供本地文件路径,顺序为首页、商品页、支付页 |
|
|
382
363
|
|
|
383
364
|
**脚本**:
|
|
384
|
-
- `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 将拖拽后的本地文件路径传给脚本
|
|
385
366
|
|
|
386
367
|
上传成功时只把脚本 stdout 的“截图上传成功”原文对客;从带统一前缀的 `SCREENSHOT_HOME_REF`、`SCREENSHOT_SHOP_REF`、`SCREENSHOT_PAY_REF` 内部事实按首页、商品页、支付页顺序记录三个图片引用,严禁对客展示这些引用或 `collect_information` 等内部状态。APP 支付同时保留已校验的 APP 名称。
|
|
387
368
|
|
|
388
369
|
### Step 5: 产品开通推进
|
|
389
370
|
|
|
390
|
-
|
|
371
|
+
只加载当前实际推进的 `signing|service|application` phase;模块仅按上方异常/解释条件读取,已读且未变化的内容不重复读取。
|
|
391
372
|
|
|
392
|
-
签约状态为 `NOT_SIGNED` 时,材料缺失/错误继续使用 `materials.category.collect`,完整通过后直接执行 5.1,不增加回复 `1`。服务资料通过后展示非阻塞 `service.create.summary`
|
|
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`。
|
|
393
374
|
|
|
394
375
|
服务创建信息固定使用 `../normal/json/customer-messages.json` 的 `service.create.summary`。该消息非阻塞,只传入即将提交的五项服务资料;renderer 成功后同一流程直接执行 5.2 创建命令。必须执行:
|
|
395
376
|
|
|
@@ -411,7 +392,7 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
411
392
|
MESSAGE_INPUT_JSON=$(jq -cn \
|
|
412
393
|
--arg sessionSummary "$SESSION_SUMMARY" \
|
|
413
394
|
--arg subjectSummary "$SUBJECT_SUMMARY" \
|
|
414
|
-
--arg productName "按量付费" \
|
|
395
|
+
--arg productName "AI 按量付费" \
|
|
415
396
|
--arg actionTypes "服务修改" \
|
|
416
397
|
--arg serviceId "$SERVICE_ID" \
|
|
417
398
|
--arg serviceName "$SERVICE_NAME" \
|
|
@@ -424,11 +405,11 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
424
405
|
| node ../normal/scripts/render_customer_message.mjs onboarding.write.confirm --variant SERVICE_UPDATE_ONLY
|
|
425
406
|
```
|
|
426
407
|
|
|
427
|
-
创建摘要和修改确认中的参数必须逐字来自本轮用户材料及即将执行的脚本参数;服务单价以 `service.sh validate` 输出的带统一前缀 `SERVICE_PRICING=<纯数字>` 内部事实为准并原样复用到 renderer 和 `service.sh save`,不得重新追加 `元/次` 或说明文字,模板会展示单位。修改确认的会话、脱敏主体和 `serviceId` 还必须来自本轮实际查询。renderer 必须拒绝 variant/动作不匹配、缺字段、多传无关字段、非按量付费服务修改、非法单价或非法 JSON
|
|
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` 重复确认。
|
|
428
409
|
|
|
429
410
|
脚本使用 `network_retry.sh` 时,业务错误只调用一次;网络/服务错误最多自动重试两次、每次间隔 3 秒。非幂等写结果为 `MAYBE_SENT` 时停止重试,使用现有只读查询核验;无法确认时明确输出未知结果,禁止盲目重复写入。自动重试预算耗尽后不立即询问“重试/退出”:记录失败动作、受影响分支和恢复方式,依赖允许时继续其他独立分支,并在 Step 6 一次收口所有仍未恢复的分支。
|
|
430
411
|
|
|
431
|
-
|
|
412
|
+
**阻塞规则(执行约束,不是对客正文)**:服务创建不进入阻塞确认;五项资料完整、格式校验通过且当前服务数量小于固定上限 `10` 后,展示 `service.create.summary` 并直接创建;达到 `10` 个时禁止调用保存方法。只有服务修改必须在同一有效登录会话、产品、动作和目标摘要后等待用户的明确肯定回复;`1` 只是快捷输入,`继续/确认/OK/好了` 等登记肯定表达语义等价。CLI 未返回主体标识时,标准摘要必须说明由用户确认当前登录账号就是操作目标。启动确认、其他目标或动作的确认、沉默和仅提供资料均不能替代修改确认。签约提交不进入本阻塞确认:只有签约状态为 `NOT_SIGNED` 且当前产品所需材料全部完整并校验通过时才直接执行,缺失或校验失败继续材料提示。应用创建只接受本轮当前候选列表后的明确 `新建` 选择,候选变化必须重新选择;本节登记的 `app.sh key` 命令仅生成公钥确认页,用户提供完整公钥后直接调用,页面 stdout 独立送达后执行 `app.sh open-key-page`,最终设置仍由用户在官方页面确认;新建应用的公钥校验成功后直接提审。登录会话、主体、产品、服务修改目标或关键金额变化时必须重新确认。服务修改确认 renderer stdout 是该动作唯一对客消息,必须把 stdout 原文作为当前回复正文发给用户,发出后立即停止本轮。
|
|
432
413
|
|
|
433
414
|
写失败或响应不明先按现有只读能力核验,禁止直接重复;尚不存在的 `appId`、公钥确认或审核结果不能提前授权。
|
|
434
415
|
|
|
@@ -436,31 +417,46 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
436
417
|
|
|
437
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,正式上线再替换。
|
|
438
419
|
|
|
420
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_BRANCH_SUMMARY:END -->
|
|
439
421
|
|
|
422
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SIGNING:START -->
|
|
423
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.signing.start -->
|
|
440
424
|
#### 5.1 产品签约
|
|
441
425
|
|
|
442
|
-
仅 `NOT_SIGNED`
|
|
426
|
+
仅 `NOT_SIGNED` 执行本节;其他状态禁止重复提交。使用当前产品、MCC 和已验证材料执行下列固定命令;脚本拥有完整固定字段、FLOW 信号和解析,模块只保留业务语义与维护依据。按量付费没有页面材料,产品与 MCC 已确认且本轮签约状态为 `NOT_SIGNED` 后直接提交;网站支付必须在三个图片引用均上传并通过校验后直接提交;APP 支付必须在 APP 名称和三个图片引用全部通过校验后直接提交。任一字段缺失或校验失败时回到 Step 4 的 `materials.category.collect`,禁止执行下列命令,也不增加回复 `1`。
|
|
443
427
|
|
|
444
|
-
|
|
428
|
+
进入本 flow 的 `signing` 阶段时,阶段 loader 会在签约分支动作开始前记录 `onboarding.signing.start`;不得另行执行 telemetry 命令。
|
|
445
429
|
|
|
446
430
|
**固定命令契约**:按当前产品原样使用对应命令结构,只替换尖括号中的实际值,禁止增删、改名或猜测参数:
|
|
447
431
|
|
|
432
|
+
<!-- ALIPAY_AIPAY_PRODUCT:aipay:START -->
|
|
448
433
|
```bash
|
|
449
|
-
# 按量付费
|
|
450
434
|
bash modules/scripts/ar_sign_apply.sh --product aipay --sales-code "I1080300001000160457" --mcc-code "<mccCode>"
|
|
451
|
-
|
|
435
|
+
```
|
|
436
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
437
|
+
<!-- ALIPAY_AIPAY_PRODUCT:webpay:START -->
|
|
438
|
+
```bash
|
|
452
439
|
bash modules/scripts/ar_sign_apply.sh --product webpay --sales-code "I1080300001000041203" --mcc-code "<mccCode>" --picurl1 "<imageRef1>" --picurl2 "<imageRef2>" --picurl3 "<imageRef3>"
|
|
453
|
-
|
|
440
|
+
```
|
|
441
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
442
|
+
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
443
|
+
```bash
|
|
454
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>"
|
|
455
445
|
```
|
|
446
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
456
447
|
|
|
457
448
|
提交成功后不等待或轮询签约生效,只记录“已提交,等待生效”。服务和应用是否推进只取决于各自前置条件,不取决于本次签约提交是否成功;复用 Step 3.1 和 Step 4 的成功结果,只在会话、主体、候选资源变化或原查询失败时刷新受影响分支,刷新失败不清除其他成功结果。
|
|
458
449
|
|
|
450
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SIGNING:END -->
|
|
451
|
+
|
|
452
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SERVICE:START -->
|
|
453
|
+
<!-- ALIPAY_AIPAY_PRODUCTS:aipay -->
|
|
454
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.service.start products=aipay -->
|
|
459
455
|
#### 5.2 服务市场注册(仅按量付费)
|
|
460
456
|
|
|
461
|
-
|
|
457
|
+
按本节固定命令复用、创建或修改;创建/修改必须用完整五项资料通过 `validate`。服务单价可输入纯数字或带 `元`/`元/次` 后缀(可空格);后续只用脚本的 `SERVICE_PRICING=0.08` 内部事实,禁止对客。创建校验通过后先输出非阻塞 `service.create.summary` 并直接执行创建;修改校验通过后必须完成 `SERVICE_UPDATE_ONLY` 确认再执行。成功取得的实际 `serviceId` 记为 `productionServiceId`。保存响应不含服务状态;仅后续列表按 `serviceId` 查到时记录实际状态,否则写“状态未取得”,不得推断或重复 `save`。
|
|
462
458
|
|
|
463
|
-
|
|
459
|
+
进入本 flow 的 `service` 阶段时,阶段 loader 会在服务分支动作开始前记录 `onboarding.service.start`;不得另行执行 telemetry 命令。
|
|
464
460
|
|
|
465
461
|
**固定命令契约**:复用已有服务不调用 `save`;创建不传 `--service-id`,修改必须传入用户从 Step 3.1 候选中选定的实际 `serviceId` 和全部字段:
|
|
466
462
|
|
|
@@ -472,40 +468,53 @@ bash modules/scripts/service.sh save --name "<name>" --desc "<desc>" --url "<url
|
|
|
472
468
|
bash modules/scripts/service.sh save --service-id "<serviceId>" --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>"
|
|
473
469
|
```
|
|
474
470
|
|
|
471
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_SERVICE:END -->
|
|
472
|
+
|
|
473
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_APPLICATION:START -->
|
|
474
|
+
<!-- ALIPAY_AIPAY_STAGE:onboarding.application.start -->
|
|
475
475
|
#### 5.3 应用发布
|
|
476
476
|
|
|
477
|
-
**应用分支**:按量付费/网站支付使用 `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 -->
|
|
478
482
|
|
|
479
|
-
|
|
483
|
+
进入本 flow 的 `application` 阶段时,阶段 loader 会在应用分支动作开始前记录 `onboarding.application.start`;不得另行执行 telemetry 命令。
|
|
480
484
|
|
|
481
485
|
**固定命令契约**:只替换实际值,禁止改写位置参数。所有命令的 `appId` 必须逐字使用本轮候选或 `create` 输出;新建应用使用组合命令,复用缺公钥仍使用 `verify-key` 后 `reuse`。
|
|
482
486
|
|
|
487
|
+
<!-- ALIPAY_AIPAY_PRODUCT:aipay,webpay:START -->
|
|
483
488
|
```bash
|
|
484
|
-
# 按量付费/网站支付新建 WEBAPP
|
|
485
489
|
bash modules/scripts/app.sh create --product-type "<aipay|webpay>" --sales-code "<当前产品码>"
|
|
486
|
-
|
|
490
|
+
```
|
|
491
|
+
<!-- ALIPAY_AIPAY_PRODUCT:END -->
|
|
492
|
+
<!-- ALIPAY_AIPAY_PRODUCT:apppay:START -->
|
|
493
|
+
```bash
|
|
487
494
|
bash modules/scripts/app.sh create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform IOS --bundle-id "<bundleId>"
|
|
488
495
|
bash modules/scripts/app.sh create --product-type apppay --sales-code "I1080300001000041313" --mobile-platform ANDROID --app-package "<appPackage>" --app-sign "<appSign>"
|
|
489
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>"
|
|
490
|
-
|
|
491
|
-
# HarmonyOS:禁止调用 app.sh create,只渲染固定人工创建指引。
|
|
492
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
|
|
493
502
|
# 下列子命令的 appId/publicKey 均为位置参数
|
|
494
|
-
bash modules/scripts/app.sh reuse "<appId>"
|
|
495
|
-
bash modules/scripts/app.sh key --defer-open "<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>"
|
|
496
505
|
bash modules/scripts/app.sh open-key-page "<appId>"
|
|
497
506
|
# 新建应用:页面确认后校验并直接提审
|
|
498
|
-
bash modules/scripts/app.sh verify-key-and-audit "<本轮create输出的appId>" "<同一publicKey>"
|
|
507
|
+
bash modules/scripts/app.sh verify-key-and-audit --product-type "$PRODUCT_TYPE" "<本轮create输出的appId>" "<同一publicKey>"
|
|
499
508
|
# 复用应用缺公钥恢复:校验后重新执行 reuse
|
|
500
|
-
bash modules/scripts/app.sh verify-key "<appId>" "<同一publicKey>"
|
|
501
|
-
#
|
|
502
|
-
|
|
503
|
-
|
|
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>"
|
|
504
513
|
# 独立提审恢复入口仍保留完整密钥查询 guard
|
|
505
|
-
bash modules/scripts/app.sh audit "<appId>"
|
|
514
|
+
bash modules/scripts/app.sh audit --product-type "$PRODUCT_TYPE" "<appId>"
|
|
506
515
|
```
|
|
507
516
|
|
|
508
|
-
**复用应用**:执行 `bash modules/scripts/app.sh reuse "<appId>"`,其中 `<appId>` 必须逐字来自本轮最近一次 `app.sh list` 的实际候选,并由用户按完整 ID 选定;不接受序号、历史候选或 Agent 转换值。复用已有 `MOBILEAPP` 时不需要采集 `mobilePlatform`、`bundleId`、`appPackage` 或 `appSign`;这些字段仅在新建 `MOBILEAPP` 时需要。
|
|
517
|
+
**复用应用**:执行 `bash modules/scripts/app.sh reuse --product-type "$PRODUCT_TYPE" "<appId>"`,其中 `<appId>` 必须逐字来自本轮最近一次 `app.sh list` 的实际候选,并由用户按完整 ID 选定;不接受序号、历史候选或 Agent 转换值。复用已有 `MOBILEAPP` 时不需要采集 `mobilePlatform`、`bundleId`、`appPackage` 或 `appSign`;这些字段仅在新建 `MOBILEAPP` 时需要。
|
|
509
518
|
|
|
510
519
|
仅 `CREATE` 分支重查列表,将本次唯一快照记为 `RECHECK_APP_CANDIDATES_JSON` 后执行下列 runner,禁止 Agent 手工比较。stdout 为空且资料齐备时直接创建;非空时原文发出并重新选择;重查失败时禁止创建但不回滚其他分支。非 `ON_LINE` 不可复用,`FLOW:PENDING_APPLICATIONS` 不得当作空列表。
|
|
511
520
|
|
|
@@ -518,24 +527,27 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
518
527
|
| node ../normal/scripts/onboarding_message_runner.mjs application-recheck --application-type "$APPLICATION_TYPE"
|
|
519
528
|
```
|
|
520
529
|
|
|
521
|
-
公钥页 stdout 必须先作为独立对客消息送达,再执行 `app.sh open-key-page "<appId>"` 和对应校验;不得把后续 `application.key.pending` 或最终收口合并到同一条对客回复中。自动打开成功、后续轮询成功或后续 stdout 为空都不能替代实际 `confirmPageUrl` 交付。校验生产固定最多 20 次、间隔 2 秒,成功即停;新建分支复用最终安全密钥响应完成双公钥 guard 后提审,禁止重复查询,guard 失败不提审。耗尽才输出 `application.key.pending
|
|
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 仍只走人工分支。
|
|
522
531
|
|
|
523
|
-
|
|
532
|
+
用户提供完整公钥后直接调用上方 `app.sh key` 命令;脚本输出非阻塞 `application.key.page` 并校验 URL,Agent 送达 stdout 后立即调用 `app.sh open-key-page` 受控打开,失败只保留同一裸 URL、复制兜底和“扫码完成后请回到 Agent 对话页面”。Agent 不得代写/重渲染,响应不明进入 `UNKNOWN` 且不得生成第二页。
|
|
524
533
|
|
|
525
|
-
复用应用返回 `FLOW:REUSE_NO_KEY` 时,必须将应用分支标记为未完成,不得输出复用成功,并执行下列命令说明当前应用缺少已确认 RSA2 应用公钥。该消息不增加二次确认:目标 `appId` 已由用户从当前候选中选定,随后直接进入当前应用的设钥准备;如果用户在消息后明确要求重新选择或新建应用,再返回 Step 4 重新决策。取得用户明确提供的完整应用公钥后执行 `bash modules/scripts/app.sh key --defer-open "<同一appId>" "<用户明确提供的完整publicKey>"`;该脚本 stdout 独立送达后立即执行 `bash modules/scripts/app.sh open-key-page "<同一appId>"
|
|
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。
|
|
526
535
|
|
|
527
536
|
```bash
|
|
528
537
|
MESSAGE_INPUT_JSON=$(jq -cn --arg appId "$APP_ID" '{appId:$appId}')
|
|
529
538
|
printf '%s' "$MESSAGE_INPUT_JSON" | node ../normal/scripts/render_customer_message.mjs application.reuse.no_key --variant DEFAULT
|
|
530
539
|
```
|
|
531
540
|
|
|
541
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_APPLICATION:END -->
|
|
542
|
+
|
|
543
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CLOSEOUT:START -->
|
|
532
544
|
### Step 6: 本轮流程收口
|
|
533
545
|
|
|
534
546
|
`integration_only` 不应进入本步骤。`onboarding_only` 和 `full_process` 按实际请求范围处理后续衔接;`full_process` 只保留两个子流程的实际状态,不转换成另一套状态。
|
|
535
547
|
|
|
536
548
|
**完成条件**:当前登录、scope 和 MCC 必须有效;签约必须由实际查询确认为已生效;仅按量付费适用的服务分支必须复用或保存成功并取得实际 `serviceId`;应用必须达到 `ON_LINE`、应用公钥已生效且支付宝公钥已实际导出。存在失败、未知、待生效、待审核或人工配置时不得宣称产品开通完成。不维护人工完成条件数量。
|
|
537
549
|
|
|
538
|
-
使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 消息逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出,并把 runner 完整 stdout 原文发送给用户。禁止用 Agent 手写短摘要替代、删减 `productionReadinessBlock
|
|
550
|
+
使用 `../normal/json/customer-messages.json` 的 `process.partial_result` 消息逐分支收口,必须通过 `onboarding_message_runner.mjs closeout` 托管输出,并把 runner 完整 stdout 原文发送给用户。禁止用 Agent 手写短摘要替代、删减 `productionReadinessBlock`、删减 AI 网页应用收款限制引导或改写后续衔接;AI 网页应用收款收口缺少“【上线前有以下关键点】”和“AI 网页应用收款限制”时视为标准收口未送达,必须重新发送同一次 closeout stdout。自动重试耗尽、业务错误或查询失败且到本步骤仍未恢复的动作,统一写入对应分支结果和 `remainingActions`,只说明一次,不在收口后再次询问是否重试。必须执行:
|
|
539
551
|
|
|
540
552
|
`SIGNING_RESULT`、`SERVICE_RESULT`、`APPLICATION_RESULT` 和 `INTEGRATION_RESULT` 必须使用消息目录允许的状态枚举原文,禁止拼接 `appId`、公钥文件路径、错误码、截图证据或其他自由文本;这些证据只保留在脚本输出、内部事实或人工待办字段中,不能污染分支结果枚举。
|
|
541
553
|
|
|
@@ -568,7 +580,7 @@ printf '%s' "$MESSAGE_INPUT_JSON" \
|
|
|
568
580
|
|
|
569
581
|
当且仅当签约结果为“已提交,等待生效”且应用结果为“已提交审核,等待上线”时,renderer 从消息目录自动在 `remainingActions` 后追加状态查询提示;该提示不是 flow 入参,Agent 禁止自行传入、拼接或在模板外重复输出。其他结果组合不展示该提示。
|
|
570
582
|
|
|
571
|
-
renderer 还会按 `productName` 和分支完成条件自动派生上线前检查块。Agent 不传入、不改写该字段,也不得在模板外补第二份生产上线清单。该检查使用“【当前状态】/【上线前有以下关键点】/【提示】/【其他】”结构,不单列“相关站点”,也不在模板尾部追加第二个查询入口;必要 URL 只放在具体操作步骤中。完成态只能表述为代码开发和产品开通流程已完成,不得替用户确认生产配置已替换、产品真实可收款或应用页面状态;上线条件固定引导用户前往支付宝 AI 付站点,进入一站式接入 → 选择产品 → 密钥配置查看产品开通和应用上线情况;正式参数以生产 `appId
|
|
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 不得在模板外重复输出或改写。
|
|
572
584
|
|
|
573
585
|
签约、服务和应用分别按本轮脚本实际结果表达:签约提交成功但未生效时,`signingResult` 固定使用“已提交,等待生效”;服务创建或修改成功且取得 `serviceId`、但未取得服务状态时,`serviceResult` 分别固定使用“创建成功,状态未取得”或“修改成功,状态未取得”;应用按消息目录的实际阶段枚举填写。任一分支失败或结果未知不清除其他分支成功,也不能概括为“全部失败”。
|
|
574
586
|
|
|
@@ -576,6 +588,8 @@ renderer 还会按 `productName` 和分支完成条件自动派生上线前检
|
|
|
576
588
|
|
|
577
589
|
使用 TaskUpdate 只把已经实际执行并取得结果的内部任务标记为 completed。签约待生效、应用待审核、人工配置或其他外部待办必须保持 pending 或在用户可见待办中明确列出,不得为了结束本轮对话把这些事项标记为 completed。对于 `full_process`,此处只表示 onboarding 子流程已执行至当前可推进终点;最终是否完成直接依据两个子流程的实际结果和待办,不得另建状态推断。
|
|
578
590
|
|
|
591
|
+
<!-- ALIPAY_AIPAY_FLOW:ONBOARDING_CLOSEOUT:END -->
|
|
592
|
+
|
|
579
593
|
---
|
|
580
594
|
|
|
581
595
|
## 四、错误处理(全局规则)
|