@alipay/alipay-aipay 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/bin/alipay-aipay.js +6 -0
  2. package/dist/commands/install.d.ts +11 -0
  3. package/dist/commands/install.d.ts.map +1 -0
  4. package/dist/commands/install.js +182 -0
  5. package/dist/commands/install.js.map +1 -0
  6. package/dist/commands/prepare-tools.d.ts +5 -0
  7. package/dist/commands/prepare-tools.d.ts.map +1 -0
  8. package/dist/commands/prepare-tools.js +29 -0
  9. package/dist/commands/prepare-tools.js.map +1 -0
  10. package/dist/commands/uninstall.d.ts +10 -0
  11. package/dist/commands/uninstall.d.ts.map +1 -0
  12. package/dist/commands/uninstall.js +82 -0
  13. package/dist/commands/uninstall.js.map +1 -0
  14. package/dist/commands/update.d.ts +10 -0
  15. package/dist/commands/update.d.ts.map +1 -0
  16. package/dist/commands/update.js +155 -0
  17. package/dist/commands/update.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +65 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types.d.ts +43 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +2 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils/alipay-cli.d.ts +15 -0
  27. package/dist/utils/alipay-cli.d.ts.map +1 -0
  28. package/dist/utils/alipay-cli.js +221 -0
  29. package/dist/utils/alipay-cli.js.map +1 -0
  30. package/dist/utils/config.d.ts +48 -0
  31. package/dist/utils/config.d.ts.map +1 -0
  32. package/dist/utils/config.js +207 -0
  33. package/dist/utils/config.js.map +1 -0
  34. package/dist/utils/file.d.ts +55 -0
  35. package/dist/utils/file.d.ts.map +1 -0
  36. package/dist/utils/file.js +154 -0
  37. package/dist/utils/file.js.map +1 -0
  38. package/dist/utils/gpg.d.ts +14 -0
  39. package/dist/utils/gpg.d.ts.map +1 -0
  40. package/dist/utils/gpg.js +247 -0
  41. package/dist/utils/gpg.js.map +1 -0
  42. package/dist/utils/jq.d.ts +14 -0
  43. package/dist/utils/jq.d.ts.map +1 -0
  44. package/dist/utils/jq.js +221 -0
  45. package/dist/utils/jq.js.map +1 -0
  46. package/dist/utils/npm.d.ts +17 -0
  47. package/dist/utils/npm.d.ts.map +1 -0
  48. package/dist/utils/npm.js +42 -0
  49. package/dist/utils/npm.js.map +1 -0
  50. package/dist/utils/shell.d.ts +11 -0
  51. package/dist/utils/shell.d.ts.map +1 -0
  52. package/dist/utils/shell.js +54 -0
  53. package/dist/utils/shell.js.map +1 -0
  54. package/package.json +48 -7
  55. package/skill/SKILL.md +118 -0
  56. package/skill/references/integration/flow.md +487 -0
  57. package/skill/references/integration/modules/alipay-sdk-reminder.md +256 -0
  58. package/skill/references/integration/modules/checklist.md +122 -0
  59. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +68 -0
  60. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +77 -0
  61. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +74 -0
  62. package/skill/references/integration/modules/code-examples/csharp/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +73 -0
  63. 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 +58 -0
  64. 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 +128 -0
  65. package/skill/references/integration/modules/code-examples/csharp/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.cs +500 -0
  66. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +72 -0
  67. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +80 -0
  68. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +78 -0
  69. package/skill/references/integration/modules/code-examples/java/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +77 -0
  70. 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 +66 -0
  71. 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 +135 -0
  72. package/skill/references/integration/modules/code-examples/java/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemoController.java +610 -0
  73. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +51 -0
  74. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +57 -0
  75. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +55 -0
  76. package/skill/references/integration/modules/code-examples/nodejs/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +54 -0
  77. 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 +77 -0
  78. 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 +65 -0
  79. package/skill/references/integration/modules/code-examples/nodejs/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.js +461 -0
  80. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +59 -0
  81. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +67 -0
  82. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +66 -0
  83. package/skill/references/integration/modules/code-examples/php/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +65 -0
  84. 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 +56 -0
  85. 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 +107 -0
  86. package/skill/references/integration/modules/code-examples/php/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.php +444 -0
  87. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/345/205/263/351/227/255/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +57 -0
  88. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +65 -0
  89. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +63 -0
  90. package/skill/references/integration/modules/code-examples/python/1-/351/200/232/347/224/250/346/216/245/345/217/243//347/273/237/344/270/200/346/224/266/345/215/225/344/272/244/346/230/223/351/200/200/346/254/276/346/237/245/350/257/242/346/216/245/345/217/243/344/273/243/347/240/201/347/244/272/344/276/213.md +62 -0
  91. 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 +48 -0
  92. 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 +43 -0
  93. package/skill/references/integration/modules/code-examples/python/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.py +465 -0
  94. package/skill/references/integration/modules/interface-guide.md +90 -0
  95. package/skill/references/integration/modules/product-decision.md +90 -0
  96. package/skill/references/integration/modules/sandbox/a2m-sandbox-test.md +270 -0
  97. package/skill/references/integration/modules/sandbox/alipay-sandbox-tool.md +133 -0
  98. package/skill/references/integration/modules/sandbox/sandbox-setup-guide.md +218 -0
  99. package/skill/references/integration/modules/scripts/local_402_sandbox_pay.py +659 -0
  100. package/skill/references/normal/alipay-cli-env.md +214 -0
  101. package/skill/references/normal/rejection-guide.md +37 -0
  102. package/skill/references/normal/scripts/common.sh +32 -0
  103. package/skill/references/normal/scripts/detect_dev_tool.sh +46 -0
  104. package/skill/references/onboarding/flow.md +573 -0
  105. package/skill/references/onboarding/modules/app-release.md +415 -0
  106. package/skill/references/onboarding/modules/authorization.md +269 -0
  107. package/skill/references/onboarding/modules/error-handling.md +251 -0
  108. package/skill/references/onboarding/modules/mcc-reference.md +209 -0
  109. package/skill/references/onboarding/modules/product-sign.md +304 -0
  110. package/skill/references/onboarding/modules/scripts/app.sh +705 -0
  111. package/skill/references/onboarding/modules/scripts/ar_sign_apply.sh +248 -0
  112. package/skill/references/onboarding/modules/scripts/auth.sh +505 -0
  113. package/skill/references/onboarding/modules/scripts/error_handler.sh +452 -0
  114. package/skill/references/onboarding/modules/scripts/query_sign_status.sh +146 -0
  115. package/skill/references/onboarding/modules/scripts/service.sh +267 -0
  116. package/skill/references/onboarding/modules/scripts/upload_screenshots.sh +152 -0
  117. package/skill/references/onboarding/modules/service-registration.md +294 -0
@@ -0,0 +1,294 @@
1
+ # 服务市场注册模块
2
+
3
+ > 本文档定义按量付费产品的服务市场上架流程。**仅按量付费产品需要服务市场注册**。
4
+ > 被引用文档:`SKILL.md` → Step 5 入驻推进 - 服务注册部分
5
+ > 本文档位于 `references/onboarding/modules/`,文中的 `scripts/...` 路径相对本目录;从技能包根目录执行时对应 `references/onboarding/modules/scripts/...`。
6
+
7
+ ---
8
+
9
+ ## 功能概述
10
+
11
+ 将 MCP 服务上架到支付宝服务市场。**仅对"按量付费"产品需要**,网站支付和APP支付不需要服务注册。
12
+
13
+ **⚠️ 触发条件:**
14
+ ```
15
+ ✅ 按量付费(salesCode = I1080300001000160457)→ 需要服务注册
16
+ ❌ 网站支付(salesCode = I1080300001000041203)→ 不需要
17
+ ❌ APP支付(salesCode = I1080300001000041313)→ 不需要
18
+ ```
19
+
20
+ ---
21
+
22
+ ## 服务注册完整流程(最高优先级)
23
+
24
+ **⚠️ 必须严格按照以下流程执行,不可跳过任何步骤!**
25
+
26
+ ```
27
+ ┌─────────────────────────────────────────────────────────────────────┐
28
+ │ 按量付费 服务注册流程 │
29
+ ├─────────────────────────────────────────────────────────────────────┤
30
+ │ │
31
+ │ Step 1: 查询已有服务 │
32
+ │ └─ 调用 discoverBazaarServicesForMcp │
33
+ │ │
34
+ │ Step 2: 判断服务列表 │
35
+ │ ├─ serviceList 为空 → 进入 Step 3 交互式收集服务信息 │
36
+ │ └─ serviceList 不为空 → 进入 Step 3 让用户选择操作 │
37
+ │ │
38
+ │ Step 3: 用户决策 │
39
+ │ ├─ 选择序号(复用已有服务)→ 跳过创建,完成 │
40
+ │ ├─ 选择"新建" → ⚠️ 检查服务数量,若 ≥ 20 则禁止创建 │
41
+ │ │ 若 < 20,收集 5 项服务信息,进入 Step 4 │
42
+ │ └─ 选择"修改" → 输入服务ID,收集所有服务信息,进入 Step 4 │
43
+ │ │
44
+ │ Step 4: 提交服务上架/修改 │
45
+ │ ├─ 创建新服务:调用 saveBazaarServiceForMcp(不传 serviceId) │
46
+ │ │ ⚠️ 调用前必须确认服务数量 < 20 │
47
+ │ └─ 修改已有服务:调用 saveBazaarServiceForMcp(传入 serviceId) │
48
+ │ │
49
+ │ Step 5: 处理结果 │
50
+ │ ├─ 成功 → 对客输出服务信息,继续应用发布流程 │
51
+ │ └─ 失败 → 展示错误,引导用户修正 │
52
+ │ │
53
+ └─────────────────────────────────────────────────────────────────────┘
54
+ ```
55
+
56
+ **⚠️ 修改服务重要说明:**
57
+ ```
58
+ 修改已有服务时,必须传入 serviceId + 所有服务信息(不可只传部分字段):
59
+ ✅ 正确:传入 serviceId + serviceName + serviceDesc + resourceUrl + pricing + schemaUrl
60
+ ❌ 错误:只传入 serviceId + 部分字段(会导致其他字段被清空)
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Step 1: 查询已有服务
66
+
67
+ ---
68
+
69
+ **执行 `scripts/service.sh list`。**
70
+
71
+ ---
72
+
73
+ ## Step 2: 根据查询结果执行不同分支
74
+
75
+ ### 场景 A:serviceList 为空(无已有服务)
76
+
77
+ **此时必须进入 Step 3 收集服务信息并创建新服务。**
78
+
79
+ > 📎 `scripts/service.sh list` 已内置该判断,返回 `FLOW:CREATE_NEW` 时直接进入 Step 3。
80
+ >
81
+ > ⚠️ 注意:服务数量上限为 20 个,`service.sh save` 在创建前会校验。
82
+
83
+ ### 场景 B:serviceList 不为空(有已有服务)
84
+
85
+ **此时必须让用户选择是复用已有服务还是创建新服务。**
86
+
87
+ **输出格式:**
88
+
89
+ ```markdown
90
+ 📋 发现您已有以下服务:
91
+
92
+ | 序号 | 服务ID | 服务名称 | 描述 | 价格 | 状态 | 服务地址 |
93
+ |------|--------|----------|------|------|------|----------|
94
+ | 1 | SVC001 | 天气查询 | 提供全球天气查询 | 0.01元/次 | 已上架 | https://api.example.com/weather |
95
+ | 2 | SVC002 | AI助手 | 智能对话服务 | 0.05元/次 | 审核中 | https://api.example.com/ai |
96
+
97
+ 请选择:
98
+ • 输入序号(1/2)复用对应服务
99
+ • 输入"新建"创建新服务
100
+ • 输入"修改"修改已有服务
101
+ ```
102
+
103
+ > 📎 表格渲染由 `scripts/service.sh list` 自动完成,无需手动拼接。Agent 直接展示脚本输出即可。
104
+
105
+ **用户选择处理:**
106
+
107
+ Agent 根据用户输入执行对应分支:
108
+
109
+ | 用户输入 | 后续操作 |
110
+ |----------|----------|
111
+ | 数字序号(1-$SERVICE_COUNT) | 复用对应服务 → 跳过创建,直接进入应用发布 |
112
+ | "新建" | 进入 Step 3 收集服务信息 → `bash scripts/service.sh save`(创建前自动校验数量 < 20) |
113
+ | "修改" | 引导用户输入服务ID → 进入 Step 3 收集**所有**字段 → `bash scripts/service.sh save --service-id <id>` |
114
+
115
+ > ⚠️ 服务数量上限 20 个,由 `service.sh save` 在创建前自动校验。
116
+
117
+ ---
118
+
119
+ ## Step 3: 收集服务信息(创建或修改服务时执行)
120
+
121
+ **⚠️ 在以下情况需执行此步骤:**
122
+ ```
123
+ ✅ serviceList 为空(无已有服务)→ 创建新服务
124
+ ✅ 用户选择"新建" → 创建新服务
125
+ ✅ 用户选择"修改" → 修改已有服务(需先输入服务ID)
126
+ ```
127
+
128
+ **⚠️ 修改服务特别注意:**
129
+ ```
130
+ 修改已有服务时,必须收集所有服务信息,不可只收集部分字段:
131
+ ✅ 正确:收集 serviceName + serviceDesc + resourceUrl + pricing + schemaUrl 全部字段
132
+ ❌ 错误:只收集需要修改的字段(会导致其他字段被清空)
133
+ ```
134
+
135
+ **收集服务信息交互:**
136
+
137
+ ```
138
+ 📋 请提供服务注册信息:
139
+
140
+ 1. 服务名称(1-50 字符):您的服务名称
141
+ 2. 服务描述(1-500 字符):简要描述服务功能
142
+ 3. 服务地址(URL):服务的 API 地址
143
+ 4. 服务单价(元,最低 0.01):用户每次调用的费用
144
+ 5. 请求示例(JSON):API 请求参数示例
145
+
146
+ 请依次提供以上信息。
147
+ ```
148
+
149
+ ### 入参校验规则
150
+
151
+ | 字段 | 说明 | 验证规则 | 错误提示 |
152
+ |------|------|----------|----------|
153
+ | `serviceName` | 服务名称 | 长度 1-50 字符 | 服务名称长度需在 1-50 字符之间 |
154
+ | `serviceDesc` | 服务描述 | 长度 1-500 字符 | 服务描述长度需在 1-500 字符之间 |
155
+ | `resourceUrl` | 服务地址 | 有效的 URL 格式(以 http:// 或 https:// 开头) | 请提供有效的 URL 地址 |
156
+ | `pricing` | 服务单价 | 必须 >= 0.01 元 | 服务单价最低为 0.01 元 |
157
+ | `schemaUrl` | 请求示例 | 有效的 JSON 格式 | 请提供有效的 JSON 格式请求示例 |
158
+
159
+ ### 校验脚本
160
+
161
+ > 📎 已收口到脚本:`scripts/service.sh validate`
162
+
163
+ ```bash
164
+ # 收集服务信息后,调用校验脚本
165
+ bash scripts/service.sh validate --name "$SERVICE_NAME" --desc "$SERVICE_DESC" --url "$RESOURCE_URL" --pricing "$PRICING" --schema "$SCHEMA_URL"
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Step 4: 提交服务上架/修改
171
+
172
+ ### 场景 A:创建新服务(不传 serviceId)
173
+
174
+ **⚠️ 调用前必须确认服务数量 < 20,否则禁止调用 saveBazaarServiceForMcp 接口!** 执行 `bash scripts/service.sh save --name <name> --desc <desc> --url <url> --pricing <pricing> --schema <json>`。
175
+
176
+
177
+ ### 场景 B:修改已有服务(必须传入 serviceId + 所有字段)
178
+
179
+ 执行 `bash scripts/service.sh save --service-id <id> --name <name> --desc <desc> --url <url> --pricing <pricing> --schema <json>`。
180
+
181
+
182
+ ---
183
+
184
+ ## Step 5: 处理结果
185
+
186
+ ### 成功输出格式
187
+
188
+ ```markdown
189
+ ✅ 服务上架成功
190
+
191
+ | 项目 | 信息 |
192
+ |------|------|
193
+ | 服务名称 | 天气查询 |
194
+ | 服务描述 | 提供全球天气查询服务 |
195
+ | 服务地址 | https://api.example.com/weather |
196
+ | 服务单价 | 0.01 元/次 |
197
+ | 状态 | 审核中 |
198
+ ```
199
+
200
+ ### 按量付费集成产物
201
+
202
+ 服务创建、修改或复用成功后,必须记录并向用户说明以下字段:
203
+
204
+ | 字段 | 用途 |
205
+ |------|------|
206
+ | `serviceId` | 按量付费 `Payment-Needed.method.service_id`,也是后续 402 收银联调识别服务的关键字段 |
207
+ | 服务名称 | 用于核对收银台展示和用户识别 |
208
+ | 服务地址 `resourceUrl` | 应与实际提供 402 服务的资源地址一致 |
209
+ | 服务单价 `pricing` | 应与 `Payment-Needed.protocol.amount` 的业务定价保持一致 |
210
+ | 服务状态 | 判断是否可用于正式上架和后续排查 |
211
+
212
+ 如果服务注册成功但未解析到 `serviceId`,不要继续宣称按量付费入驻完成;应提示用户重新查询服务列表或根据服务名称定位服务。
213
+
214
+ ### 失败处理
215
+
216
+ > 📎 统一错误检测与处理见 `error-handling.md`。`scripts/service.sh save` 已内置错误检测。
217
+
218
+ ---
219
+
220
+ ## MCP调用规范
221
+
222
+ **MCP 服务名:`a2a-pay-service`**
223
+
224
+ | 方法 | 用途 | 调用时机 |
225
+ |------|------|----------|
226
+ | `a2a-pay-service.discoverBazaarServicesForMcp` | 查询服务列表 / 根据 serviceId 查详情 | **进入服务注册模块时首先调用**(支持两种查询方式,见下表) |
227
+ | `a2a-pay-service.saveBazaarServiceForMcp` | 创建新服务 / 修改已有服务 | 用户选择新建/修改时调用(修改须传 serviceId + 所有资料) |
228
+
229
+ **⚠️ discoverBazaarServicesForMcp 支持两种查询方式:**
230
+
231
+ | 查询方式 | 参数 | 说明 |
232
+ |----------|------|------|
233
+ | 查询已上线服务列表 | `{"request":{"serviceStatus":"ACTIVE"}}` | 返回所有已上架的服务列表 |
234
+ | 根据 serviceId 查询详情 | `{"request":{"keyword":"API_xxx"}}` | 返回指定服务的详细信息 |
235
+
236
+ **⚠️ saveBazaarServiceForMcp 创建/修改服务参数说明:**
237
+
238
+ | 场景 | 必传参数 | 说明 |
239
+ |------|----------|------|
240
+ | 创建新服务 | serviceName, serviceDesc, resourceUrl, pricing, schemaUrl | 无需传入 serviceId |
241
+ | 修改已有服务 | **serviceId**, serviceName, serviceDesc, resourceUrl, pricing, schemaUrl | **必须传入 serviceId + 所有资料信息** |
242
+
243
+ ### 正确调用示例
244
+
245
+ > 📎 所有 MCP 调用均有对应脚本:
246
+
247
+ ```bash
248
+ # ✅ 查询已上线服务列表 → scripts/service.sh list
249
+ # ✅ 创建新服务 → scripts/service.sh save --name <name> --desc <desc> --url <url> --pricing <pricing> --schema <json>
250
+ # ✅ 修改已有服务 → scripts/service.sh save --service-id <id> --name <name> --desc <desc> --url <url> --pricing <pricing> --schema <json>
251
+ ```
252
+
253
+ ### 禁止调用示例
254
+
255
+ ```bash
256
+ # ❌ 错误:虚拟未定义的方法
257
+ export PLATFORM=${DEV_TOOL_NAME} && alipay-cli mcp call a2a-pay-service.deleteService -d '...'
258
+
259
+ # ❌ 错误:自行推断的方法名
260
+ export PLATFORM=${DEV_TOOL_NAME} && alipay-cli mcp call a2a-pay-service.updateService -d '...'
261
+
262
+ # ❌ 错误:省略 server 名称
263
+ export PLATFORM=${DEV_TOOL_NAME} && alipay-cli mcp call discoverBazaarServicesForMcp -d '...'
264
+
265
+ # ❌ 错误:未先查询已有服务直接创建
266
+ export PLATFORM=${DEV_TOOL_NAME} && alipay-cli mcp call a2a-pay-service.saveBazaarServiceForMcp -d '...'
267
+ ```
268
+
269
+ ---
270
+
271
+ ## 服务状态说明
272
+
273
+ | 状态 | 说明 | 处理方式 |
274
+ |------|------|----------|
275
+ | `DRAFT` | 草稿 | 可继续编辑或提交审核 |
276
+ | `PENDING` | 审核中 | 等待审核结果,服务暂不可用 |
277
+ | `ONLINE` | 已上架 | 服务可被调用,可直接复用 |
278
+ | `REJECTED` | 审核拒绝 | 引导用户联系客服或重新提交 |
279
+
280
+ ---
281
+
282
+ ## ⛔ 禁止行为(最高优先级)
283
+
284
+ ```
285
+ ❌ 禁止:未查询已有服务直接创建新服务
286
+ ❌ 禁止:在 Step 4 资料采集阶段收集 按量付费 的服务信息(服务信息在服务市场模块交互式收集)
287
+ ❌ 禁止:serviceList 不为空时直接创建新服务(必须让用户选择)
288
+ ❌ 禁止:用户选择复用已有服务后仍创建新服务
289
+ ❌ 禁止:跳过服务信息校验直接提交
290
+ ❌ 禁止:使用虚拟或自行推断的 MCP 方法
291
+ ❌ 禁止:修改服务时只传入部分字段(必须传入 serviceId + 所有服务信息)
292
+ ❌ 禁止:用户选择"修改"后不收集完整服务信息直接提交
293
+ ❌ 禁止:服务数量 ≥ 20 时仍调用 saveBazaarServiceForMcp 创建新服务
294
+ ```