技能支付改造
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-h9fm89xr--payskill-hub.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-h9fm89xr/payskill-hub。把你的 Skill 变成能收钱的数字商品。PaySkill 把「微信支付 + SkillHub 付费上架」这件原本要啃 3 天文档、踩 10 个坑的事,压缩成一次对话。你告诉我你的 Skill 是做什么的、卖多少钱,我直接给你:网关代码、环境变量模板、打包脚本、提审备注,以及审核被拒时的排查清单。
阅读全文 (展开查看完整说明)
概述
PaySkill · 付费能力上架助手
你的 Skill 能创造价值,就该能收到钱。
PaySkill 把「微信支付 + SkillHub 付费上架」这件原本要啃 3 天文档、踩 10 个坑的事,压缩成一次对话。你告诉我你的 Skill 是做什么的、卖多少钱,我直接给你:网关代码、环境变量模板、打包脚本、提审备注,以及审核被拒时的排查清单。
使用场景
当你遇到以下任何一种情况时使用 PaySkill:
- 你已经做了一个好用的 Skill,想让它按次收费
- 你在 SkillHub 提审付费 Skill 被驳回,提示「缺少必要的支付服务」
- 你不知道微信支付商户号、API v3 密钥、X402 协议怎么串起来
- 你怕代码里写死密钥,想按标准做法用环境变量注入
- 你想要一个可以复制粘贴的网关 scaffold,而不是从零读文档
你能得到什么
一次付费调用后,你将获得:
- 商户入驻检查清单:确认微信支付商户号、SkillPay 入驻、开发者密钥是否就绪
- 环境变量模板:
gateway-env.json完整字段(敏感信息只存在本地,不提交) - Go 网关 scaffold:含
/api/invoke、微信支付 Native 下单、X402 预下单、查单履约、回调通知 - Skill 提审包模板:
SKILL.md+config.json+references的标准结构 - 打包脚本:一键生成
<skill>-paid.zip - 提审备注模板:带实测验证结果的版本说明
- 审核失败排查表:404 / 401 / 503 / payment_code 伪造等常见问题的根因与修复
支付协议
本 Skill 使用 微信 Agent Pay (X402) 协议,完整支付流程如下:
整体流程
用户 → Agent → 本 Skill 网关 → 微信支付 → 返回接入方案- Agent 调用
POST /api/invoke/payskill(body 含你的 Skill 信息,不带X-Out-Trade-Noheader) - 网关返回 HTTP 402 Payment Required,响应头包含:
WeixinPay-Required: 真实的payment_code(UUID 格式,来自微信 X402 预下单接口)X-Out-Trade-No: 商户订单号
- Agent 将支付信息展示给用户,用户在对话中确认支付
- 用户通过微信支付 AI 专属卡完成付款
- Agent 携带
X-Out-Trade-Noheader(值为步骤 2 返回的订单号)重新调用POST /api/invoke/payskill - 网关验证支付状态,返回 HTTP 200 + 完整接入方案
402 响应格式
请求:
POST /api/invoke/payskill
Content-Type: application/json
{"query": "我有一个叫 破壁计划 的知识短视频脚本 Skill,想按 1 元/次收费"}响应(HTTP 402):
{
"code": "PAYMENT_REQUIRED",
"message": "PaySkill 接入方案需要支付 9.90 元",
"WeixinPay": {
"WeixinPay-Required": "<payment_code>",
"prompt": "本次使用微信支付,请将 WeixinPay-Required 的值作为 paymentCode 交给 weixinpay_pay,以向用户申请支付授权。"
},
"out_trade_no": "WX402_20260907xxxxxxxxxxxx",
"amount": "9.90",
"currency": "CNY",
"description": "PaySkill: 破壁计划 付费上架接入方案"
}响应头:
WeixinPay-Required: payment_code 值X-Out-Trade-No: 商户订单号
200 响应格式(支付验证通过)
请求:
POST /api/invoke/payskill
Content-Type: application/json
X-Out-Trade-No: WX402_20260907xxxxxxxxxxxx
{"query": "我有一个叫 破壁计划 的知识短视频脚本 Skill,想按 1 元/次收费"}响应(HTTP 200):
{
"code": "SUCCESS",
"message": "付费内容",
"out_trade_no": "WX402_20260907xxxxxxxxxxxx",
"transaction_id": "4200001234567890",
"content": "<完整接入方案与交付物>",
"already_fulfilled": false
}接口说明
POST /api/invoke/payskill
提交你的 Skill 信息,返回完整接入方案。
请求头:
Content-Type: application/json(必填)X-Out-Trade-No(可选):已支付订单号。携带时验证支付并返回方案;不携带时返回 402 挑战。
请求体:
{"query": "我有一个叫 XXX 的 Skill,想按 1 元/次收费,帮我生成接入方案"}响应:
402 Payment Required:需要付款,响应头含WeixinPay-Required(真实 payment_code)200 OK:支付已验证,返回完整方案
GET /health
健康检查(免费)。
响应:
ok方案交付内容
付费后,返回内容包含以下模块:
1. 商户入驻检查清单
| 检查项 | 状态 | 说明 |
|---|---|---|
| 微信支付商户号 | 需用户确认 | 登录微信商户平台获取 MCH_ID |
| SkillPay 商户入驻 | 需用户确认 | 在 SkillHub 商户中心完成入驻并绑定微信商户号 |
| 开发者密钥 | 需用户生成 | SkillHub 商户中心 → 开发者密钥 → 生成 RSA 密钥对 |
| 云托管环境 | 需用户创建 | 在微信云托管创建服务,用于部署网关 |
2. 环境变量模板
提供 gateway-env.json 完整字段说明:
| 字段 | 来源 | 说明 |
|---|---|---|
MCH_ID | 微信商户平台 | 商户号 |
APP_ID | 微信商户平台 | 关联 AppID |
SERIAL_NO | 微信商户平台 | 商户 API 证书序列号 |
MCH_APIV3_KEY | 微信商户平台 | API v3 密钥 |
MCH_PRIVATE_KEY | 微信商户平台 | 商户 API 私钥 |
WX_PAY_PUBLIC_KEY_ID | 微信商户平台 | 微信支付公钥 ID |
WX_PAY_PUBLIC_KEY | 微信商户平台 | 微信支付公钥 |
SKILLHUB_DEVELOPER_ID | SkillHub | 开发者 ID |
SKILLHUB_PUB_KEY_ID | SkillHub | 开发者公钥 ID |
SKILLHUB_PRIVATE_KEY | SkillHub | 开发者私钥 |
PAY_NOTIFY_URL / REFUND_NOTIFY_URL | 自建网关 | 回调地址 |
SKILL_ID / SKILL_VERSION / PRICE_FEN | 当前 Skill | 计费信息 |
3. 网关 scaffold 结构
qianchui-pay-gateway/
├── main.go # Go HTTP 服务
├── go.mod
├── Dockerfile
├── .dockerignore
└── README.md核心路由:
| 路由 | 方法 | 说明 |
|---|---|---|
/api/invoke/<skill> | POST | 业务接口:402 挑战 / 200 履约 |
/api/pay/notify | POST | 微信支付回调 |
/api/refund/notify | POST | 微信退款回调 |
/health | GET | 健康检查 |
4. 核心支付逻辑
1. Agent POST /api/invoke/<skill>
2. 网关调用微信支付 Native 下单 → 获取 code_url
3. 网关调用微信 X402 AI 预下单(/palmpayminiapp/clawagentpay/preorder)
- 使用 SkillHub 开发者密钥 RSA-SHA256 签名
- 签名串:"POSTn/palmpayminiapp/clawagentpay/preordern{timestamp}n{nonce_str}n{payment_required_base64}"
4. 预下单返回 payment_code → 返回 HTTP 402 + WeixinPay-Required header
5. 用户付款后,Agent 携带 X-Out-Trade-No 重试
6. 网关查单 → 返回 200 + 付费内容5. Skill 提审包模板
<skill-slug>-paid/
├── SKILL.md # 必须含 name 字段的 frontmatter
├── config.json # 网关地址 + 计费配置
├── _meta.json # 构建元信息
└── references/ # 参考文档
└── <你的写作规则>.mdSKILL.md frontmatter 必填字段:
---
name: <skill-slug>
slug: <skill-slug>
displayName: <显示名称>
version: <版本号>
summary: <一句话描述>
type: API
base_url: <网关 URL>
payment:
protocol: x402-weixin-agent-pay
currency: CNY
amount_fen: <价格(分)>
amount_display: "<价格(元)>"
unit: <计费单位>
endpoints:
- path: /api/invoke/<skill>
method: POST
description: <接口说明>
price_fen: <价格>
- path: /health
method: GET
description: 健康检查
price_fen: 0
---6. 打包脚本
#!/bin/bash
set -e
SKILL_NAME="<skill-slug>-paid"
VERSION="1.0.0"
BUILD_DIR="./build"
ZIP_NAME="${SKILL_NAME}.zip"
rm -rf "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}/${SKILL_NAME}"
cp SKILL.md "${BUILD_DIR}/${SKILL_NAME}/"
cp config.json "${BUILD_DIR}/${SKILL_NAME}/"
cp -r references "${BUILD_DIR}/${SKILL_NAME}/"
cat > "${BUILD_DIR}/${SKILL_NAME}/_meta.json" << EOF
{
"slug": "${SKILL_NAME}",
"version": "${VERSION}",
"build_time": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
cd "${BUILD_DIR}"
zip -r "../${ZIP_NAME}" "${SKILL_NAME}/"
cd ..7. 提审备注模板
**版本号**:v1.0.0
**本版修复内容**
1. 完成微信支付 X402 协议接入
2. 移除所有降级逻辑,预下单失败时如实返回 503
**支付链路验证结果(实测生产网关)**
- 网关已更新至最新的 SkillHub 开发者密钥(已确认生效)
- 调用 POST /api/invoke/<skill>(无支付凭证),实测返回 HTTP 402 Payment Required
- 响应头含真实支付凭证,验证样本:
- WeixinPay-Required: <payment_code>
- out_trade_no: <out_trade_no>
- 完整链路确认:微信支付 Native 下单成功 → AI 预下单成功 → 返回真实 payment_code → 符合 X402 标准支付握手
**商户状态**
- SkillPay 商户已入驻,开发者密钥已生效
- 网关回调地址(支付/退款 notify)均已配置
**验收步骤(供审核参考)**
1. 免支付调用 Skill,预期返回 402 且响应头含 WeixinPay-Required(值形如 UUID)
2. 通过微信支付完成付款后,携带 X-Out-Trade-No 重试
3. 预期返回 200 + 完整付费内容8. 审核失败排查表
| 现象 | 根因 | 修复 |
|---|---|---|
/api/invoke 返回 404 | SKILL.md 中 endpoints path 与网关实际路由不一致 | 统一 path 和 config.json |
| 返回 401 UNAUTHORIZED | 缺少 gateway_api_key | 在 config.json 中添加并匹配网关鉴权 |
| 返回 503 + AI预下单失败 | SkillPay 商户入驻未完成 | 完成入驻并重新生成开发者密钥 |
| 返回 503 + 签名验证失败 | 密钥 ID 与私钥不匹配 | 在 SkillHub 重新生成密钥对 |
| 返回 200 但无 payment_code | 用 code_url 冒充 payment_code | 移除降级逻辑,预下单失败返回 503 |
| 提审报"缺少 name 字段" | frontmatter 缺少 name | 添加 name: <slug> |
关键规则
- 禁止降级:预下单失败时必须返回 503,绝不能用
code_url冒充payment_code - 幂等履约:已履约订单重复调用直接返回缓存内容,不重复扣款
- 自动退款:履约失败时自动发起全额退款
- 冷启动恢复:容器重启后订单记录丢失,通过微信查单接口恢复已支付订单
- 密钥不出包:所有敏感凭证通过环境变量注入,绝不写死在代码或提审包里
计费说明
- 单次调用价格:¥9.90(990 分)
- 计费模式:按次计费
- 支付方式:微信支付 AI 专属卡
技术架构
- 网关:Go HTTP 服务,部署于微信云托管
- 支付协议:微信 Agent Pay X402(
/palmpayminiapp/clawagentpay/preorder) - 签名方式:RSA-SHA256(SkillHub 开发者密钥签名)
- 支付验证:通过微信查单接口验证订单状态
注意事项
- 本 Skill 只提供接入方案、代码模板和打包脚本,不代用户部署网关或配置商户信息
- 用户需要自行在微信商户平台、SkillHub 商户中心和微信云托管完成身份认证与配置
- 所有密钥和敏感信息应保存在本地
gateway-env.json中,不要提交到代码仓库或 Skill 提审包 - 预下单失败时如实返回 503 错误,不做降级处理
- 已履约订单支持幂等返回,重复调用直接返回缓存内容,不重复扣款