Install
openclaw skills install invoice-verify发票查验技能。按票面信息或上传文件查验发票真伪,返回完整票面信息。适用于验证发票真实性的场景。
openclaw skills install invoice-verify使用此技能通过票面信息或上传发票文件查验发票真伪,获取完整票面明细。
满足以下需求时使用:
以下用户输入应触发此技能:
执行前准备以下参数:
| 票据大类 | 票据小类 | 编码 |
|---|---|---|
| 增值税发票管理系统发票 | 增值税专用发票 | 01 |
| 货物运输业增值税专用发票 | 02 | |
| 机动车销售统一发票 | 03 | |
| 增值税普通发票 | 04 | |
| 增值税电子专用发票 | 08 | |
| 增值税电子普通发票 | 10 | |
| 增值税普通发票(卷票) | 11 | |
| 二手车销售统一发票 | 15 | |
| 道路通行费电子普通发票 | 14 | |
| 电子发票服务平台 | 电子发票(增值税专用发票) | 81 |
| 电子发票(普通发票) | 82 | |
| 电子发票(铁路电子客票) | 51 | |
| 电子发票(航空运输电子客票行程单) | 61 | |
| 机动车销售电子统一发票 | 73 | |
| 电子发票(机动车销售统一发票) | 83 | |
| 二手车销售电子统一发票 | 84 | |
| 纸质发票(增值税专用发票) | 85 | |
| 纸质发票(普通发票) | 86 | |
| 纸质发票(机动车销售统一发票) | 87 | |
| 纸质发票(二手车销售统一发票) | 88 | |
| 数电票(通行费发票) | 59 | |
| 地方通用发票 | 浙江通用(电子)发票 | Z1 |
| 云南省通用电子发票 | Y1 | |
| 广东通用机打发票(电子) | G1 | |
| 北京电子普通发票 | B1 | |
| 深圳电子普通发票 | S1 | |
| 通用定额发票 | TY | |
| 江苏省车辆通行费通用(电子)发票 | J1 | |
| 交通运输发票 | 出租车发票 | CZ |
| 汽车票 | QC | |
| 轮船票 | LC | |
| 过路过桥费发票 | GL | |
| 火车票 | HC | |
| 机票行程单 | JX | |
| 其他发票 | 其他发票 | QT |
| 财政票据 | 财政票据 | CP |
| 海关缴款书 | 海关缴款书 | 17 |
前置检查(最高优先级):检查环境变量 ZXT_API_KEY 是否已设置。
注意:当前 shell 会话可能未继承 Windows 用户级环境变量,必须按以下方式检查,不能仅依赖 $ZXT_API_KEY:
powershell -Command "[System.Environment]::GetEnvironmentVariable('ZXT_API_KEY', 'User')" 获取用户级环境变量值,同时检查 $ZXT_API_KEY。$ZXT_API_KEY 即可。如果以上检查结果均为空,禁止执行任何后续操作,立即向用户输出以下提示并停止:
您需要完成以下三步,即可自动配置并执行技能:
注册账号 访问中兴通简税Skill平台:https://skill.quandianfapiao.com/ 完成注册。
申请 apiKey 登录后进入"技能中心",复制您的 apiKey。
提供 apiKey 将复制的 apiKey 发送给我,我将为您完成配置并立即执行技能。
严格限制:前置检查未通过时,禁止执行任何其他动作,包括但不限于:
只允许输出提示信息,然后停止,等待用户提供 apiKey。
用户提供 apiKey 后,写入系统环境变量并使当前会话生效:
setx ZXT_API_KEY <apiKey> 写入用户级环境变量,然后执行 export ZXT_API_KEY=<apiKey> 使当前会话生效。export ZXT_API_KEY=<apiKey> 追加到 ~/.bashrc 或 ~/.zshrc(根据用户使用的 shell),同时执行 export ZXT_API_KEY=<apiKey> 使当前会话生效。环境变量就绪后,继续以下步骤:
python,macOS/Linux 使用 python3),脚本优先使用 --api-key 参数,未传则回退读取环境变量 ZXT_API_KEY。| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| apiKey | string | 是 | apiKey |
| invoiceNumber | string | 是 | 发票号码 |
| invoiceDate | string | 是 | 开票日期(YYYY-MM-DD) |
| jejym | string | 是 | 金额或校验码,根据发票种类不同传入,详见下方 jejym 传入规则 |
| invoiceCode | string | 否 | 发票代码 |
不同发票类型的 jejym 入参不同:
| 发票类型 | jejym 入参 |
|---|---|
| 增值税专用发票 | 开具金额(不含税) |
| 机动车销售统一发票 | 不含税价 |
| 二手车销售统一发票 | 车价合计 |
| 增值税电子专用发票 | 开具金额(不含税) |
| 电子发票(增值税专用发票) | 价税合计 |
| 电子发票(普通发票) | 价税合计 |
| 增值税普通发票 | 校验码后六位 |
| 增值税普通发票(卷票) | 校验码后六位 |
| 增值税电子普通发票 | 校验码后六位 |
| 道路通行费电子普通发票 | 校验码后六位 |
| 铁路电子客票 | 价税合计 |
| 航空运输电子客票行程单 | 价税合计 |
| 电子发票(机动车销售统一发票) | 价税合计 |
| 电子发票(通行费发票) | 价税合计 |
请求头:Content-Type: multipart/form-data
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| apiKey | string | 是 | apiKey |
| file | file | 是 | 发票文件(pdf/ofd/xml/jpg/png) |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| apiKey | string | 是 | apiKey |
| kprqStart | string | 否 | 开票日期开始 (YYYY-MM-DD) |
| kprqEnd | string | 否 | 开票日期结束 (YYYY-MM-DD) |
| invoiceNumber | string | 否 | 发票号码 |
| invoiceCode | string | 否 | 发票代码 |
| fplxList | string[] | 否 | 发票类型集合 |
| pageNo | string | 否 | 页码,默认 1 |
| pageSize | string | 否 | 每页条数,默认 10 |
| cysjStart | string | 否 | 查验时间开始 (YYYY-MM-DD) |
| cysjEnd | string | 否 | 查验时间结束 (YYYY-MM-DD) |
按票面查验和按文件查验共享相同的返回数据结构。按文件查验返回集合,集合内每条记录结构与按票面查验一致。
返回分页列表,每条记录包含:
| 字段 | 说明 |
|---|---|
| invoiceNumber | 发票号码 |
| invoiceCode | 发票代码 |
| fplx | 发票类型 |
| fplxName | 发票类型名称 |
| kprq | 开票日期 |
| jshj | 价税合计 |
| cyzt | 查验状态:0 未查验,1 查验中,2 查验真票,3 查无此票,4 查询不一致,5 查验失败,6 不支持查验,7 抬头不符 |
| cyztName | 查验状态名称 |
| cysj | 查验时间 |
| xsfMc | 销售方名称 |
| 字段 | 类型 | 说明 |
|---|---|---|
| status | string | 返回接口状态码 |
| message | string | 返回接口状态描述信息 |
| data | object | 业务数据体(按文件查验时为数组) |
| 字段 | 类型 | 说明 |
|---|---|---|
| invoiceType | string | 发票种类,详见发票类型说明 |
| invoiceCode | string | 发票代码 |
| invoiceNumber | string | 发票号码 |
| invoiceDate | string | 开票日期 |
| hjje | decimal | 合计金额 |
| hjse | decimal | 合计税额 |
| jshj | decimal | 价税合计 |
| fpStatus | string | 发票状态:0 正常,2 作废,3 红冲 |
| xsfMc | string | 销售方名称 |
| xsfNsrsbh | string | 销售方纳税人识别号 |
| xsfAddressTel | string | 销售方地址、电话 |
| xsfBankAccount | string | 销售方开户行及账号 |
| gmfMc | string | 购买方名称 |
| gmfNsrsbh | string | 购买方税号 |
| gmfAddressTel | string | 购买方地址、电话 |
| gmfBankAccount | string | 购买方开户行及账号 |
| payee | string | 收款人 |
| reviewer | string | 复核人 |
| invoicer | string | 开票人 |
| machineNo | string | 机器编号 |
| checkCode | string | 校验码 |
| passwordArea | string | 密码区 |
| remark | string | 备注 |
| xmlFileUrl | string | xml 文件地址 |
| pdfFileUrl | string | pdf 文件地址 |
| ofdFileUrl | string | ofd 文件地址 |
| items | List | 发票明细 |
| specialDetail | List | 特殊票种明细(铁路电子客票、航空运输电子客票行程单) |
| 字段 | 类型 | 说明 |
|---|---|---|
| projectName | string | 货物或应税劳务、服务名称 |
| ggxh | string | 规格型号 |
| projectUnit | string | 单位 |
| projectCount | string | 数量 |
| projectPriceEt | string | 单价 |
| projectJeEt | string | 金额 |
| sl | string | 税率 |
| se | string | 税额 |
| 字段 | 类型 | 说明 |
|---|---|---|
| cpzh | string | 车牌照号 |
| djzh | string | 登记证号 |
| cllx | string | 车辆类型 |
| cjh | string | 车架号/车辆识别号 |
| cpxh | string | 厂牌型号 |
| glsMc | string | 转入地车辆管理所名称 |
| jyDw | string | 经营、拍卖单位 |
| jyDz | string | 经营、拍卖单位地址 |
| jySh | string | 经营、拍卖单位税号 |
| jyYh | string | 经营、拍卖单位开户银行、账号 |
| jyDh | string | 经营、拍卖单位电话 |
| escsc | string | 二手车市场 |
| escscSh | string | 二手车市场税号 |
| escscDz | string | 二手车市场地址 |
| escscYh | string | 二手车市场开户银行、账号 |
| escscDh | string | 二手车市场电话 |
| 字段 | 类型 | 说明 |
|---|---|---|
| projectName | string | 项目名称 |
| carNumber | string | 车牌号 |
| type | string | 类型 |
| beginDate | string | 通行日起 |
| endDate | string | 通行日止 |
| projectJeEt | string | 金额 |
| sl | string | 税率 |
| se | string | 税额 |
| 字段 | 类型 | 说明 |
|---|---|---|
| hgzh | string | 合格证号 |
| jkzmsh | string | 进口证明书号 |
| sjdh | string | 商检单号 |
| fdjhm | string | 发动机号码 |
| clsbh | string | 车辆识别代号/车架号码 |
| zzssl | string | 增值税税率或征收率 |
| zzsse | string | 增值税税额 |
| zgswjg | string | 主管税务机关 |
| zgswjgdm | string | 主管税务机关代码 |
| bhsj | string | 不含税价 |
| wspzhm | string | 完税凭证号码 |
| dw | string | 吨位 |
| xccr | string | 限乘人数 |
| dz | string | 地址 |
| dh | string | 电话 |
| khyh | string | 开户银行 |
| zh | string | 账号 |
| 字段 | 类型 | 说明 |
|---|---|---|
| nameOfPassenger | string | 旅客姓名 |
| departureTime | string | 出发时间 |
| fare | string | 票价 |
| promptInformationArea | string | 提示信息 |
| seat | string | 座位 |
| travelDate | string | 乘车日期 |
| passengerIdNumber | string | 身份证号码 |
| departureStation | string | 出发地 |
| trainNumber | string | 车次 |
| destinationStation | string | 目的地 |
| eticketNumber | string | 电子客票号码 |
| seatLevel | string | 座位等级 |
| 字段 | 类型 | 说明 |
|---|---|---|
| nameOfPassenger | string | 旅客姓名 |
| issuingStatus | string | 填开状态 |
| departureStation | string | 出发地 |
| firstDestinationStation | string | 第一站 |
| secondDestinationStation | string | 第二站 |
| thirdDestinationStation | string | 第三站 |
| fourthDestinationStation | string | 第四站 |
| totalAmount | string | 合计 |
| markingOfDomesticOrInternational | string | 国内国际标识 |
| gpoddnumbers | string | GP 单号 |
| eticketNumber | string | 电子客票号码 |
| itineraryDetail | List | 行程明细 |
| 字段 | 类型 | 说明 |
|---|---|---|
| departureTime | string | 出发时间 |
| flight | string | 航班号 |
| carrier | string | 承运人 |
| level | string | 座位等级 |
| carrierDate | string | 承运日期 |
| fareBasis | string | 客票级别/客票类别 |
| 状态码 | 说明 |
|---|---|
| 400 | 请求参数错误 |
| 300 | 参数为空或格式错误 |
| 305 | 无权访问该接口 |
| 307 | 消费失败,授权余次不足 |
| 308 | 超出接口调用次数 |
| 500 | 系统异常 |
请求:
{
"data": {
"apiKey": "sk-sg-9EVbsJLJnlKVLaSO4FZtPUVFysbFL",
"invoiceNumber": "26127000000211930033",
"invoiceDate": "2026-05-12",
"jejym": "162.43"
}
}
成功返回:
{
"status": "200",
"message": "成功",
"data": {
"invoiceType": "82",
"invoiceCode": "",
"invoiceNumber": "26127000000211930033",
"invoiceDate": "2026-05-12",
"hjje": "146.33",
"hjse": "16.10",
"jshj": "162.43",
"fpStatus": "0",
"xsfMc": "天津象鲜科技有限公司",
"xsfNsrsbh": "91120101MADQKPT067",
"xsfAddressTel": "天津市和平区南市街道张自忠路与多伦道交口合生国际大厦1号楼1-L7-101 021-52559777",
"xsfBankAccount": "招商银行股份有限公司天津滨海分行营业部 122917783510000",
"gmfMc": "北京中兴通融资产管理股份有限公司",
"gmfNsrsbh": "911101087582285868",
"gmfAddressTel": "",
"gmfBankAccount": "",
"items": [
{
"projectName": "*水果*水果",
"ggxh": "/",
"projectUnit": "件",
"projectCount": "4",
"projectPriceEt": "18.4850000000",
"projectJeEt": "73.94",
"sl": "0.090",
"se": "6.66"
},
{
"projectName": "*纸制品*纸制品",
"ggxh": "/",
"projectUnit": "件",
"projectCount": "1",
"projectPriceEt": "16.7300000000",
"projectJeEt": "16.73",
"sl": "0.130",
"se": "2.17"
}
]
}
}
异常返回:
{
"status": "400",
"message": "金额/校验码不能为空",
"data": ""
}
请求方式:multipart/form-data,包含 apiKey 字段和 file 文件字段。
返回值:集合,集合内结构与按票面查验一致。
按票面查验:
python .claude/skills/invoice-verify/invoice_verify.py inspect --invoice-number "26127000000211930033" --invoice-date "2026-05-12" --jejym "162.43"
按文件查验:
python .claude/skills/invoice-verify/invoice_verify.py file --file "E:\\invoices\\test.pdf"
查询查验记录(按日期范围):
python .claude/skills/invoice-verify/invoice_verify.py record --kprq-start "2026-05-01" --kprq-end "2026-05-31"
查询查验记录(按发票号码):
python .claude/skills/invoice-verify/invoice_verify.py record --invoice-number "26127000000211930033"
查询查验记录(按发票类型筛选,可多选):
python .claude/skills/invoice-verify/invoice_verify.py record --kprq-start "2026-05-01" --kprq-end "2026-05-31" --fplx 82 81