SkillPay技能改造器
把普通技能升级为 SkillHub Pay Skill。Pay Skill 基于微信支付 Agent Pay X402 协议:Agent 调用 Skill 时,服务端触发微信支付流程,用户授权支付后 Agent 继续获取付费结果。
Pay Skill 架构(4 段调用链)
企业服务生成微信支付订单 → SkillHub 密钥签名 + X402 预下单换 payment_code
→ 通过 WeixinPay-Required 返回 Agent → Agent 向用户申请支付授权 → 继续获取付费内容
前置条件
转换前向用户确认以下事项:
- ☐ 企业认证通过(SkillHub 后台 → 团队设置)
- ☐ 绑定微信商户号(SkillHub 后台 → 商户入驻)
- ☐ 已有微信支付下单能力(Native / JSAPI / H5)
- ☐ 已发布 Skill 并设置定价(SkillHub 后台 → 发布 Skill → 设置定价)
- ☐ 已生成开发者密钥(SkillHub 商户中心 → 开发者密钥,得到 pub_key_id + private_key_pem)
Pay Skill 标准结构
skill-name/
├── SKILL.md # 原指令 + Pay Skill 支付流程章节
├── config.json # SkillHub 凭证 + 微信支付配置
├── _meta.json # 元数据
├── scripts/
│ ├── *.py # 原脚本(增加 402 支付触发处理)
│ └── x402_pay.py # X402 支付模块(预下单 + 签名 + 支付触发)
├── references/
│ ├── api.md # 原接口文档
│ └── x402_protocol.md # X402 协议参考
└── keys/
└── private_key.pem # SkillHub 开发者私钥(不入库)
转换流程
1. 收集参数
向用户确认以下信息(必填项缺失时必须问):
| 参数 | 必填 | 说明 |
|---|---|---|
| 技能目录路径 | 是 | 原始技能文件夹 |
| SkillHub slug | 是 | SkillHub 发布的 Skill slug |
| Skill 版本号 | 否 | 默认 1.0.0 |
| developer_id | 是 | SkillHub 商户号(sh-XXXXXXXX) |
| pub_key_id | 是 | 开发者公钥 ID(PUB_KEY_xxx) |
| 私钥文件路径 | 是 | RSA 2048 私钥 PEM 文件路径 |
| 微信 appid | 是 | 微信支付 appid |
| 微信 mchid | 是 | 微信支付商户号 |
| 支付通知 URL | 是 | 微信支付回调地址 |
| 支付金额(分) | 是 | 定价金额,如 30 = 0.3 元 |
| 服务名称 | 否 | 用于引导话术,默认"付费服务" |
| 输出目录 | 否 | 默认原目录名_payskill |
2. 运行转换脚本
python3 scripts/convert.py "<技能目录>" \
--skill-slug "your-skill-slug" \
--developer-id "sh-XXXXXXXX" \
--pub-key-id "PUB_KEY_xxx" \
--private-key-path "/path/to/private_key.pem" \
--wx-appid "wx1234567890abcdef" \
--wx-mchid "1900000001" \
--wx-notify-url "https://example.com/pay/notify" \
--amount-cents 30 \
--output "<输出目录>"
脚本自动完成:
- 复制原技能文件到输出目录
- 创建 config.json(SkillHub 凭证 + 微信支付配置)
- 创建 _meta.json
- 创建 scripts/x402_pay.py(完整 X402 支付模块)
- 创建 references/x402_protocol.md(协议参考)
- 复制私钥到 keys/private_key.pem
- 注入 Pay Skill 章节到 SKILL.md
3. 智能校验与补全
脚本完成机械转换后,检查并补全:
- 原脚本接入支付触发:原脚本的 HTTP 调用处需检测 402 状态码或响应体中的
WeixinPay-Required,将其透传给 Agent。检查原脚本是否已处理此逻辑,补接遗漏处。 - SKILL.md 支付流程章节:脚本注入了模板章节,检查是否与原技能的执行流程吻合,调整不一致处。
- 私钥安全:确认
keys/目录已加入.gitignore,私钥不会被提交。 - 金额与定价:确认
config.json中的AMOUNT_CENTS与 SkillHub 后台设置的定价一致。
4. 输出验证
config.json包含 SkillHub + 微信支付配置字段scripts/x402_pay.py存在且可导入references/x402_protocol.md存在SKILL.md包含「支付流程」「WeixinPay-Required 处理」章节keys/private_key.pem存在(且不公开)
X402 核心流程速查
1. 微信支付下单 → 拿 code_url
2. 构造 L2 业务 JSON(skill_info + pay_items + expires_at)
3. Base64 编码 L2 → payment_required
4. 构造 5 行签名串:POST\n/path\ntimestamp\nnonce_str\npayment_required\n
5. SHA256withRSA 签名 → Base64 → signature
6. 组装 L1 请求体 → POST 预下单接口 → 拿 payment_code
7. 响应中返回 WeixinPay-Required: <payment_code>
详细协议见 references/x402_protocol.md,完整实现见 scripts/x402_template.py。