136 lines
5.9 KiB
Markdown
136 lines
5.9 KiB
Markdown
# AI 软件购买 Skill
|
||
|
||
一站式AI驱动的软件购买体验:环境检查 → 发现商品 → 下单 → 自动支付 → 获取网盘交付链接。
|
||
|
||
## 触发词
|
||
|
||
"帮我买xxx"、"购买xxx"、"下载xxx"、"逛商城"、"看看有什么软件"
|
||
|
||
## 环境变量与配置
|
||
- **STORE_BASE_URL**:`https://store.bushrose.cn` *(注:投产时仅需修改此处这一处地址即可)*
|
||
- 所有的 OpenAPI 接口调用及页面访问请以 `STORE_BASE_URL` 作为基础地址。
|
||
|
||
## 执行流程总览
|
||
|
||
```
|
||
用户发起购买请求
|
||
↓
|
||
Step 0:前置检查(alipay-bot 是否已安装)
|
||
├─ 已安装 → 进入 Step 1
|
||
└─ 未安装 → 引导安装 alipay-bot → 进入 Step 1
|
||
↓
|
||
Step 1:环境检查(check-wallet)
|
||
├─ 已授权 → 进入 Step 2
|
||
├─ 未授权/未开通 → 引导用户完成支付宝钱包绑定/授权 → 进入 Step 2
|
||
└─ 检查失败 → 提示网络问题,终止
|
||
↓
|
||
Step 2:产品发现与下单
|
||
├─ 调用 getSoftwareList 接口搜索商品
|
||
└─ 用户确认后,调用 createOrder 接口创建订单,获取 orderNo
|
||
↓
|
||
Step 3:获取支付参数
|
||
└─ 调用 getPaymentNeeded 接口,提取返回的 Payment-Needed 头信息并保存
|
||
↓
|
||
Step 4:发起支付与自动轮询
|
||
├─ 使用 alipay-bot 402-buyer-pay 提交支付
|
||
└─ 自动轮询 alipay-bot 402-query-payment-status 等待支付成功
|
||
↓
|
||
Step 5:验证与交付
|
||
├─ 支付成功后,提取交易号生成 Payment-Proof
|
||
├─ 调用 verifyPayment 接口验证并获取网盘交付链接
|
||
├─ 发送履约回执(alipay-bot 402-buyer-fulfillment-ack)
|
||
└─ 将网盘链接和提取码优雅地展示给用户
|
||
```
|
||
|
||
---
|
||
|
||
## 详细执行步骤
|
||
|
||
### Step 0:前置检查(alipay-bot 是否已安装)
|
||
**检查命令:**
|
||
```bash
|
||
alipay-bot --version 2>&1
|
||
```
|
||
- 返回版本号(如 `alipay-bot-cli 0.3.19`)→ 已安装 → 进入 Step 1
|
||
- 返回 `command not found` 或错误 → 未安装 → 请引导用户安装:
|
||
> "我当前未配置支付能力,无法完成付款。请安装并授权支付宝官方 npm 包:`npm install @alipay/agent-payment@1.0.12 && npx @alipay/agent-payment@1.0.12 install-cli`,然后再重新尝试购买。"
|
||
|
||
**Windows 环境注意:**
|
||
- `alipay-bot` 可能安装在 `~/.openclaw-autoclaw/alipay-bot-cli/bin/alipay-bot.cmd`
|
||
- 如果 `alipay-bot` 命令不可用,尝试使用完整路径
|
||
|
||
### Step 1:环境检查
|
||
**执行命令:**
|
||
```bash
|
||
alipay-bot check-wallet
|
||
```
|
||
- 若 JSON 返回 `code: 200` 且不包含"等待授权" → 已授权,进入 Step 2。
|
||
- 若提示"等待授权"或未开通 → 提示用户:"首次使用需要绑定支付宝钱包,请先调用相关技能完成钱包授权。" 等待用户授权完成后再继续。
|
||
|
||
### Step 2:产品发现与下单
|
||
1. **搜索商品**:调用 `getSoftwareList` 查询商品(`GET {STORE_BASE_URL}/api/software`)。向用户展示结果并确认购买意向。
|
||
2. **创建订单**:调用 `createOrder`(`POST {STORE_BASE_URL}/api/orders`),传入 `softwareId`。接口返回成功后,提取 `orderNo`。
|
||
|
||
### Step 3:获取支付参数
|
||
1. **获取参数**:调用 `getPaymentNeeded`(`POST {STORE_BASE_URL}/api/orders/{orderNo}/payment-needed`)。
|
||
2. **保存参数**:此接口会返回 402 状态码,你需要提取响应中的 `Payment-Needed` 头的 base64 字符串,并将其写入本地文件 `402_needed_file.txt` 中。
|
||
```bash
|
||
# 示例:从402响应中提取 Payment-Needed 头并保存
|
||
curl -s -D - -X POST "{STORE_BASE_URL}/api/orders/{orderNo}/payment-needed" \
|
||
-H "Accept: application/json" \
|
||
| grep -i "^Payment-Needed:" \
|
||
| sed "s/^[Pp]ayment-[Nn]eeded: //" \
|
||
| tr -d "\r\n" \
|
||
> 402_needed_file.txt
|
||
```
|
||
|
||
### Step 4:发起支付与自动轮询
|
||
1. **提交支付**:
|
||
```bash
|
||
alipay-bot 402-buyer-pay \
|
||
--session-id "<你的会话ID>" \
|
||
-f "402_needed_file.txt" \
|
||
-r "{STORE_BASE_URL}/api/orders/{orderNo}/payment-needed" \
|
||
--intent-summary "原始请求:用户购买软件订单:{orderNo}" \
|
||
-m POST
|
||
```
|
||
*注意:`session-id` 需为 UUID 格式。将 `{STORE_BASE_URL}` 和 `{orderNo}` 替换为实际值。若输出包含 `✓ 支付待确认` 及二维码,请向用户展示二维码。*
|
||
|
||
2. **自动轮询等待支付**:
|
||
使用 `alipay-bot 402-query-payment-status -t '<trade_no>' -r '<resource_url>' -m POST` 每 5 秒轮询一次,最多等待 3 分钟。若返回 `success=true`,进入 Step 5。
|
||
|
||
### Step 5:验证与交付
|
||
1. **构造 Payment-Proof**:
|
||
```python
|
||
import json, base64
|
||
proof = {
|
||
'protocol': {'payment_proof': 'verified', 'trade_no': '<trade_no>'},
|
||
'method': {'client_session': base64.b64encode(b'agent-session').decode()},
|
||
}
|
||
proof_b64 = base64.urlsafe_b64encode(json.dumps(proof).encode()).decode()
|
||
print(proof_b64)
|
||
```
|
||
2. **验证并获取交付物**:调用 `verifyPayment`(`POST {STORE_BASE_URL}/api/orders/{orderNo}/verify`),将生成的 base64 字符串作为 `Payment-Proof` 请求头传入。接口验证成功后,将返回包含网盘交付物信息的 `downloadUrl`(以及可能包含的提取码)。
|
||
3. **履约回执**:
|
||
```bash
|
||
alipay-bot 402-buyer-fulfillment-ack -t '<trade_no>'
|
||
```
|
||
4. **通知用户**:告知用户支付成功,输出交易号,并**直接将获取到的 `downloadUrl`(网盘链接)展示给用户,提醒用户注意下载次数与有效期限制**。不需要在本地下载任何文件。
|
||
|
||
## 安全与约束
|
||
1. 必须按顺序严格执行。
|
||
2. 禁止伪造 `trade_no` 或跳过轮询直接验证。
|
||
3. 交付物是网盘链接,**禁止尝试使用 curl 去下载该链接的内容**。
|
||
4. 如果中途遇到任何命令失败或接口返回报错,需原样告知用户并停止流程。
|
||
|
||
---
|
||
|
||
## 参考文件
|
||
|
||
| 文件 | 内容 |
|
||
|------|------|
|
||
| `references/openapi.yaml` | 商城 API 接口定义(OpenAPI 3.1) |
|
||
| `references/cli-setup.md` | alipay-bot 安装与完整性校验 |
|
||
| `references/payment-flow.md` | 支付+轮询+交付详细流程 |
|
||
| `references/troubleshooting.md` | 常见问题与解决方案 |
|