@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,307 +1,38 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 产品签约业务语义
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> 被引用文档:`onboarding/flow.md` → Step 3.1 签约查询 + Step 5.1 签约提交
|
|
5
|
-
> 本文档位于 `references/onboarding/modules/`,文中的 `scripts/...` 路径相对本目录;从技能包根目录执行时对应 `references/onboarding/modules/scripts/...`。
|
|
3
|
+
本模块说明签约状态、材料和写操作边界。运行时命令与分支以 `../flow.md` 为准;请求参数、错误检测和解析由 `scripts/query_sign_status.sh`、`scripts/sign_status_parser.sh` 与 `scripts/ar_sign_apply.sh` 实现。
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
## 当前主流程 MCP 能力
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
| MCP 方法 | 用途 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `ar-sign.apply` | 提交当前产品签约申请 |
|
|
10
|
+
| `ar-query.queryArInfosBySalesProd` | 查询当前 salesCode 的签约状态 |
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
查询和提交都使用 `{"request":{...},"ctx":{}}`。完整 payload 只在脚本中维护;Agent 不从本模块自行构造 MCP 调用。
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
## 签约状态
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
`scripts/sign_status_parser.sh` 是授权内查询与独立签约查询的唯一解析实现。只有实际响应包含合法 `resultObj.arInfoList`,并唯一输出匹配的 `SIGN_STATUS`、`FLOW:*` 和 `AUTH_SIGN_QUERY_REUSABLE=true`,授权结果才可复用;结构缺失、冲突或不可唯一解析时必须独立查询。
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
| 状态 | 业务处理 |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `NOT_SIGNED` | 按当前产品收集并校验材料,完整后直接提交 |
|
|
21
|
+
| `SIGN_SUBMITTED` | 已提交等待生效,禁止重复签约 |
|
|
22
|
+
| `SIGNED_EFFECTIVE` | 已生效,禁止重复签约 |
|
|
23
|
+
| `OTHER_STATUS` | 展示实际状态并待核验,禁止提交 |
|
|
24
|
+
| `QUERY_FAILED` | 只阻断签约分支,不推断为空或未签约 |
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
现有查询请求不含 MCC,已验证响应也没有权威 MCC 字段。授权链路只能表述为授权 URL 精确绑定目标 MCC;没有新证据时不得增加响应 MCC 比较或修改 MCP payload。
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
|------------|------|------|
|
|
23
|
-
| `ar-sign` | `apply` | 提交签约申请(主流程使用) |
|
|
24
|
-
| `ar-query` | `queryArInfosBySalesProd` | 按前台产品码查询合约状态 |
|
|
25
|
-
| `ar-query` | `queryArInfosByBackProd` | 按后台产品码查询合约状态 |
|
|
26
|
-
| `ar-order-query` | `queryBizOrder` | 按订单号查询签约订单 |
|
|
28
|
+
## 材料与提交
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
- AI 按量付费:无需截图。
|
|
31
|
+
- AI 网页应用收款:首页、商品页、支付页三张截图,支付页必须展示支付宝付款方式并等待用户付款,不得替换为支付成功页。
|
|
32
|
+
- AI 移动应用收款:APP 名称和首页、商品页、支付页三张截图;签约状态参数固定按脚本的 `OFFLINE`。
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
材料缺失或校验失败时使用 flow 登记的 `materials.category.collect`,不得提交。完整通过后直接执行签约脚本,不增加额外确认点。截图上传只走带当前 `--product-type` 的 `scripts/upload_screenshots.sh`,提交只复用脚本实际返回的图片引用。
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
提交成功只表示申请已受理,不等于签约生效;服务和应用分支按各自前置条件继续,不依赖本次签约写成功。写操作仅明确 `NOT_SENT` 时可自动重试;`MAYBE_SENT` 必须先用现有签约查询核验,无法确认进入 `UNKNOWN`,禁止重复提交。
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
执行 `scripts/query_sign_status.sh --sales-code <当前产品码> --product-type <aipay|webpay|apppay>`。
|
|
37
|
-
|
|
38
|
-
### 状态判断规则
|
|
39
|
-
|
|
40
|
-
**根据 `ar-query.queryArInfosBySalesProd` 返回结果判断签约状态:**
|
|
41
|
-
|
|
42
|
-
| 返回结果 | 状态判定 | 说明 |
|
|
43
|
-
|----------|----------|------|
|
|
44
|
-
| `resultObj.arInfoList` 为空数组 `[]` | `NOT_SIGNED` | 未签约 |
|
|
45
|
-
| `resultObj.arInfoList` 不为空,且存在 `arStatus` 为 `"02"` 的记录 | `SIGNED_EFFECTIVE` | 签约已生效,跳过签约材料采集,仍在 Step 4 处理应用/服务决策 |
|
|
46
|
-
| `resultObj.arInfoList` 不为空,且存在 `arStatus` 为 `"01"` 的记录 | `SIGN_SUBMITTED` | 已提交签约(待生效),跳过签约材料和重复签约提交,仍在 Step 4 处理应用/服务决策 |
|
|
47
|
-
|
|
48
|
-
### 判断逻辑
|
|
49
|
-
|
|
50
|
-
`scripts/query_sign_status.sh` 自动完成以下状态判断并输出状态信号(`SIGN_STATUS=...`)与分支信号(`FLOW:PC_WEB_NOT_SIGNED` 等)。`SIGNED_EFFECTIVE` 与 `SIGN_SUBMITTED` 的后续 FLOW 保持一致,均不重复提交签约,继续应用发布/服务注册。
|
|
51
|
-
|
|
52
|
-
### 产品×状态分支处理表
|
|
53
|
-
|
|
54
|
-
| 签约状态 | 产品类型 | FLOW 信号 | 后续流程 |
|
|
55
|
-
|----------|----------|-----------|----------|
|
|
56
|
-
| `NOT_SIGNED` | 网站支付 | `FLOW:PC_WEB_NOT_SIGNED` | 进入 Step 4 一次性资料与资源决策(3张网站截图 + 应用决策/条件资料)→ Step 5 签约 + 应用发布 |
|
|
57
|
-
| `NOT_SIGNED` | APP支付 | `FLOW:APP_NOT_SIGNED` | 进入 Step 4 一次性资料与资源决策(APP名称 + 3张APP界面截图 + 应用决策/条件资料)→ Step 5 签约 + 应用发布 |
|
|
58
|
-
| `NOT_SIGNED` | 按量付费 | `FLOW:AI_PAY_NOT_SIGNED` | Step 4 无需收集页面图片,但一次完成服务/应用决策和条件资料;再进入 Step 5.1 签约 |
|
|
59
|
-
| `SIGNED_EFFECTIVE` | 网站支付 | `FLOW:PC_WEB_SIGNED` | Step 4 完成应用决策后,跳过签约提交并执行应用发布 |
|
|
60
|
-
| `SIGNED_EFFECTIVE` | APP支付 | `FLOW:APP_SIGNED` | Step 4 完成应用决策后,跳过签约提交并执行应用发布 |
|
|
61
|
-
| `SIGNED_EFFECTIVE` | 按量付费 | `FLOW:AI_PAY_SIGNED` | Step 4 完成服务/应用决策后,跳过签约提交并执行服务注册 + 应用发布 |
|
|
62
|
-
| `SIGN_SUBMITTED` | 网站支付 | `FLOW:PC_WEB_SIGNED` | Step 4 完成应用决策后,跳过重复签约提交并执行应用发布 |
|
|
63
|
-
| `SIGN_SUBMITTED` | APP支付 | `FLOW:APP_SIGNED` | Step 4 完成应用决策后,跳过重复签约提交并执行应用发布 |
|
|
64
|
-
| `SIGN_SUBMITTED` | 按量付费 | `FLOW:AI_PAY_SIGNED` | Step 4 完成服务/应用决策后,跳过重复签约提交并执行服务注册 + 应用发布 |
|
|
65
|
-
|
|
66
|
-
**⚠️ 按量付费无需签约材料:**
|
|
67
|
-
```
|
|
68
|
-
✅ 网站支付未签约:需先采集 3 张网站截图,再进入 Step 5 签约
|
|
69
|
-
✅ APP支付未签约:需先采集 APP 名称和 3 张APP界面截图,再进入 Step 5 签约
|
|
70
|
-
✅ 按量付费 未签约:Step 4 无需签约页面图片,但前置完成服务/应用决策和条件资料;Step 5 仍先提交签约
|
|
71
|
-
✅ 按量付费在 Step 4 基于已查询的服务候选,一次收集新建/修改分支的完整五项服务资料;Step 5.2 才执行写操作
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
**按量付费签约后的必要后续动作:**
|
|
75
|
-
```
|
|
76
|
-
✅ 未签约且提交成功:继续服务市场注册 + 应用发布
|
|
77
|
-
✅ 已签约:跳过签约提交,继续服务市场注册 + 应用发布
|
|
78
|
-
❌ 禁止:只完成产品签约就宣称按量付费入驻完成
|
|
79
|
-
❌ 禁止:已签约状态下重复提交签约申请
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
按量付费最终接入至少需要三类正式产物:产品签约状态、服务市场的 `serviceId`、应用发布或复用得到的 `appId` 与支付宝公钥。签约模块只解决第一类产物。
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 签约提交
|
|
87
|
-
|
|
88
|
-
**执行 `scripts/ar_sign_apply.sh` 提交签约申请。脚本通过 `error_handler.sh` 间接初始化 `DEV_TOOL_NAME`;产品码和类目编码优先通过 `--sales-code`、`--mcc-code` 显式传入。**
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# 按量付费
|
|
92
|
-
bash scripts/ar_sign_apply.sh --product aipay --sales-code "I1080300001000160457" --mcc-code "<mccCode>"
|
|
93
|
-
|
|
94
|
-
# 网站支付
|
|
95
|
-
bash scripts/ar_sign_apply.sh --product webpay --sales-code "I1080300001000041203" --mcc-code "<mccCode>" --picurl1 <imageRef1> --picurl2 <imageRef2> --picurl3 <imageRef3>
|
|
96
|
-
|
|
97
|
-
# APP支付
|
|
98
|
-
bash scripts/ar_sign_apply.sh --product apppay --sales-code "I1080300001000041313" --mcc-code "<mccCode>" --app-name "<APP名称>" --picurl1 <imageRef1> --picurl2 <imageRef2> --picurl3 <imageRef3>
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### 与动态表单签约流程的边界
|
|
102
|
-
|
|
103
|
-
| 项目 | 当前 onboarding 签约 | 动态表单签约流程 |
|
|
104
|
-
|------|----------------------|------------------------|
|
|
105
|
-
| 调用模式 | 外部直调 `ar-sign.apply` | 默认先 `previewFormView`,再按动态 schema 收集并 apply |
|
|
106
|
-
| 字段来源 | 本文档静态定义的三类产品字段 | `previewFormView` 返回的 `artisanPage` schema |
|
|
107
|
-
| 覆盖产品 | 按量付费、网站支付、APP支付 | 由产品推荐和 schema 决定 |
|
|
108
|
-
| 风险边界 | 后端新增/调整字段时,需同步更新本文档和脚本 | schema 变化会在 preview 流程中动态体现 |
|
|
109
|
-
|
|
110
|
-
> 如果后端签约字段发生变化,或当前静态字段提交被 `checkedError` 拒绝,应以 `previewFormView` 返回 schema 为准补齐字段,禁止在本模块中凭经验新增未确认字段。
|
|
111
|
-
|
|
112
|
-
### 网站支付签约 JSON(有截图)
|
|
113
|
-
|
|
114
|
-
```json
|
|
115
|
-
{
|
|
116
|
-
"request": {
|
|
117
|
-
"bizFeatures": {},
|
|
118
|
-
"bizRequestNo": "<UUID>",
|
|
119
|
-
"businessProperty": {
|
|
120
|
-
"mccCode": "${MCC_CODE}",
|
|
121
|
-
"webAppDTO": {
|
|
122
|
-
"placeType": "ONLINE_WEBAPP",
|
|
123
|
-
"appType": "PC_WEB",
|
|
124
|
-
"appStatus": "OFFLINE",
|
|
125
|
-
"screenshot": ["<imageRef1>", "<imageRef2>", "<imageRef3>"]
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
"channelCode": "B_SK_SH_RPC",
|
|
129
|
-
"extension": {},
|
|
130
|
-
"orderType": "NEW_SIGN",
|
|
131
|
-
"salesProductCodes": ["I1080300001000041203"]
|
|
132
|
-
},
|
|
133
|
-
"ctx": {}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### APP支付签约 JSON(有 APP 名称和截图)
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"request": {
|
|
142
|
-
"bizFeatures": {},
|
|
143
|
-
"bizRequestNo": "<UUID>",
|
|
144
|
-
"businessProperty": {
|
|
145
|
-
"mccCode": "${MCC_CODE}",
|
|
146
|
-
"nativeAppDTO": {
|
|
147
|
-
"placeType": "ONLINE_NATIVEYAPP",
|
|
148
|
-
"name": "<APP名称>",
|
|
149
|
-
"appStatus": "OFFLINE",
|
|
150
|
-
"screenshot": ["<imageRef1>", "<imageRef2>", "<imageRef3>"]
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
"channelCode": "B_SK_SH_RPC",
|
|
154
|
-
"extension": {},
|
|
155
|
-
"orderType": "NEW_SIGN",
|
|
156
|
-
"salesProductCodes": ["I1080300001000041313"]
|
|
157
|
-
},
|
|
158
|
-
"ctx": {}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
> APP支付本次固定按 `appStatus=OFFLINE` 提交,不传 `appDownloadUrl`。
|
|
163
|
-
|
|
164
|
-
### 按量付费签约 JSON(无截图)
|
|
165
|
-
|
|
166
|
-
```json
|
|
167
|
-
{
|
|
168
|
-
"request": {
|
|
169
|
-
"bizFeatures": {},
|
|
170
|
-
"bizRequestNo": "<UUID>",
|
|
171
|
-
"businessProperty": {
|
|
172
|
-
"mccCode": "${MCC_CODE}"
|
|
173
|
-
},
|
|
174
|
-
"channelCode": "B_SK_SH_RPC",
|
|
175
|
-
"extension": {},
|
|
176
|
-
"orderType": "NEW_SIGN",
|
|
177
|
-
"salesProductCodes": ["I1080300001000160457"]
|
|
178
|
-
},
|
|
179
|
-
"ctx": {}
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### 关键变量
|
|
184
|
-
|
|
185
|
-
| 变量 | 来源 | 说明 |
|
|
186
|
-
|------|------|------|
|
|
187
|
-
| `bizRequestNo` | 主技能生成 | UUID,每次签约提交前通过 `python3 -c "import uuid; print(uuid.uuid4())"` 生成,**禁止省略** |
|
|
188
|
-
| `mccCode` | Step 2 方案规划 | 运行时变量,格式 `Axxxx_Bxxxx`,不持久化到状态文件 |
|
|
189
|
-
| `channelCode` | 固定值 | `"B_SK_SH_RPC"` |
|
|
190
|
-
| `orderType` | 固定值 | `"NEW_SIGN"` |
|
|
191
|
-
| `screenshot` | Step 4 一次性资料与资源决策 | **仅未签约的网站支付/APP支付需要**(3个上传后的图片引用值),按量付费无需此项 |
|
|
192
|
-
| `appName` | Step 4 一次性资料与资源决策 | **仅未签约的 APP支付需要**;脚本参数仍为 `--app-name`,提交到 MCP 时映射为 `nativeAppDTO.name` |
|
|
193
|
-
| `appStatus` | 固定值 | **仅APP支付需要**,本次固定为 `OFFLINE` |
|
|
194
|
-
|
|
195
|
-
### 按量付费接入产物映射
|
|
196
|
-
|
|
197
|
-
| 集成字段 | 来源 | 说明 |
|
|
198
|
-
|----------|------|------|
|
|
199
|
-
| `sellerId` | 商户 PID / 2088 账号 | 通常来自沙箱或正式商户账号信息;不要用示例商户号 |
|
|
200
|
-
| `serviceId` | Step 5.2 服务市场注册/复用结果 | 写入 `Payment-Needed.method.service_id` |
|
|
201
|
-
| `seller_app_id` / `appId` | Step 5.3 应用发布/复用结果 | 写入 SDK 配置和 `Payment-Needed.method.seller_app_id` |
|
|
202
|
-
| `alipayPublicKey` | Step 5.3 应用发布/复用导出结果 | 用于 SDK 验签配置 |
|
|
203
|
-
|
|
204
|
-
签约成功不直接产出 `serviceId` 或 `appId`。后续集成代码需要这些值时,必须从服务注册和应用发布步骤读取,禁止沿用示例值。
|
|
205
|
-
|
|
206
|
-
### ⛔ 截图字段规则
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
✅ 网站支付未签约 → 需要 3 张网站截图(首页、商品页、支付页)
|
|
210
|
-
✅ APP支付未签约 → 需要 APP 名称和 3 张APP界面截图(首页、商品页、支付页),签约状态固定按 OFFLINE 提交
|
|
211
|
-
✅ 按量付费 未签约 → 无需截图,直接签约
|
|
212
|
-
✅ 网站支付/APP支付缺少支付页或支付能力 → 不提交签约;先进入/回到集成流程完成实现,再回来上传图片
|
|
213
|
-
✅ 网站支付/APP支付页面和支付能力已存在、仅缺三张页面图片 → 保留在 onboarding Step 4 收集和上传,不进入集成流程
|
|
214
|
-
❌ 禁止:按量付费 签约时传入 screenshot 字段
|
|
215
|
-
❌ 禁止:网站支付/APP支付 签约时省略 screenshot 字段
|
|
216
|
-
❌ 禁止:将“支付页”自行改口为“支付成功页”或要求用户提供文档未定义的页面
|
|
217
|
-
❌ 禁止:APP支付签约 MCP payload 中使用 webAppDTO、appDTO、appName、appType、placeType=APP、placeType=ONLINE_WEBAPP、placeType=ONLINE_NATIVEAPP 或 appType=PC_WEB
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### 截图字段规则
|
|
221
|
-
|
|
222
|
-
截图字段以动态表单签约流程的映射为准:`webSiteInfo.screenshot[].picUrl` / `commonAppDeviceInfo.screenshot[].picUrl` 扁平化为 `webAppDTO.screenshot[]` / `nativeAppDTO.screenshot[]` 的图片引用数组。
|
|
223
|
-
|
|
224
|
-
因此 `ar_sign_apply.sh` 使用 `--picurl1/2/3` 接收上传后的图片引用值。如果 `upload_screenshots.sh` 未能从上传结果中解析出可用于签约的图片引用值,应停止流程并让用户重新上传图片。
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## 签约提交后非阻塞推进
|
|
229
|
-
|
|
230
|
-
> ⚠️ **签约提交成功后,无需等待签约审核通过,应立即继续推进后续步骤。**
|
|
231
|
-
|
|
232
|
-
签约申请提交后,后端会异步审核,`arStatus` 为 `"01"`(已提交待生效)。应用创建和服务注册不依赖签约审核通过,可以继续推进。为减少用户交互,应用/服务列表查询及分支资料采集可在签约提交前完成;当前流程仍先提交签约,成功后才执行服务或应用写操作。
|
|
233
|
-
|
|
234
|
-
### FLOW 信号
|
|
235
|
-
|
|
236
|
-
`ar_sign_apply.sh` 签约成功后输出 FLOW 信号,指示后续步骤:
|
|
237
|
-
|
|
238
|
-
| FLOW 信号 | 产品类型 | 后续步骤 |
|
|
239
|
-
|-----------|----------|----------|
|
|
240
|
-
| `FLOW:AI_PAY_SIGN_CONTINUE` | 按量付费 | 立即继续 5.2 服务注册 + 5.3 应用发布 |
|
|
241
|
-
| `FLOW:PC_WEB_SIGN_CONTINUE` | 网站支付 | 立即继续 5.3 应用发布 |
|
|
242
|
-
| `FLOW:APP_SIGN_CONTINUE` | APP支付 | 立即继续 5.3 应用发布 |
|
|
243
|
-
|
|
244
|
-
### 处理原则
|
|
245
|
-
|
|
246
|
-
```
|
|
247
|
-
✅ 签约提交成功 → 立即推进 5.2/5.3,无需等待签约审核
|
|
248
|
-
✅ 按量付费:5.1 签约 → 5.2 服务注册 → 5.3 应用发布(串行推进)
|
|
249
|
-
✅ 网站支付/APP支付:5.1 签约 → 5.3 应用发布(串行推进)
|
|
250
|
-
❌ 禁止:签约提交后停住,等待签约审核通过再继续
|
|
251
|
-
❌ 禁止:轮询签约状态直到 arStatus变为"02"再继续
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 签约输出规范
|
|
257
|
-
|
|
258
|
-
### 签约信息(含费率免责声明)
|
|
259
|
-
|
|
260
|
-
当签约信息包含费率时,**必须附加免责声明**:
|
|
261
|
-
|
|
262
|
-
```markdown
|
|
263
|
-
📋 签约信息:
|
|
264
|
-
• 签约状态:[状态]
|
|
265
|
-
• 费率:[费率值]
|
|
266
|
-
|
|
267
|
-
> 由于支付宝可能会有阶段性的优惠活动,实际费率可能低于该页面费率,具体以相应费用账单为准。
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
**费率免责声明规则:**
|
|
271
|
-
- ✅ 必须:在展示费率信息的同一区域,紧随费率信息之后添加免责声明
|
|
272
|
-
- ✅ 必须:免责声明使用引用块格式(`>` 开头)突出显示
|
|
273
|
-
- ❌ 禁止:单独展示费率信息而不附加免责声明
|
|
274
|
-
- ℹ️ 如果签约信息中不包含费率字段,则无需添加免责声明
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## 签约错误处理
|
|
279
|
-
|
|
280
|
-
### 后端错误响应格式
|
|
281
|
-
|
|
282
|
-
```json
|
|
283
|
-
{
|
|
284
|
-
"errorCode": "xxx",
|
|
285
|
-
"errorMessage": "错误描述",
|
|
286
|
-
"bizTips": "业务提示(可展示给用户)",
|
|
287
|
-
"needRetry": true
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
| 场景 | 处理方式 |
|
|
292
|
-
|------|----------|
|
|
293
|
-
| errorCode 存在 | 展示 errorMessage,如有 bizTips 一并展示 |
|
|
294
|
-
| needRetry=true | 告知用户可以重试 |
|
|
295
|
-
| checkedError | 提取校验错误信息,引导用户修正字段 |
|
|
296
|
-
|
|
297
|
-
### 授权信息不匹配错误
|
|
298
|
-
|
|
299
|
-
> 📎 统一错误检测见 `error-handling.md` 第三节"授权信息不匹配"。
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
## 数据存储
|
|
304
|
-
|
|
305
|
-
| 文件 | 说明 |
|
|
306
|
-
|------|------|
|
|
307
|
-
| 无独立持久化 | 签约数据由 MCP 返回,主技能直接消费,不持久化到本地文件 |
|
|
38
|
+
签约结果只通过消息目录的 `signing.operation.result` 输出。不得展示未登记审核规则、费率承诺、可收款时间或原始响应;费率、额度和生效问题引导用户在支付宝商家平台查询。
|