下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-bvk4jin9--dwg-pdf-img-version.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-bvk4jin9/dwg-pdf-img-version。DWG 万能转换工具。用于将 CAD 图纸批量转换为 PDF、PNG、JPG 等格式,或在不同 DWG/DXF 版本之间进行转换。适用于用户提出 CAD 转 PDF、CAD 转图片、DWG 版本转换、DXF 转换或批量处理 CAD 文件等需求。
阅读全文 (展开查看完整说明)
概述
前置检查
确认当前 Agent 存在可用于微信 AI 支付的 weixinpay_ 工具。无法确认时不要创建订单,提示用户升级 Agent 或安装微信支付 AI 支付插件。
调用流程
- 使用
multipart/form-data请求:
POST https://www.52cad.com/cloud/skillpay/convert
必填字段为 file(仅 DWG)和 convert_type。convert_type 仅可为:
tz:转换为天正图纸。cad2ver:转换 CAD 版本;额外传入ver。cad2pdf:转换为 PDF;额外传入line_color、bg_color、clarity、pagesize、pagedct、fontor、frame、type。cad2img:转换为图片;额外传入img_type、line_color、bg_color、clarity。
- 收到 HTTP 402 时,从响应头保存
WeixinPay-Required和X-Out-Trade-No。将前者作为paymentCode调用微信支付工具,向用户申请授权。 - 支付成功后必须重试原请求,并在 Header 加入:
X-Out-Trade-No: <第二步保存的订单号>
服务端会校验支付状态并返回 f_id。重复重试会返回同一个 f_id,不会重复创建转换任务。
- 查询异步转换结果:
GET https://www.52cad.com/cloud/skillpay/status
Header 使用同一个 X-Out-Trade-No。响应中的 task_status 是原转换 worker 的状态。
客户端脚本
本 skill 提供 scripts/dwg_convert.py(仅用 Python 标准库,无需 pip 安装依赖)。优先用它,而不是手写 curl。
优先使用 WorkBuddy 管理的 Python 绝对路径。
① 发起转换(未支付时返回 402 支付信息)
"<python>" "<本skill目录>/scripts/dwg_convert.py" convert
--file "<dwg 绝对路径>"
--convert-type cad2pdf未支付时输出:
{
"ok": false,
"need_payment": true,
"payment_code": "...",
"out_trade_no": "...",
"hint": "请把 payment_code 作为 paymentCode 调用微信支付工具..."
}→ 此时拿 payment_code 调微信支付工具向用户申请授权,不要继续往下走。
② 支付成功后重试(带订单号)
"<python>" "<本skill目录>/scripts/dwg_convert.py" convert
--file "<同一个 dwg 绝对路径>"
--convert-type cad2pdf
--out-trade-no "<①拿到的 out_trade_no>"成功时输出含 f_id(重复重试返回同一个 f_id)。
③ 轮询转换结果
# 查询一次
"<python>" ... status --out-trade-no "<out_trade_no>"
# 或轮询到终态(推荐)
"<python>" ... wait --out-trade-no "<out_trade_no>" --interval 3 --timeout 300终态输出里的 delivery 字段告诉你产物能不能拿到(见下一节)。
GET /cloud/skillpay/status 响应结构(2026-09-20 实测):
{
"code": "SUCCESS",
"out_trade_no": "WX402_260920103950B94DBD87696D",
"payment_status": "PENDING_PAYMENT",
"f_id": "09e38b19-a4d4-6cdc-9f37-b697abd5a06c",
"task_status": null
}⚠️
payment_status与task_status是两个独立维度,轮询时必须分开判断:
payment_status:支付状态,未支付为PENDING_PAYMENT。task_status:转换 worker 状态,未支付时为null(尚未创建转换任务)。因此
task_status == null且payment_status == PENDING_PAYMENT时,继续轮询是徒劳的,应当提示用户先完成支付。
f_id在支付前就已返回,可用于核对订单。
各 convert_type 的额外参数
| convert_type | 额外参数 | 示例 |
|---|---|---|
tz | 无 | --convert-type tz |
cad2ver | ver | --ver ACAD2018 |
cad2pdf | line_color bg_color clarity pagesize pagedct fontor frame type | --line-color black --pagesize A4 |
cad2img | img_type line_color bg_color clarity | --img-type png |
常用取值:
ver:ACAD14/ACAD2000/ACAD2004/ACAD2007/ACAD2010/ACAD2013/ACAD2018img_type:png/jpg/gif/bmpline_color:black=黑白 /white=彩色bg_color:white/blackclarity:normal/high/ultrahdpagesize:A1/A2/A3/A4pagedct:0=横向 /1=纵向fontor:0=原生字体 /1=图形字体frame:0=不识别图框 /1=识别图框type:1=合并一个文件 /2=多个文件(仅frame=1时有效)
④ 取回产物
"<python>" ... fetch --out-trade-no "<out_trade_no>" --out-dir "<本地输出目录>""<python>" ... fetch --out-trade-no "<订单号>" --convert-type cad2pdf
--name "<另存为的文件名>" --out-dir "<本地输出目录>"脚本按以下顺序找产物:
status响应里的产物直链(任意字段名都能识别);- 没有则尝试
GET /cloud/skillpay/download; - 还没有则按
f_id推导对象存储直链,并 HEAD 验证(不存在就跳过,不会误报)。
找到后把文件落到 --out-dir。--name 可指定另存为的文件名(如 bb.pdf),缺省用直链上的名字(是一串 f_id,可读性差,建议每次都传)。
产物地址的实测规律(2026-09-23):
http://ft.appol.com/files_pdf/<f_id>/<f_id>.pdf该地址公开可读、不需要任何鉴权。同目录下的
<f_id>.dwg是源文件,别取错。单文件 / 多文件:
type=1(合并为一个文件)时产物是单个转换出多个文件时产物是
.zip,脚本会自动解压,此时看saved[].extracted。候选顺序是先
.zip,每条都 HEAD 验证,取真实存在的那个。
cad2img/cad2ver/tz的目录与扩展名未完全确认,脚本会按候选依次验证,也可用
--ext手动指定。
输出中的 delivery 取值:
| delivery | 含义 | 该怎么做 |
|---|---|---|
url | 拿到直链并已下载到本地 | 用 present_files 呈现文件(见下) |
stream | download 路由直接返回了文件流 | 同上 |
unsupported | 服务端未提供任何交付方式 | 见下方红色告警 |
呈现哪个文件看 saved[]:
- 没有
extracted字段 → 单文件产物,呈现saved[].path。 - 有
extracted字段 → 转换结果是多个文件(产物是 zip,脚本已自动解压),
逐个呈现 extracted 里的每一个文件,不要把 zip 本身丢给用户。
⚠️ 当前网关(2026-09-23 实测)处于
unsupported状态:付费和转换都能成功(
payment_status=FULFILLED、task_status=2),但服务端既不在status里返回下载地址,也没有可用的下载路由,站内
/cloud/online/download只认网站登录态、凭付费订单号也进不去。因此 Agent 目前拿不到文件。此时必须如实告诉用户"本次已扣费 0.01 元但产物暂无法交付,
可申请退款",绝不可以在没有文件时说"转换成功"。
只有拿到真实文件路径后,才用
present_files呈现给用户。
给用户的结果
仅在 fetch 成功返回真实本地文件路径时,用 present_files 呈现该文件。未拿到文件时不要调用 present_files。
注意
- 支付前产生的订单最长有效 15 分钟;过期后从第一步重新发起。
- 不要在 Skill 文件中写入微信商户私钥、SkillHub 私钥或任何 API 密钥。
- 转换是异步的,拿到
f_id后仍需轮询status,不要假设立刻完成。 task_status为4通常是参数取值不合法,检查是否误用了前端展示标签。file仅支持.dwg;脚本会先做本地后缀校验,避免无效请求。- 本 skill 不需要自建服务端,也不需要配置任何密钥——付费网关能力由 52cad.com 提供。
- 交付产物依赖服务端提供下载地址;若
delivery=unsupported,按前述告警如实告知用户并建议退款,
不要凭 task_status=2 就向用户宣告成功。