@alipay/alipay-aipay 1.7.0 → 1.7.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.
- package/README.md +30 -0
- package/dist/commands/install-current.js +15 -7
- package/dist/commands/install.js +20 -16
- package/dist/commands/uninstall.js +8 -3
- package/dist/commands/update.js +34 -16
- package/dist/index.js +10 -4
- package/dist/utils/channels.js +67 -0
- package/dist/utils/config.js +15 -11
- package/dist/utils/file.js +23 -10
- package/dist/utils/npm.js +19 -33
- package/package.json +8 -3
- package/skill/SKILL.md +2 -0
- package/skill/references/normal/json/release-channel.json +1 -0
- package/skill/references/normal/scripts/self_update.mjs +62 -17
- package/skill/references/normal/self-update.md +3 -1
- package/skill-pre/SKILL.md +65 -0
- package/skill-pre/VERSION +1 -0
- package/skill-pre/references/integration/flow.md +602 -0
- package/skill-pre/references/integration/modules/alipay-sdk-reminder.md +281 -0
- package/skill-pre/references/integration/modules/checklist.md +154 -0
- package/skill-pre/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-pre/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
- package/skill-pre/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 +83 -0
- package/skill-pre/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 +80 -0
- package/skill-pre/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
- package/skill-pre/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 +62 -0
- package/skill-pre/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 +132 -0
- package/skill-pre/references/integration/modules/code-examples/csharp/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.md +640 -0
- package/skill-pre/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-pre/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
- package/skill-pre/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 +96 -0
- package/skill-pre/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 +81 -0
- package/skill-pre/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
- package/skill-pre/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 +69 -0
- package/skill-pre/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 +138 -0
- package/skill-pre/references/integration/modules/code-examples/java/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemoController.md +623 -0
- package/skill-pre/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-pre/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
- package/skill-pre/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 +63 -0
- package/skill-pre/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 +59 -0
- package/skill-pre/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
- package/skill-pre/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 +84 -0
- package/skill-pre/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 +71 -0
- package/skill-pre/references/integration/modules/code-examples/nodejs/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.md +498 -0
- package/skill-pre/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-pre/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
- package/skill-pre/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 +73 -0
- package/skill-pre/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 +69 -0
- package/skill-pre/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
- package/skill-pre/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 +59 -0
- package/skill-pre/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 +110 -0
- package/skill-pre/references/integration/modules/code-examples/php/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.md +806 -0
- package/skill-pre/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-pre/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
- package/skill-pre/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 +70 -0
- package/skill-pre/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 +65 -0
- package/skill-pre/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
- package/skill-pre/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 +51 -0
- package/skill-pre/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 +47 -0
- package/skill-pre/references/integration/modules/code-examples/python/4-/346/214/211/351/207/217/344/273/230/350/264/271/A2MPaymentDemo.md +541 -0
- package/skill-pre/references/integration/modules/interface-contract/aipay-interface-contract.md +52 -0
- package/skill-pre/references/integration/modules/interface-contract/apppay-interface-contract.md +45 -0
- package/skill-pre/references/integration/modules/interface-contract/common-trade-contract.md +42 -0
- package/skill-pre/references/integration/modules/interface-contract/notify-url-contract.md +68 -0
- package/skill-pre/references/integration/modules/interface-contract/webpay-interface-contract.md +44 -0
- package/skill-pre/references/integration/modules/interface-guide.md +61 -0
- package/skill-pre/references/integration/modules/product-decision.md +73 -0
- package/skill-pre/references/integration/modules/sandbox/a2m-sandbox-test.md +235 -0
- package/skill-pre/references/integration/modules/sandbox/alipay-sandbox-tool.md +142 -0
- package/skill-pre/references/integration/modules/sandbox/sandbox-setup-guide.md +239 -0
- package/skill-pre/references/integration/modules/scripts/local_402_sandbox_pay.py +900 -0
- package/skill-pre/references/integration/modules/scripts/sandbox_config.sh +347 -0
- package/skill-pre/references/integration/modules/troubleshooting-flow.md +28 -0
- package/skill-pre/references/normal/alipay-cli-env.md +169 -0
- package/skill-pre/references/normal/conversation-telemetry.md +101 -0
- package/skill-pre/references/normal/full-process-routing.md +92 -0
- package/skill-pre/references/normal/integration-worker.md +90 -0
- package/skill-pre/references/normal/json/customer-messages.json +1 -0
- package/skill-pre/references/normal/json/managed-jq-assets.json +1 -0
- package/skill-pre/references/normal/json/policy-rules.json +1 -0
- package/skill-pre/references/normal/json/release-channel.json +1 -0
- package/skill-pre/references/normal/rejection-guide.md +41 -0
- package/skill-pre/references/normal/scripts/agent_platform.mjs +43 -0
- package/skill-pre/references/normal/scripts/alipay_cli_env.mjs +34 -0
- package/skill-pre/references/normal/scripts/alipay_cli_env.sh +55 -0
- package/skill-pre/references/normal/scripts/alipay_cli_refresh.mjs +129 -0
- package/skill-pre/references/normal/scripts/auth_runtime_runner.mjs +60 -0
- package/skill-pre/references/normal/scripts/checklist_sections.mjs +43 -0
- package/skill-pre/references/normal/scripts/common.sh +365 -0
- package/skill-pre/references/normal/scripts/conversation_telemetry.mjs +105 -0
- package/skill-pre/references/normal/scripts/detect_dev_tool.sh +79 -0
- package/skill-pre/references/normal/scripts/flow_loader.mjs +237 -0
- package/skill-pre/references/normal/scripts/integration_context_runner.mjs +151 -0
- package/skill-pre/references/normal/scripts/integration_message_runner.mjs +1456 -0
- package/skill-pre/references/normal/scripts/interaction_reply.mjs +140 -0
- package/skill-pre/references/normal/scripts/managed_jq.mjs +215 -0
- package/skill-pre/references/normal/scripts/onboarding_discovery_runner.mjs +387 -0
- package/skill-pre/references/normal/scripts/onboarding_message_runner.mjs +1425 -0
- package/skill-pre/references/normal/scripts/onboarding_recovery_runner.mjs +100 -0
- package/skill-pre/references/normal/scripts/open_official_url.sh +205 -0
- package/skill-pre/references/normal/scripts/platform_compat.mjs +42 -0
- package/skill-pre/references/normal/scripts/preview_runtime.mjs +151 -0
- package/skill-pre/references/normal/scripts/project_route_inspector.sh +132 -0
- package/skill-pre/references/normal/scripts/python_script_runner.mjs +58 -0
- package/skill-pre/references/normal/scripts/render_customer_message.mjs +1792 -0
- package/skill-pre/references/normal/scripts/runtime.mjs +271 -0
- package/skill-pre/references/normal/scripts/self_update.mjs +376 -0
- package/skill-pre/references/normal/scripts/telemetry.mjs +2102 -0
- package/skill-pre/references/normal/self-update.md +7 -0
- package/skill-pre/references/normal/telemetry.md +70 -0
- package/skill-pre/references/onboarding/assets/keygen.html +927 -0
- package/skill-pre/references/onboarding/flow.md +607 -0
- package/skill-pre/references/onboarding/modules/app-release.md +90 -0
- package/skill-pre/references/onboarding/modules/authorization.md +43 -0
- package/skill-pre/references/onboarding/modules/error-handling.md +62 -0
- package/skill-pre/references/onboarding/modules/product-sign.md +49 -0
- package/skill-pre/references/onboarding/modules/scripts/app.sh +1485 -0
- package/skill-pre/references/onboarding/modules/scripts/ar_sign_apply.sh +331 -0
- package/skill-pre/references/onboarding/modules/scripts/auth.sh +1040 -0
- package/skill-pre/references/onboarding/modules/scripts/download_key_tool.sh +4 -0
- package/skill-pre/references/onboarding/modules/scripts/error_handler.sh +841 -0
- package/skill-pre/references/onboarding/modules/scripts/mcc.sh +1085 -0
- package/skill-pre/references/onboarding/modules/scripts/network_retry.sh +135 -0
- package/skill-pre/references/onboarding/modules/scripts/query_sign_status.sh +105 -0
- package/skill-pre/references/onboarding/modules/scripts/service.sh +528 -0
- package/skill-pre/references/onboarding/modules/scripts/sign_status_parser.sh +58 -0
- package/skill-pre/references/onboarding/modules/scripts/upload_screenshots.sh +208 -0
- package/skill-pre/references/onboarding/modules/scripts/upload_special_license.sh +195 -0
- package/skill-pre/references/onboarding/modules/service-registration.md +40 -0
- package/skill-pre/references/runtime-entry.md +99 -0
- package/dist/commands/install-current.d.ts +0 -4
- package/dist/commands/install-current.d.ts.map +0 -1
- package/dist/commands/install-current.js.map +0 -1
- package/dist/commands/install.d.ts +0 -10
- package/dist/commands/install.d.ts.map +0 -1
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/prepare-tools.d.ts +0 -5
- package/dist/commands/prepare-tools.d.ts.map +0 -1
- package/dist/commands/prepare-tools.js.map +0 -1
- package/dist/commands/uninstall.d.ts +0 -10
- package/dist/commands/uninstall.d.ts.map +0 -1
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/update.d.ts +0 -10
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.d.ts +0 -42
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/alipay-cli.d.ts +0 -20
- package/dist/utils/alipay-cli.d.ts.map +0 -1
- package/dist/utils/alipay-cli.js.map +0 -1
- package/dist/utils/config.d.ts +0 -52
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/file.d.ts +0 -77
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/file.js.map +0 -1
- package/dist/utils/jq.d.ts +0 -17
- package/dist/utils/jq.d.ts.map +0 -1
- package/dist/utils/jq.js.map +0 -1
- package/dist/utils/npm.d.ts +0 -17
- package/dist/utils/npm.d.ts.map +0 -1
- package/dist/utils/npm.js.map +0 -1
- package/dist/utils/shell.d.ts +0 -24
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/shell.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#=============================================================================
|
|
3
|
+
# 脚本名称: upload_screenshots.sh
|
|
4
|
+
# 功能描述: 串行上传截图文件并解析可用于签约的图片引用值
|
|
5
|
+
# 调用位置: Step 4 签约材料类别
|
|
6
|
+
# 调用前置: 脚本通过 error_handler.sh 间接初始化 DEV_TOOL_NAME/PLATFORM_ID;需传入产品类型和3个文件路径
|
|
7
|
+
# 用法: bash upload_screenshots.sh --product-type <webpay|apppay> "$HOME_IMG" "$SHOP_IMG" "$PAY_IMG"
|
|
8
|
+
# 返回值: stdout 仅输出上传结果;stderr 输出图片引用值控制信号
|
|
9
|
+
#=============================================================================
|
|
10
|
+
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
|
|
13
|
+
# 一次性 source error_handler(含 unwrap_mcp)
|
|
14
|
+
if [ -f "${SCRIPT_DIR}/error_handler.sh" ]; then
|
|
15
|
+
source "${SCRIPT_DIR}/error_handler.sh"
|
|
16
|
+
else
|
|
17
|
+
echo "❌ 缺少错误处理脚本: ${SCRIPT_DIR}/error_handler.sh"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
require_command jq || exit 1
|
|
22
|
+
require_command alipay-cli || exit 1
|
|
23
|
+
require_command mktemp || exit 1
|
|
24
|
+
|
|
25
|
+
if [ "${1:-}" != "--product-type" ] || [ "$#" -lt 5 ]; then
|
|
26
|
+
echo "❌ 请先传入 --product-type webpay|apppay"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
PRODUCT_TYPE="$2"
|
|
30
|
+
shift 2
|
|
31
|
+
case "$PRODUCT_TYPE" in
|
|
32
|
+
webpay|apppay) ;;
|
|
33
|
+
*) echo "❌ 截图上传仅支持 webpay|apppay"; exit 1 ;;
|
|
34
|
+
esac
|
|
35
|
+
init_alipay_cli_product "$PRODUCT_TYPE" || exit 1
|
|
36
|
+
export ALIPAY_AIPAY_SUPPRESS_AUTH_LOGOUT=1
|
|
37
|
+
|
|
38
|
+
HOME_IMG="${1:-}"
|
|
39
|
+
SHOP_IMG="${2:-}"
|
|
40
|
+
PAY_IMG="${3:-}"
|
|
41
|
+
|
|
42
|
+
# 校验参数
|
|
43
|
+
if [ -z "$HOME_IMG" ] || [ -z "$SHOP_IMG" ] || [ -z "$PAY_IMG" ]; then
|
|
44
|
+
echo "❌ 请提供 3 个截图文件路径"
|
|
45
|
+
echo "用法: bash upload_screenshots.sh --product-type <webpay|apppay> <首页截图> <商品页截图> <支付页截图>"
|
|
46
|
+
echo " AI 网页应用收款:传入网站首页、商品页、支付页截图"
|
|
47
|
+
echo " AI 移动应用收款:传入 APP 首页、商品页、支付页截图"
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# 校验文件存在性
|
|
52
|
+
if [ ! -f "$HOME_IMG" ]; then
|
|
53
|
+
echo "❌ 首页截图文件不存在: $HOME_IMG"
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
if [ ! -f "$SHOP_IMG" ]; then
|
|
57
|
+
echo "❌ 商品页截图文件不存在: $SHOP_IMG"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
if [ ! -f "$PAY_IMG" ]; then
|
|
61
|
+
echo "❌ 支付页截图文件不存在: $PAY_IMG"
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
require_alipay_cli_local_state_access_or_emit || exit "$?"
|
|
66
|
+
|
|
67
|
+
# 使用 mktemp 创建并发安全的临时文件。模板需以 XXXXXX 结尾以兼容 macOS/BSD mktemp。
|
|
68
|
+
TMP_BASE="${TMPDIR:-/tmp}"
|
|
69
|
+
TMP_BASE="${TMP_BASE%/}"
|
|
70
|
+
TMP_HOME=""
|
|
71
|
+
TMP_SHOP=""
|
|
72
|
+
TMP_PAY=""
|
|
73
|
+
TMP_HOME_ERR=""
|
|
74
|
+
TMP_SHOP_ERR=""
|
|
75
|
+
TMP_PAY_ERR=""
|
|
76
|
+
|
|
77
|
+
# 清理临时文件,包括只创建了部分文件时的失败分支。
|
|
78
|
+
cleanup_upload_tmp() {
|
|
79
|
+
local tmp_file
|
|
80
|
+
for tmp_file in "$TMP_HOME" "$TMP_SHOP" "$TMP_PAY" "$TMP_HOME_ERR" "$TMP_SHOP_ERR" "$TMP_PAY_ERR"; do
|
|
81
|
+
[ -z "$tmp_file" ] || rm -f "$tmp_file"
|
|
82
|
+
done
|
|
83
|
+
}
|
|
84
|
+
trap cleanup_upload_tmp EXIT
|
|
85
|
+
|
|
86
|
+
TMP_HOME=$(mktemp "${TMP_BASE}/upload_home.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
87
|
+
TMP_SHOP=$(mktemp "${TMP_BASE}/upload_shop.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
88
|
+
TMP_PAY=$(mktemp "${TMP_BASE}/upload_pay.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
89
|
+
TMP_HOME_ERR=$(mktemp "${TMP_BASE}/upload_home_err.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
90
|
+
TMP_SHOP_ERR=$(mktemp "${TMP_BASE}/upload_shop_err.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
91
|
+
TMP_PAY_ERR=$(mktemp "${TMP_BASE}/upload_pay_err.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
92
|
+
|
|
93
|
+
# 已验证多个 file upload 进程会竞争本地认证态;三张截图固定串行。
|
|
94
|
+
# PLATFORM_ID、ALIPAYCLI_BIZ_INFO 与 PRODUCT 均由公共上下文初始化。
|
|
95
|
+
PLATFORM="${DEV_TOOL_NAME:-unknown}" PLATFORM_ID="${PLATFORM_ID:-}" ALIPAYCLI_BIZ_INFO="$ALIPAYCLI_BIZ_INFO" PRODUCT="${PRODUCT:-}" alipay-cli file upload "$HOME_IMG" -s payMerchantcodeSkill --json >"$TMP_HOME" 2>"$TMP_HOME_ERR"
|
|
96
|
+
HOME_UPLOAD_RC=$?
|
|
97
|
+
PLATFORM="${DEV_TOOL_NAME:-unknown}" PLATFORM_ID="${PLATFORM_ID:-}" ALIPAYCLI_BIZ_INFO="$ALIPAYCLI_BIZ_INFO" PRODUCT="${PRODUCT:-}" alipay-cli file upload "$SHOP_IMG" -s payMerchantcodeSkill --json >"$TMP_SHOP" 2>"$TMP_SHOP_ERR"
|
|
98
|
+
SHOP_UPLOAD_RC=$?
|
|
99
|
+
PLATFORM="${DEV_TOOL_NAME:-unknown}" PLATFORM_ID="${PLATFORM_ID:-}" ALIPAYCLI_BIZ_INFO="$ALIPAYCLI_BIZ_INFO" PRODUCT="${PRODUCT:-}" alipay-cli file upload "$PAY_IMG" -s payMerchantcodeSkill --json >"$TMP_PAY" 2>"$TMP_PAY_ERR"
|
|
100
|
+
PAY_UPLOAD_RC=$?
|
|
101
|
+
|
|
102
|
+
upload_combined_output() {
|
|
103
|
+
local stdout_file="$1" stderr_file="$2"
|
|
104
|
+
printf '%s\n%s' "$(cat "$stdout_file")" "$(cat "$stderr_file")"
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# 解析图片引用值(兼容 file upload 返回 fileKey 或 URL 字段)
|
|
108
|
+
parse_image_ref() {
|
|
109
|
+
local RAW
|
|
110
|
+
RAW=$(upload_combined_output "$1" "$2")
|
|
111
|
+
if [ "$(detect_error "$RAW" "MCP_AUTHENTICATED_CALL")" != "SUCCESS" ]; then
|
|
112
|
+
return 1
|
|
113
|
+
fi
|
|
114
|
+
# alipay-cli file upload 可能返回 MCP 信封,先解包
|
|
115
|
+
local UNWRAPPED=$(unwrap_mcp "$RAW")
|
|
116
|
+
echo "$UNWRAPPED" | jq -r '
|
|
117
|
+
.data.fileKey //
|
|
118
|
+
.data.picUrl //
|
|
119
|
+
.data.url //
|
|
120
|
+
.data.fileUrl //
|
|
121
|
+
.data.downloadUrl //
|
|
122
|
+
.data.data.fileKey //
|
|
123
|
+
.data.data.picUrl //
|
|
124
|
+
.data.data.url //
|
|
125
|
+
.data.data.fileUrl //
|
|
126
|
+
.data.data.downloadUrl //
|
|
127
|
+
.fileKey //
|
|
128
|
+
.picUrl //
|
|
129
|
+
.url //
|
|
130
|
+
.fileUrl //
|
|
131
|
+
.downloadUrl //
|
|
132
|
+
.result.fileKey //
|
|
133
|
+
.result.picUrl //
|
|
134
|
+
.result.url //
|
|
135
|
+
.result.fileUrl //
|
|
136
|
+
.result.downloadUrl //
|
|
137
|
+
empty
|
|
138
|
+
' 2>/dev/null
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
HOME_REF=$(parse_image_ref "$TMP_HOME" "$TMP_HOME_ERR")
|
|
142
|
+
SHOP_REF=$(parse_image_ref "$TMP_SHOP" "$TMP_SHOP_ERR")
|
|
143
|
+
PAY_REF=$(parse_image_ref "$TMP_PAY" "$TMP_PAY_ERR")
|
|
144
|
+
|
|
145
|
+
# 校验上传结果(含认证错误检测)
|
|
146
|
+
check_upload_error() {
|
|
147
|
+
local RAW
|
|
148
|
+
local ERROR_TYPE
|
|
149
|
+
RAW=$(upload_combined_output "$1" "$2")
|
|
150
|
+
ERROR_TYPE=$(detect_error "$RAW" "MCP_AUTHENTICATED_CALL")
|
|
151
|
+
if [ "$ERROR_TYPE" = "CLI_LOCAL_FS_PERMISSION" ]; then
|
|
152
|
+
UPLOAD_LOCAL_FS_AFTER_DISPATCH=true
|
|
153
|
+
return 1
|
|
154
|
+
fi
|
|
155
|
+
if [ "$ERROR_TYPE" = "MCP_AUTH_ERROR" ] && [ "${UPLOAD_AUTH_ERROR_SEEN:-false}" = "true" ]; then
|
|
156
|
+
return 1
|
|
157
|
+
fi
|
|
158
|
+
if ! handle_error "$RAW" "MCP_AUTHENTICATED_CALL"; then
|
|
159
|
+
if [ "$ERROR_TYPE" = "MCP_AUTH_ERROR" ]; then
|
|
160
|
+
UPLOAD_AUTH_ERROR_SEEN=true
|
|
161
|
+
fi
|
|
162
|
+
return 1
|
|
163
|
+
fi
|
|
164
|
+
return 0
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
ERRORS=""
|
|
168
|
+
UPLOAD_LOCAL_FS_AFTER_DISPATCH=false
|
|
169
|
+
if [ -z "$HOME_REF" ]; then
|
|
170
|
+
if ! check_upload_error "$TMP_HOME" "$TMP_HOME_ERR"; then
|
|
171
|
+
ERRORS="$ERRORS - 首页截图上传失败(认证或服务异常)"$'\n'
|
|
172
|
+
else
|
|
173
|
+
ERRORS="$ERRORS - 首页截图上传后未返回可用于签约的图片引用值"$'\n'
|
|
174
|
+
fi
|
|
175
|
+
fi
|
|
176
|
+
if [ -z "$SHOP_REF" ]; then
|
|
177
|
+
if ! check_upload_error "$TMP_SHOP" "$TMP_SHOP_ERR"; then
|
|
178
|
+
ERRORS="$ERRORS - 商品页截图上传失败(认证或服务异常)"$'\n'
|
|
179
|
+
else
|
|
180
|
+
ERRORS="$ERRORS - 商品页截图上传后未返回可用于签约的图片引用值"$'\n'
|
|
181
|
+
fi
|
|
182
|
+
fi
|
|
183
|
+
if [ -z "$PAY_REF" ]; then
|
|
184
|
+
if ! check_upload_error "$TMP_PAY" "$TMP_PAY_ERR"; then
|
|
185
|
+
ERRORS="$ERRORS - 支付页截图上传失败(认证或服务异常)"$'\n'
|
|
186
|
+
else
|
|
187
|
+
ERRORS="$ERRORS - 支付页截图上传后未返回可用于签约的图片引用值"$'\n'
|
|
188
|
+
fi
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
if [ -n "$ERRORS" ]; then
|
|
192
|
+
if [ "$UPLOAD_LOCAL_FS_AFTER_DISPATCH" = true ]; then
|
|
193
|
+
emit_control "SCREENSHOT_UPLOAD_RESULT=UNKNOWN"
|
|
194
|
+
fi
|
|
195
|
+
echo "❌ 截图上传失败:"
|
|
196
|
+
printf "%s" "$ERRORS"
|
|
197
|
+
exit 1
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
if ! validate_control_value "$HOME_REF" || ! validate_control_value "$SHOP_REF" || ! validate_control_value "$PAY_REF"; then
|
|
201
|
+
echo "❌ 截图上传返回的图片引用包含非法控制字符"
|
|
202
|
+
exit 1
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
echo "✅ 截图上传成功"
|
|
206
|
+
emit_control_field "SCREENSHOT_HOME_REF" "$HOME_REF" || exit 1
|
|
207
|
+
emit_control_field "SCREENSHOT_SHOP_REF" "$SHOP_REF" || exit 1
|
|
208
|
+
emit_control_field "SCREENSHOT_PAY_REF" "$PAY_REF" || exit 1
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#=============================================================================
|
|
3
|
+
# 脚本名称: upload_special_license.sh
|
|
4
|
+
# 功能描述: 上传特殊资质材料并生成 ar-sign.apply 的 specialLicense 数组
|
|
5
|
+
# 调用位置: Step 4 签约材料类别
|
|
6
|
+
# 用法:
|
|
7
|
+
# bash upload_special_license.sh --product-type <aipay|webpay|apppay> --mcc-context-receipt <receipt> --qualification-group-index <1-based> --file <localFile> [--file <localFile> ...]
|
|
8
|
+
#=============================================================================
|
|
9
|
+
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
|
|
12
|
+
if [ -f "${SCRIPT_DIR}/error_handler.sh" ]; then
|
|
13
|
+
# shellcheck source=/dev/null
|
|
14
|
+
source "${SCRIPT_DIR}/error_handler.sh"
|
|
15
|
+
else
|
|
16
|
+
echo "❌ 缺少错误处理脚本: ${SCRIPT_DIR}/error_handler.sh"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
# shellcheck source=/dev/null
|
|
20
|
+
source "${SCRIPT_DIR}/network_retry.sh"
|
|
21
|
+
|
|
22
|
+
require_command jq || exit 1
|
|
23
|
+
require_command alipay-cli || exit 1
|
|
24
|
+
require_command mktemp || exit 1
|
|
25
|
+
|
|
26
|
+
PRODUCT_TYPE=""
|
|
27
|
+
MCC_CONTEXT_RECEIPT=""
|
|
28
|
+
QUALIFICATION_GROUP_INDEX=""
|
|
29
|
+
FILE_PATHS=()
|
|
30
|
+
|
|
31
|
+
while [[ $# -gt 0 ]]; do
|
|
32
|
+
case "$1" in
|
|
33
|
+
--product-type)
|
|
34
|
+
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
35
|
+
PRODUCT_TYPE="$2"; shift 2 ;;
|
|
36
|
+
--mcc-context-receipt)
|
|
37
|
+
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
38
|
+
MCC_CONTEXT_RECEIPT="$2"; shift 2 ;;
|
|
39
|
+
--qualification-group-index)
|
|
40
|
+
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
41
|
+
QUALIFICATION_GROUP_INDEX="$2"; shift 2 ;;
|
|
42
|
+
--file)
|
|
43
|
+
[ $# -ge 2 ] || { echo "❌ 缺少参数值: $1"; exit 1; }
|
|
44
|
+
FILE_PATHS+=("$2"); shift 2 ;;
|
|
45
|
+
*)
|
|
46
|
+
echo "❌ 未知参数: $1"; exit 1 ;;
|
|
47
|
+
esac
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
case "$PRODUCT_TYPE" in
|
|
51
|
+
aipay|webpay|apppay) ;;
|
|
52
|
+
*) echo "❌ 请先传入 --product-type aipay|webpay|apppay"; exit 1 ;;
|
|
53
|
+
esac
|
|
54
|
+
if [ "${#FILE_PATHS[@]}" -eq 0 ]; then
|
|
55
|
+
echo "❌ 请至少提供一个 --file <localFile>"
|
|
56
|
+
exit 1
|
|
57
|
+
fi
|
|
58
|
+
if [ -z "$MCC_CONTEXT_RECEIPT" ] || ! [[ "$QUALIFICATION_GROUP_INDEX" =~ ^[1-9][0-9]*$ ]]; then
|
|
59
|
+
echo "❌ 特殊资质上传必须绑定本轮 MCC 上下文和有效资质组合序号"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
for FILE_PATH in "${FILE_PATHS[@]}"; do
|
|
64
|
+
if [ -z "$FILE_PATH" ]; then
|
|
65
|
+
echo "❌ --file 不能为空"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
if [ ! -f "$FILE_PATH" ]; then
|
|
69
|
+
echo "❌ 特殊资质文件不存在: $FILE_PATH"
|
|
70
|
+
exit 1
|
|
71
|
+
fi
|
|
72
|
+
done
|
|
73
|
+
|
|
74
|
+
VALIDATION_JSON=$(jq -cn \
|
|
75
|
+
--arg productType "$PRODUCT_TYPE" \
|
|
76
|
+
--arg mccContextReceipt "$MCC_CONTEXT_RECEIPT" \
|
|
77
|
+
--argjson qualificationGroupIndex "$QUALIFICATION_GROUP_INDEX" \
|
|
78
|
+
'{productType:$productType,mccContextReceipt:$mccContextReceipt,qualificationGroupIndex:$qualificationGroupIndex}') || exit 1
|
|
79
|
+
EXPECTED_LICENSE_TYPES_JSON=$(printf '%s' "$VALIDATION_JSON" | node "$ERROR_RENDERER" --resolve-special-license-types 2>/dev/null) || {
|
|
80
|
+
echo "❌ 待上传特殊资质与本轮 MCC 资质组合不一致,已停止上传"
|
|
81
|
+
exit 1
|
|
82
|
+
}
|
|
83
|
+
if ! printf '%s' "$EXPECTED_LICENSE_TYPES_JSON" | jq -e \
|
|
84
|
+
--argjson fileCount "${#FILE_PATHS[@]}" \
|
|
85
|
+
'type == "array" and length == $fileCount and all(.[]; type == "string" and length > 0)' >/dev/null 2>&1; then
|
|
86
|
+
echo "❌ 特殊资质文件数量与所选组合要求不一致,请按材料提示顺序完整提供"
|
|
87
|
+
exit 1
|
|
88
|
+
fi
|
|
89
|
+
LICENSE_TYPES=()
|
|
90
|
+
INDEX=0
|
|
91
|
+
while [ "$INDEX" -lt "${#FILE_PATHS[@]}" ]; do
|
|
92
|
+
LICENSE_TYPE=$(printf '%s' "$EXPECTED_LICENSE_TYPES_JSON" | jq -r --argjson index "$INDEX" '.[$index]') || exit 1
|
|
93
|
+
LICENSE_TYPES+=("$LICENSE_TYPE")
|
|
94
|
+
INDEX=$((INDEX + 1))
|
|
95
|
+
done
|
|
96
|
+
|
|
97
|
+
init_alipay_cli_product "$PRODUCT_TYPE" || exit 1
|
|
98
|
+
export ALIPAY_AIPAY_SUPPRESS_AUTH_LOGOUT=1
|
|
99
|
+
require_alipay_cli_local_state_access_or_emit || exit "$?"
|
|
100
|
+
|
|
101
|
+
TMP_BASE="${TMPDIR:-/tmp}"
|
|
102
|
+
TMP_BASE="${TMP_BASE%/}"
|
|
103
|
+
TMP_JSON=$(mktemp "${TMP_BASE}/special_license.XXXXXX") || { echo "❌ 创建临时文件失败"; exit 1; }
|
|
104
|
+
trap 'rm -f "$TMP_JSON"' EXIT
|
|
105
|
+
printf '[]\n' > "$TMP_JSON"
|
|
106
|
+
|
|
107
|
+
parse_upload_ref() {
|
|
108
|
+
local raw="$1"
|
|
109
|
+
if [ "$(detect_error "$raw" "MCP_AUTHENTICATED_CALL")" != "SUCCESS" ]; then
|
|
110
|
+
return 1
|
|
111
|
+
fi
|
|
112
|
+
local unwrapped
|
|
113
|
+
unwrapped=$(unwrap_mcp "$raw")
|
|
114
|
+
echo "$unwrapped" | jq -r '
|
|
115
|
+
.data.fileKey //
|
|
116
|
+
.data.picUrl //
|
|
117
|
+
.data.url //
|
|
118
|
+
.data.fileUrl //
|
|
119
|
+
.data.downloadUrl //
|
|
120
|
+
.data.data.fileKey //
|
|
121
|
+
.data.data.picUrl //
|
|
122
|
+
.data.data.url //
|
|
123
|
+
.data.data.fileUrl //
|
|
124
|
+
.data.data.downloadUrl //
|
|
125
|
+
.fileKey //
|
|
126
|
+
.picUrl //
|
|
127
|
+
.url //
|
|
128
|
+
.fileUrl //
|
|
129
|
+
.downloadUrl //
|
|
130
|
+
.result.fileKey //
|
|
131
|
+
.result.picUrl //
|
|
132
|
+
.result.url //
|
|
133
|
+
.result.fileUrl //
|
|
134
|
+
.result.downloadUrl //
|
|
135
|
+
empty
|
|
136
|
+
' 2>/dev/null
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
ERRORS=""
|
|
140
|
+
UPLOAD_AUTH_ERROR_SEEN=false
|
|
141
|
+
INDEX=0
|
|
142
|
+
export PLATFORM="${DEV_TOOL_NAME:-unknown}" PLATFORM_ID="${PLATFORM_ID:-}" ALIPAYCLI_BIZ_INFO PRODUCT
|
|
143
|
+
for FILE_PATH in "${FILE_PATHS[@]}"; do
|
|
144
|
+
INDEX=$((INDEX + 1))
|
|
145
|
+
LICENSE_TYPE="${LICENSE_TYPES[$((INDEX - 1))]}"
|
|
146
|
+
run_network_retry RAW write "special_license_upload_${INDEX}" -- \
|
|
147
|
+
alipay-cli file upload "$FILE_PATH" -s payMerchantcodeSkill --json
|
|
148
|
+
UPLOAD_RC=$?
|
|
149
|
+
if [ "$UPLOAD_RC" -eq 75 ] || [ "$UPLOAD_RC" -eq "${ALIPAY_CLI_LOCAL_STATE_PERMISSION_EXIT_CODE:-77}" ]; then
|
|
150
|
+
echo "❌ 特殊资质上传结果无法确认,已停止后续上传和签约"
|
|
151
|
+
emit_control "SPECIAL_LICENSE_UPLOAD_RESULT=UNKNOWN"
|
|
152
|
+
exit 1
|
|
153
|
+
fi
|
|
154
|
+
if [ "$UPLOAD_RC" -ne 0 ]; then
|
|
155
|
+
echo "❌ 特殊资质上传因网络或服务异常在安全重试后仍未恢复"
|
|
156
|
+
emit_control "SPECIAL_LICENSE_UPLOAD_RESULT=FAILED"
|
|
157
|
+
exit 1
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
LICENSE_REF=$(parse_upload_ref "$RAW")
|
|
161
|
+
if [ -z "$LICENSE_REF" ]; then
|
|
162
|
+
ERROR_TYPE=$(detect_error "$RAW" "MCP_AUTHENTICATED_CALL")
|
|
163
|
+
if [ "$ERROR_TYPE" = "MCP_AUTH_ERROR" ] && [ "$UPLOAD_AUTH_ERROR_SEEN" = "true" ]; then
|
|
164
|
+
:
|
|
165
|
+
elif ! handle_error "$RAW" "MCP_AUTHENTICATED_CALL"; then
|
|
166
|
+
[ "$ERROR_TYPE" != "MCP_AUTH_ERROR" ] || UPLOAD_AUTH_ERROR_SEEN=true
|
|
167
|
+
fi
|
|
168
|
+
ERRORS="$ERRORS - 特殊资质文件 ${INDEX} 上传失败或未返回可用于签约的图片引用值"$'\n'
|
|
169
|
+
continue
|
|
170
|
+
fi
|
|
171
|
+
if ! validate_control_value "$LICENSE_REF"; then
|
|
172
|
+
ERRORS="$ERRORS - 特殊资质文件 ${INDEX} 上传返回值包含非法控制字符"$'\n'
|
|
173
|
+
continue
|
|
174
|
+
fi
|
|
175
|
+
NEXT_JSON=$(jq \
|
|
176
|
+
--arg licenseType "$LICENSE_TYPE" \
|
|
177
|
+
--arg licensePic "$LICENSE_REF" \
|
|
178
|
+
'. + [{licenseType: $licenseType, licensePic: $licensePic}]' "$TMP_JSON") || exit 1
|
|
179
|
+
printf '%s\n' "$NEXT_JSON" > "$TMP_JSON"
|
|
180
|
+
done
|
|
181
|
+
|
|
182
|
+
if [ -n "$ERRORS" ]; then
|
|
183
|
+
echo "❌ 特殊资质上传失败:"
|
|
184
|
+
printf "%s" "$ERRORS"
|
|
185
|
+
exit 1
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
SPECIAL_LICENSE_JSON=$(jq -c . "$TMP_JSON") || exit 1
|
|
189
|
+
if ! validate_control_value "$SPECIAL_LICENSE_JSON"; then
|
|
190
|
+
echo "❌ 特殊资质上传结果包含非法控制字符"
|
|
191
|
+
exit 1
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
echo "✅ 特殊资质上传成功"
|
|
195
|
+
emit_control_field "SPECIAL_LICENSE_JSON" "$SPECIAL_LICENSE_JSON" || exit 1
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# 服务市场业务语义
|
|
2
|
+
|
|
3
|
+
服务市场仅适用于 AI 按量付费;命令见 `../flow.md`,实现见 `scripts/service.sh`。
|
|
4
|
+
|
|
5
|
+
`service.sh` 固定 `PRODUCT=AIPAY`,不加入服务 MCP 请求。
|
|
6
|
+
|
|
7
|
+
## 查询与候选
|
|
8
|
+
|
|
9
|
+
`a2a-pay-service.discoverBazaarServicesForMcp` 必须按 `offset/total` 完整分页。当前成功协议为 `code="10000"`、`data.items`、`data.pagination`,兼容旧 `success=true/resultObj.serviceList`;失败、异常或分页不完整不得作为空列表。
|
|
10
|
+
|
|
11
|
+
`SERVICE_CANDIDATES_JSON` 是唯一候选源。轮到服务类别时,`onboarding-message service-candidates` 输出事实表和提示;禁止提前展示、手工拼表或仅输出 ID。空列表收集资料;非空只接受复用、新建或 `修改:<serviceId>`。`新建` 可附五项资料,完整则创建,否则沿用意图补缺。无效选择以同一命令加 `--selection-state invalid` 重显候选和受控提示,等待重选且禁止写入。禁用默认或猜值。
|
|
12
|
+
|
|
13
|
+
## 五项资料
|
|
14
|
+
|
|
15
|
+
创建和修改都需要:服务名称、服务描述、服务地址、服务单价、请求示例 JSON。`schemaUrl` 当前承载 JSON 示例,不是网页 URL。材料 runner 仅为兼容既有口径把“资源 URL、单次价格、序列化 JSON 请求示例”归一化到对应规范字段;后续统一使用上述五项名称。
|
|
16
|
+
|
|
17
|
+
资料由下列入口校验;缺失由材料 runner 收集,`INITIAL` 展示五项示例且不要求重发 `新建`:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message material-collect --category service --state "$MATERIALS_STATE" --product-type "$PRODUCT_TYPE" --missing-fields "$MISSING_FIELDS" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
21
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" service validate --name "<name>" --desc "<desc>" --url "<url>" --pricing "<pricing>" --schema "<json>" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
用户可输入纯数字、`0.08元`、`0.08 元`、`0.08元/次` 或 `0.08 元/次`。后续 renderer 和 save 只复用脚本内部事实 `SERVICE_PRICING=0.08` 的纯数字值,模板负责展示单位;不得再次追加“元/次”。
|
|
25
|
+
|
|
26
|
+
## 保存边界
|
|
27
|
+
|
|
28
|
+
- 创建:数量上限检查通过且五项资料有效后,展示非阻塞 `service.create.summary` 并直接保存;不传 `serviceId`,不再等待确认。
|
|
29
|
+
- 修改:必须传当前候选完整 `serviceId` 和全部五项资料;保存前使用 `onboarding.write.confirm/SERVICE_UPDATE_ONLY` 绑定当前登录会话、脱敏主体、产品、动作、目标与参数,并等待当前摘要后的明确肯定回复;`1` 只是兼容快捷输入。
|
|
30
|
+
- 任何目标、参数、主体或会话变化都使旧修改确认失效。创建不得进入修改确认。
|
|
31
|
+
|
|
32
|
+
保存调用 `a2a-pay-service.saveBazaarServiceForMcp`。明确 `NOT_SENT` 才自动重试;`MAYBE_SENT` 用列表按 `serviceId` 和五项资料核验,不靠同名猜测。未解析到实际 `serviceId` 时禁止宣称完成。脚本必须输出 `SERVICE_SAVE_RESULT=SUCCESS|FAILED|UNKNOWN`,10 个服务上限也输出 `FAILED`;`UNKNOWN` 禁止自动重复保存并进入服务分支待办,不清除其他分支事实。
|
|
33
|
+
|
|
34
|
+
成功结果只用登记 renderer:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message service-result --service-id "$SERVICE_ID" --actual-result "$ACTUAL_RESULT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
脚本成功返回的服务状态如果未取得,只能写“状态未取得”;不得推定审核通过、可用或生产就绪。真实生产 `serviceId` 只能来自实际创建或复用结果,AI 按量付费沙箱固定 `api_mock_service_id` 不得用于生产。
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# 支付宝 AI 付接入 Skill
|
|
2
|
+
## 支持范围
|
|
3
|
+
|
|
4
|
+
仅支持 AI 按量付费、AI 网页应用收款、AI 移动应用收款;“按量付费”“网站支付”“APP 支付”等旧称仅作输入别名,对客仍用新名称。明确要求当面付、付款码、订单码支付、JSAPI 支付、预授权支付或商家扣款时不得改判,按 `normal/rejection-guide.md` 受控拒绝。
|
|
5
|
+
|
|
6
|
+
AI 网页应用收款覆盖 PC 网页和手机浏览器/H5,接口固定 `alipay.trade.page.pay`,签约固定 `productType=webpay`、`salesCode=I1080300001000041203`、`appType=PC_WEB`;`PC_WEB` 不表示仅 PC。
|
|
7
|
+
|
|
8
|
+
## 执行红线
|
|
9
|
+
|
|
10
|
+
1. **流程与确认**:按 flow 顺序执行;阻塞确认只认用户对当前摘要的明确回复,不以工具超时、默认值或 Task 状态代替,不增未登记操作、材料或确认。
|
|
11
|
+
2. **事实与依据**:禁止编造配置、状态、结果或规则;无当前实现、实际返回或官方依据时说明无法确认。额度解限、可收款时间和产品开通问题用[支付宝商家平台](https://b.alipay.com/page/portal/home),代码、应用创建和发布问题用[支付宝开放平台](https://open.alipay.com/)或[支付宝技术支持](https://opensupport.alipay.com/support/intelligent-services?form=payskill)。静态扫描或提交成功不等于完成。
|
|
12
|
+
3. **CLI/MCP 契约**:优先用动作处脚本;直调的完整方法和 JSON 仅来自已读文档或 `alipay-cli mcp list <server> --json` 实时 schema。遇到 `Server not found`、`Method not found`、`Invalid params` 立即停下核对,禁止试近似名称。
|
|
13
|
+
4. **联网权限**:`alipay-cli` 登录/MCP、上传、沙箱创建和下载按联网命令处理;支持显式授权时首次即申请,详见 `normal/alipay-cli-env.md`。
|
|
14
|
+
5. **用户文件**:只改已确认项目和范围,不清空或删除既有项目;“新建/重做/换一个”不是删除授权。具体删除仍遵守 Integration flow 的清单、二次确认和禁删边界。
|
|
15
|
+
6. **敏感信息**:应用公钥仅由用户生成并明确提供;禁止 Agent 请求/处理生产私钥、代为生成密钥对、补全/改写公钥或添加 PEM 头尾。预发版仅允许用户明确选择方案3后,按 Onboarding flow 打开随包的本地离线页面,由用户在浏览器内自行生成并保存密钥;禁止 Agent 点击生成、读取页面密钥、读取下载文件或把页面接入联网服务。敏感值、临时 URL 和沙箱资料遵守对应 flow/script 的白名单、权限和输出边界。
|
|
16
|
+
7. **沙箱结论**:真实快速沙箱配置不得用占位值,唯一例外是 AI 按量付费沙箱 `service_id=api_mock_service_id`,且生产禁用。`CREATE_PENDING|VERIFY_PENDING` 只允许继续代码实现,阻止字段使用、摘要、后置校验、联调和付款体验。字段校验不等于支付测试;仅完整 402 链路满足 flow 才可称沙箱测试通过。
|
|
17
|
+
8. **异步通知**:AI 网页应用收款/AI 移动应用收款必须实现通知。本地无公网 HTTPS `notify_url` 时可不传并以交易查询验收,公网通知联调列为人工待验证;生产上线前须恢复通知并完成验签、幂等、关键字段校验、`success` 回写和补偿查询,否则不宣称生产就绪。
|
|
18
|
+
9. **受控页面**:授权链接仅由 `auth.sh` 按固定产品/MCC 生成,只允许 `https://aipay.alipay.com/cli-auth` 及登记参数,禁用 CLI `verification_url`;公钥页和系统 opener 只走登记脚本。失败后宿主内置浏览器只可打开已交付的同一 URL 一次;仍失败才提示手动打开,再有限轮询。禁止搜索、改写或自动操作;opener/config 写失败不算业务失败。
|
|
19
|
+
10. **对客输出**:指定 runner/renderer/脚本时,stdout 是唯一对客正文,须原文回复且不加旁白;工具输出记录、折叠面板或日志不等于已对客发送。展示命令只执行登记单条命令,禁 `2>&1`、管道、`grep/sed/awk/tee`、临时包装或拆回 `jq/printf/renderer`。除 `self_update.mjs` 的 `SELF_UPDATE:*` stderr 终态外,内部事实行均以 `ALIPAY_AIPAY_INTERNAL:` 开头;宿主合并输出时仍整行剔除,严禁对客。`integration.start.confirm`、`onboarding.plan.confirm`、`sandbox.configuration.pending`、`sandbox.environment.summary`、`integration.safety.closeout` 和 `integration.checklist.result` 成功渲染时必须各自产生唯一 `ALIPAY_AIPAY_INTERNAL:CUSTOMER_MESSAGE_DELIVERY_REQUIRED=<messageId>`;下一动作先将剔除内部行后的 stdout 原文作为独立可见消息送达,不得以工具面板、折叠输出、进度话术或最终答复代替,也不得在送达前继续调用工具。送达后同回合按 flow 继续,不等待回复。成功沙箱准备 `READY` 时 stdout 仍按 flow 静默,不构成交付消息;只有待配置正文和后置摘要需要交付。所有 `postRenderHintType=scanReturn` 的页面消息都是交付屏障(当前为 `auth.page`、`application.key.page`):先独立送达页面 stdout,再执行受控 opener 和有限轮询,不合并 pending/收口;不要求确认。阻塞正文后等待;剔除内部行后正文为空则直接转移。
|
|
20
|
+
11. **确定性转移**:固定脚本终态后立即转移;只执行动作处登记命令,禁止追加 `jq/cat/grep/curl` 或临时脚本重复解析。失败只走登记恢复;项目自检不绕过 Skill 脚本或打印敏感配置。
|
|
21
|
+
|
|
22
|
+
## 标准消息
|
|
23
|
+
|
|
24
|
+
`normal/json/customer-messages.json` 是稳定对客正文唯一目录。Integration 启动使用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message start-confirm --root-intent "$ROOT_INTENT" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`,收口使用 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-message checklist-result --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;Onboarding 的 MCC、发现、材料、候选、收口及授权、公钥页、密钥工具、错误均用登记 runtime 动作。`process.partial_result` 必须发送 closeout 动作的完整 stdout,缺少 AI 网页应用收款上线关键点或收款限制引导即未送达。仅无托管入口时直调 renderer:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" render --schema <messageId> --variant <VARIANT> --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
28
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" render <messageId> --variant <VARIANT> --input-json "$MESSAGE_INPUT_JSON" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
动态 JSON 只取本轮事实;无变量传 `{}`,禁止字符串替换或 `eval`。正常路径禁止预跑 `render --schema` 或用 `jq`/消息目录探测字段。renderer 返回 `MESSAGE_RENDER_ERROR` 时必须先复查同一 `messageId` + `variant` schema,禁止猜枚举;非 0 即停止,不手写兜底。
|
|
32
|
+
|
|
33
|
+
当前用户回复已展示的公钥获取方式时,先按 Onboarding flow Step 4 区分方式编号与应用选择;`1/2/3` 不作为 appId 或通用业务确认,加载对应 phase 后处理。该分流仍在既有用户输入计数和已授权会话采集之后,不增加计数或 stage。
|
|
34
|
+
|
|
35
|
+
阻塞点展示登记摘要后,把用户原始回复交给 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" reply confirm --reply "$USER_REPLY" --input-id "$USER_INPUT_ID" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;仅唯一 `ALIPAY_AIPAY_INTERNAL:REPLY_DECISION=CONFIRMED` 可推进。`1`、`继续/继续推进`、`好了/已完成`、`确认/确定/同意`、`OK` 等明确肯定表达等价;否定、疑问、取消、修改或含糊回复不确认。确认只绑定当前产品、项目、主体、候选和摘要,任一变化即失效;此校验不新增操作点。
|
|
36
|
+
|
|
37
|
+
`<SKILL_DIR>` 是启动器确定的当前 Skill 规范化绝对路径占位符,不是 shell 变量。Skill 自有受控 Node、Shell 和 Python 入口必须使用文档登记的 `<SKILL_DIR>/references/...` 绝对路径单命令执行,禁止前置 `cd`、拼 `&&`、管道或退回相对路径;这些入口不新增权限确认或业务操作点。未登记命令和用户项目命令仍使用所在 Markdown 目录或已确认项目根,不得借用 Skill 权限。
|
|
38
|
+
|
|
39
|
+
## 入口路由
|
|
40
|
+
|
|
41
|
+
### 当前对话的稳定会话身份
|
|
42
|
+
|
|
43
|
+
优先复用启动器在处理内测声明选择时已取得的 `AGENT_PLATFORM` 与 `SESSION_ID`;禁止重新 resolve 或生成另一份会话身份。仅尚无该值时,在首条 bootstrap/start-run 或其他业务 runtime 命令前执行一次:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry resolve-session --agent-platform "<AGENT_PLATFORM>"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
从唯一 `ALIPAY_AIPAY_INTERNAL:SESSION_ID=<值>` marker 取得 `SESSION_ID`,只保留在当前 Agent 对话上下文,不对客、不新增业务状态。第三方项目 ID 不是会话 ID,新会话协议不拿项目 ID 定位 run;业务 PLATFORM_ID 的项目优先规则保持不变。该只读动作沿用显式 `ALIPAY_AIPAY_SESSION_ID` 或当前可靠的宿主/通用 session 来源;没有匹配的 session 来源时生成独立 UUID,不借用其他宿主残留 ID,也不使用共享默认文件。后续本文件、flow 和模块中的每条 runtime 命令均追加 `--session-id "<SESSION_ID>"`,包括用户输入计数、stage、错误恢复和 Onboarding 衔接;占位符替换为同一个已取得的值。gateway 在读取 active run 和业务参数解析前剥离该参数,并通过 `ALIPAY_AIPAY_SESSION_ID` 传给全部子进程。
|
|
50
|
+
|
|
51
|
+
同一对话不得每条命令重新 resolve 或生成会话 ID;宿主名称变化不改变已取得的 `SESSION_ID`。中断或压缩后能可靠恢复原值时继续使用,无法恢复时重新 resolve,并重新取得正式 `RUN_ID`,不得把旧 `RUN_ID` 强行绑定到新会话;新身份没有采集授权,必须重新展示内测声明并取得选择,不得沿用旧同意事实。Full Process Worker 必须接收并使用主 Agent 的同一 `SESSION_ID`,不得自行 resolve。会话 ID 只负责状态定位,不生成 `run_id`,不改变 UUID 创建、组合复用、用户输入计数、stage 唯一性或最终 summary 关闭规则。
|
|
52
|
+
|
|
53
|
+
首次路由前,Agent 在当前上下文自行回答“当前承载我的 Agent 工具叫什么”,从宿主明确身份、系统说明或当前工具上下文取得工具名称,记为 `AGENT_PLATFORM`(例如 `WorkBuddy`),不向用户提问、不把这段判断对客输出。不得把底层模型名称、项目名称、安装目录或用户举例当作当前宿主身份;无法确认时才使用 `unknown`。该事实仅保留当前对话,不写缓存;上下文丢失时重新判断。
|
|
54
|
+
|
|
55
|
+
从首条 bootstrap/start-run 起,本文件及所有 flow 登记的每条 runtime 命令均追加 `--agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`,将两个占位符分别替换为当前工具名称和根入口已取得的同一会话 ID;不使用环境变量前缀,不依赖前一次工具调用的进程环境。gateway 在业务参数解析前剥离此公共参数,规范化后传给当前进程及子进程。业务 CLI 的 `PLATFORM` 和遥测 Yuyan `d2` 优先使用本次命令的 Agent 宿名,只有该值为 `unknown` 或非法时才检查当前进程的宿主自动识别信号;继承的通用平台变量只能作为末级兼容值。这样即使进程同时残留其他宿主的 session/thread 环境变量,也不得遮蔽本次 runtime 明确提供的当前宿主。所有来源中的 `unknown` 或非法值都继续回退,不得提前终止识别。该兜底不使用宿主名称枚举或映射表:纯 ASCII 名称统一小写并去除空格、下划线和连字符,合法 Unicode 名称保留可读原文;无法安全规范化仍为 `unknown`。该参数不改变业务确认、run_id、PLATFORM_ID 或模型字段。
|
|
56
|
+
|
|
57
|
+
根 `SKILL.md` 启动器已经在读取本文件前确定本轮有效版本、完整交付 `preview.notice` 声明并取得用户的“确认”或“仅使用服务”有效选择,随后完成本对话所需的首次 `env refresh-alipay-cli` 或命中同路径、同版本的成功刷新事实。声明未确认时禁止读取本文件。运行时禁止再次执行自更新、读取 `normal/self-update.md` 或切换其他副本;成功事实仍有效时不重复刷新 CLI,只按原始请求识别根意图并加载入口:
|
|
58
|
+
|
|
59
|
+
| 意图 | 判定 | 入口 | 后续按需加载 |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| `integration_only` | 只要求代码开发、支付集成或集成排障,未同时要求产品开通 | 执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" integration-bootstrap --root-intent integration_only [--product-type <aipay\|webpay\|apppay>] --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` | 当前阶段、产品和语言的契约、示例与脚本 |
|
|
62
|
+
| `onboarding_only` | 只要求签约、入驻或产品开通,未同时要求代码开发 | 执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-bootstrap --root-intent onboarding_only [--product-type <aipay\|webpay\|apppay>] --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` | 当前阶段的授权、查询或写分支模块 |
|
|
63
|
+
| `full_process` | 明确要求完整接入、一站式,或同一请求同时要求代码开发和产品开通 | `normal/full-process-routing.md` | 先 Integration,满足衔接条件后 Onboarding |
|
|
64
|
+
|
|
65
|
+
`ROOT_INTENT` 由入口路由确定,只能取 `integration_only`、`onboarding_only` 或 `full_process`。
|
|
66
|
+
|
|
67
|
+
`integration_only` 的 `integration-bootstrap` 在产品已唯一确定时必须携带 `--product-type`,并串行执行 `telemetry start-run` 与 `flow integration entry`;产品尚未唯一确定时省略产品且不创建正式 run,后续由 `integration-message start-confirm` 首次开 run并生成 `clarify_intent`。`onboarding_only` 的 `onboarding-bootstrap` 同理:产品已唯一时携带产品并先启动 run,尚未唯一时由 `mcc resolve-plan` 或 `onboarding-message plan-confirm` 首次启动。两者均为既有无业务写入动作,执行后不得重复原子命令。Windows 引导渲染优先取现有正式 run_id;若尚未创建正式 run,则退回当前会话可用的平台标识,非 Windows 返回 entry 契约。`full_process` 不使用 `integration-bootstrap`;衔接 Onboarding 也不使用带 `start-run` 的 bootstrap,仍执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-message platform-entry --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"` 后按需加载 entry,避免重复 `clarify_intent`。
|
|
68
|
+
|
|
69
|
+
若 bootstrap 阶段产品尚未唯一确定,则不会补开正式 run;首个产品确认或方案确认消息在产品已唯一确定后首次触发 `start-run` 并上报 `clarify_intent`,后续只按当前 active run 计数。
|
|
70
|
+
|
|
71
|
+
只有当前宿主会话已有明确采集授权时,`start-run` 才允许确保存在 ACTIVE conversation。未选择、拒绝或采集开关关闭时仅创建阶段 run,不创建采集会话。若已获同意但启动器遗漏了会话入口,调用方应追加 `--conversation-session-id "<SESSION_ID>" --conversation-message-id "<MESSAGE_ID>" --conversation-message-json "<SANITIZED_MESSAGE_JSON>"`,由 `start-run` 自动补建会话并采集当前消息;该兜底不改变阶段 run 的创建和计数语义。
|
|
72
|
+
|
|
73
|
+
`full_process` 识别根意图后,仅在产品已唯一确定时执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry start-run --root-intent full_process --product-type <aipay|webpay|apppay> --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`;产品尚未唯一确定时不创建正式 run,后续由首个产品确认动作触发。`integration_only` 和 `onboarding_only` 已由上表各自 bootstrap 包含同一次 `start-run` 时不得重复执行。命令创建或复用后必须从唯一 `ALIPAY_AIPAY_INTERNAL:RUN_ID=<run_id>` marker 取得 `RUN_ID`,不得自行编造;同一 active 组合复用,组合变化或旧 run 已关闭时生成新的 UUID run。触发首个新 run 的消息不计入新 run;已有 active run 时,组合切换消息按下方统一前置协议先计入旧 run,随后旧 run 关闭且不补 summary,该消息不在新 run 重计。第三方项目 ID 只保留为业务 `PLATFORM_ID` 的优先项目维度,绝不反向生成逻辑 `run_id`;缺少第三方项目 ID 时,`common.sh` 仍以当前 `run_id` 作为 `PLATFORM_ID`。
|
|
74
|
+
|
|
75
|
+
遥测默认开启。`ALIPAY_AIPAY_TELEMETRY=0|false|off|no` 时不计数,不生成 event/c4/进度,不读写 outbox/status,不上传、不启动 worker、不 flush;只允许保留 `PLATFORM_ID <- run_id` 所需的最小私有 run context;用户明确拒绝采集时,另允许保存最小拒绝状态并关闭已有采集,防止重新开启开关后旧授权复活,不保存正文或生成事件。失败静默,不改变业务、消息、确认或卡点,内部 marker 不对客。`integration_only` 由 `integration_summary` 终结;`onboarding_only` 由 `onboarding_summary` 终结;`full_process` 由 `all_summary` 终结,`full_process` 的 `integration_summary` 只是中间 event。每个 stage 先在 run state 固定唯一 event,再写 outbox并同步上传,网络硬超时 3 秒;失败保留原 event 后才尝试 detached worker,绝不延迟重算 c4。补传细节见 `normal/telemetry.md`。
|
|
76
|
+
|
|
77
|
+
对话采集从内测声明后的明确同意回复开始,不补采同意前的内容,使用独立的 `conversation_id`,不携带或关联业务 `run_id`。对话遥测环境开关默认可用,但实际采集还必须取得当前会话的明确同意;`ALIPAY_AIPAY_CONVERSATION_TELEMETRY=0|false|off|no` 时只停用对话采集,不影响阶段遥测。阶段遥测继续使用 code=1005;对话遥测默认使用独立 code=1008,可由 `ALIPAY_AIPAY_CONVERSATION_CODE` 覆盖,非法值或与 1005 相同则停用对话采集。
|
|
78
|
+
|
|
79
|
+
当前会话已明确同意、全局遥测开启且对话 code 有效时,读取 `normal/conversation-telemetry.md` 的采集规则。每轮采集本轮用户消息,以及阻塞式对客消息和最终收口助手回复;过程输出、工具结果和非阻塞阶段消息跳过。用户消息先执行原有 `count-user-input`,再采集。助手消息必须在发送前采集,采集副本仅替换随后发送正文中的凭证和个人信息,其余文字与格式保持一致;不得为满足逐字一致而上传敏感原文。
|
|
80
|
+
|
|
81
|
+
运行时命令使用 `$CONVERSATION_ID` 和 `$RUN_ID` 作为 Shell 变量;协议字段统一写为 `conversation_id` 和 `run_id`。对话采集不关联业务 run,不上传工具输出、system 消息、隐藏推理或附件内容。任务完成、明确取消或退出时,先采集最终回复,再执行 `telemetry end-conversation`。采集失败静默,不阻断 Skill。
|
|
82
|
+
|
|
83
|
+
用户输入计数是入口前置职责,只从 `clarify_intent` 之后开始,到当前 `run_id` 的 `summary` 收口为止。当前 active run 期间,聊天框里**每收到一条用户消息都必须先计一次**,再做任何 Skill 相关或非 Skill 相关处理;计数不按是否与 Skill 流程强相关筛选。只要是用户在 Agent 对话框发送的消息,就按一条计,不计宿主/系统/网页授权、扫码、Skill stage、runner、工具调用或自动轮询。文字、图片/文件、空白/短确认、材料补充、确认回复和中途插话都按一条用户消息计;同一条消息含文字和图片/文件仍只计一条。`USER_INPUT_ID` 是当前 active run 内用户消息的本地幂等键:Agent 给每条新用户消息分配对话内单调序号,同一消息重试复用同一值。`USER_INPUT_ID` 不得包含或派生自用户输入内容、文件名、路径、截图/OCR、业务材料、stage 名或工具调用序号;运行时只保存其本地 hash,不上报。
|
|
84
|
+
|
|
85
|
+
`start-run` 的 `clarify_intent` 开始生成后计数器为 0,直到当前 run 最终 summary 到达。Agent 每收到一条聊天框用户消息,都必须先分配不含消息内容的 `USER_INPUT_ID`,执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" telemetry count-user-input --run-id "$RUN_ID" --input-id "$USER_INPUT_ID" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`,再解释、分类、路由、调用 runner/tool 或回复;不论消息是否与 Skill 相关,文字、图片/文件、空白、确认、中途插话和打断后输入都执行。同一消息重试复用同一 ID,runtime 只保存 `run_id + USER_INPUT_ID` hash。无 active run、缺少/错误 run ID 或 run 已关闭时成功 no-op。runner、recovery、renderer、交互回复、tool call/result 和 stage 禁止隐式计数;它们保留的业务 `--input-id` 也不是计数兜底。宿主总入口不在仓库内,因此这是 Agent 收到消息后必须遵循的唯一显式计数动作,不增加用户操作。
|
|
86
|
+
|
|
87
|
+
每个登记 stage 动作前,Agent 回顾当前可见历史并得到 `HISTORY_COUNT`;只统计本 run `clarify_intent` 后的用户角色消息,无法可靠回顾时使用 `null`。调用能生成 stage 的业务命令时追加 `--telemetry-run-id "$RUN_ID" --telemetry-history-count "$HISTORY_COUNT"`,由统一 gateway 在业务 parser 前剥离并传给唯一 stage 责任方,Agent 不再额外调用 `telemetry stage`。首次在产品/MCC 确认命令内部新建 run 时尚无 marker,该进程使用刚创建的 active run 且本次 history 固定为 0。`c4` 只承载 `user_input_after_clarify_intent`、`history_count`、`root_intent` 和按唯一非 summary event 数计算的 `progress_pct`;正式计数始终取 runtime counter,history 只诊断、不纠偏。
|
|
88
|
+
|
|
89
|
+
三种入口均只在无法确定产品时执行 `product-clarify` runner;产品明确但缺 MCC 用 `mcc-clarify`,且必须携带当前 `ROOT_INTENT`,由 runner 先创建或复用正式 telemetry run。已有经营描述、名称或编码时只执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" mcc resolve-plan --query "$MCC_SEARCH_QUERY" --product-type "$PRODUCT_TYPE" --root-intent "$ROOT_INTENT" [--semantic-terms-json "$MCC_SEMANTIC_TERMS_JSON"] [--agent-candidate-refs-json "$MCC_AGENT_CANDIDATE_REFS_JSON"] --input-id "$USER_INPUT_ID" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`。`ROOT_INTENT` 缺失或非法时 runner 必须停止,禁止依赖跨进程环境变量静默推断或在没有正式 run 的情况下继续 MCC 查询。非精确编码时,Agent 在首次调用中最多补充 12 个有原话依据的行业概念、经营对象或同义表达;本地结果为 `NONE`、候选冲突或低置信时,runner 只发出一次目录复核 marker,携带同一次 `queryMcc` 返回的当前产品 MCC 名称、描述和稳定引用,Agent 返回最多 8 个本轮目录引用后原样重跑;目录复核不新增 MCP/网络调用且不消耗语义重试预算。语义扩充仍受同一 `run + 用户输入 + 原始 query + 产品` 最多 2 次限制,复用同一 `USER_INPUT_ID`,每次只增加有原话依据且此前未使用的概念;达到上限仍为 `NONE` 时必须按既有 no-match 对客消息要求用户重新描述经营信息。禁止通过更换 query、重置参数或重复调用绕过上限,也禁止硬编码映射、自由提交 MCC code、远程语义或手拼候选。runner 按 Onboarding entry 严格校验当前产品 `queryMcc` 目录、联合排序原话、语义证据和目录引用,只为命中且 `needSpecialQual=true` 的候选调用一次 `batchQueryMcc`,并复用有效的同 run/产品候选快照。
|
|
90
|
+
|
|
91
|
+
代码开发或完整接入缺项目位置/服务端语言时,使用 `integration.context.required` 或 `integration.project_path.required` 标准消息;框架缺失不触发补问。先区分新建/复用,`PROJECT_INPUT` 保留原话。Agent 确定两类项目的真实 `PROJECT_PATH`,以 `resolve-project --project-path "$PROJECT_PATH" --intent <existing|new>` 交 runner 校验;`PROJECT_INPUT` 不得代替路径。默认新建也先选安全路径并显式传入。现有项目位置未知时先定位候选;路径经 `resolve-project` 后再用 `framework-resolve`。补齐前不初始化、装依赖或改文件。
|
|
92
|
+
|
|
93
|
+
每轮代码开发只渲染一次非阻塞 `integration.start.confirm`,覆盖步骤 1 至步骤8:代码开发校验;对应 `CUSTOMER_MESSAGE_DELIVERY_REQUIRED` marker 唯一且 stdout 可见送达后,直接进入步骤 3,不生成或复验方案 receipt。`clarify_intent` 作为 run 起点,后续用户输入只计入 `user_input_after_clarify_intent`,前置澄清/方案不计。Onboarding 只保留一次非阻塞方案展示;同样只有 marker 唯一且 stdout 已可见送达,才允许在 MCC 唯一事实有效后执行 `node "<SKILL_DIR>/references/normal/scripts/runtime.mjs" onboarding-execute-ready --product-type "$PRODUCT_TYPE" --agent-platform "<AGENT_PLATFORM>" --session-id "<SESSION_ID>"`。该组合动作只串行加载 `flow onboarding execute` 并执行既有 `env check`,不跨用户输入、授权页或任何写操作;执行后不得再重复单独加载 execute phase 或重复环境检查。两类方案送达后都自动继续,不等待回复。服务修改仍保留绑定当前摘要的阻塞确认。签约材料完整后直接提交,服务创建摘要后直接创建,新建应用公钥校验成功后直接提审。
|
|
94
|
+
|
|
95
|
+
扫码页非阻塞:授权最多 12 次/间隔 5 秒,公钥最多 20 次/间隔 2 秒,成功即推进;耗尽后经统一回复判定只查一次,不重启轮询。
|
|
96
|
+
|
|
97
|
+
`full_process` 代码开发方案送达前只准备项目、语言、系统分支环境和沙箱;Windows 未明确要求当前配置时记 `VERIFY_PENDING`,不收资料。方案送达后直接进入 Integration 步骤 3,满足条件自动进 Onboarding;仅沙箱待配置,或 READY 且只剩非阻塞人工验证时可部分通过,其他缺口停在 Integration;收口保留全部待办。用户中断后重新确认当前项目和服务端语言,从实际项目扫描恢复,不恢复旧方案状态。
|
|
98
|
+
|
|
99
|
+
仅代码开发结束时提醒仍需产品开通;仅产品开通结束时提醒仍需代码开发。机器规则、消息目录、fixture 和测试不作为默认必读内容。
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export declare const SELF_UPDATE_TARGET_ENV = "ALIPAY_AIPAY_SELF_UPDATE_TARGET";
|
|
2
|
-
export declare const SELF_UPDATE_TRANSACTION_ENV = "ALIPAY_AIPAY_SELF_UPDATE_TRANSACTION";
|
|
3
|
-
export declare function installCurrentSkillCommand(): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=install-current.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-current.d.ts","sourceRoot":"","sources":["../../src/commands/install-current.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,sBAAsB,oCAAoC,CAAC;AACxE,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AA+ClF,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAOhE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-current.js","sourceRoot":"","sources":["../../src/commands/install-current.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type InstallTarget } from '../utils/config.js';
|
|
2
|
-
/**
|
|
3
|
-
* install 命令实现 - 安装 Skill 文件并准备 alipay-cli 环境。
|
|
4
|
-
*/
|
|
5
|
-
export interface InstallCommandOptions {
|
|
6
|
-
target?: InstallTarget;
|
|
7
|
-
skipTools?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function installCommand(cwd: string, options?: InstallCommandOptions): Promise<void>;
|
|
10
|
-
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAUL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAU5B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAwBD,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CA6Jf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|