想要实现上传发票图片自动验真,不能直接调用税务官方平台做图片传入查验,官方查验接口只接收发票代码、号码、开票日期、金额、校验码这些文本参数,行业通用方案是先调用 OCR 识别接口解析图片拿到票面关键字段,再把识别出来的参数传给发票核验接口,最后根据返回结果做真伪、作废、红冲等状态判定,这套两阶段串联的方案就是传图核验的标准接入思路。很多开发者踩坑是误以为税务平台原生支持图片直传核验,或者忽略 OCR 识别误差、查验频次限制、当日开票延迟可查这些规则,所以接入的时候要做好图片预处理、识别结果校验、接口限流、异常重试和状态分支判断,保证业务稳定,不会出现识别错参数导致查验误判。
一、传图核验整体流程
- 图片预处理:接收前端上传发票图片,做压缩、摆正、去阴影,控制图片大小,一般 base64 之后不超过 4MB,格式优先 JPG、PNG
- OCR 发票识别接口调用:传入图片 base64,提取发票代码、发票号码、开票日期、不含税金额、校验码后六位、销方税号等查验必填字段
- 字段清洗校验:判断关键字段是否为空、格式是否合规,识别失败或者字段缺失直接返回前端提示重拍发票
- 调用发票核验接口:把清洗后的字段作为参数提交核验
- 解析返回数据,做状态判定,保存查验记录,返回结果给前端
二、接口选型对比表
| 接口类型 | 能力 | 是否支持直接传图 | 限制说明 |
|---|---|---|---|
| 税务总局查验平台原生接口 | 权威真伪核验 | ❌不支持图片,仅文本参数 | 单张发票每日最多查验 5 次,当日开具发票不一定立刻可查,可查 5 年内发票 |
| 云厂商一体化 OCR + 核验接口 | 识别 + 核验一站式 | ✅支持图片 base64 传入 | 封装了两步流程,开发简单,按量计费,有调用 QPS 限制 |
| 单独 OCR 识别接口 + 单独核验接口 | 自主串联,自由度高 | ✅识别接口传图 | 需要自己写字段传递、异常兼容逻辑,适合报销系统、ERP 深度集成 |
三、分步接入操作要点
1. 开通服务与鉴权准备
- 选择服务商:阿里云、腾讯云、华为云都有配套发票识别 + 发票核验接口,先在控制台开通对应服务,获取 AccessKey、Secret 或者 token
- 权限配置:子账号调用需要单独授权 OCR、发票核验权限,避免鉴权报错
- 测试额度:大部分厂商会赠送免费测试次数,先拿免费额度调试,稳定后再购买资源包或者按量付费
2. 图片和入参规范
- 图片要求:画面清晰、发票摆正,不要反光、遮挡密码区、校验码区域;支持 JPG、PNG,部分接口支持 PDF、OFD 文件
- 核验必填字段清单
- 发票号码:必填
- 开票日期:YYYY-MM-DD 格式,必填
- 不含税金额:专票必填,数电票部分场景传价税合计
- 校验码后 6 位:普票、电子普票必填
- 发票代码:部分新版数电票可以不传
- 注意:OCR 识别容易把数字 0 和 O、1 和 l 识别混淆,代码里增加正则校验,过滤异常字符
3. 状态判定规则(核心)
拿到核验接口返回结果后,按下面的分支判断,直接用于业务展示:
- 查验一致、匹配成功:发票为真,再看票据状态
- 正常有效:state = 正常,可正常入账抵扣
- 已作废:state = 作废,不可报销抵扣
- 全额红冲:state = 全额红冲,失效
- 部分红冲:state = 部分红冲,仅剩余金额有效
- 查验不一致:票面信息和税务系统记录不匹配,判定为假票或者信息识别错误
- 查无此票:两种情况,一是发票本身虚假,二是刚开具,数据还没同步到查验平台,建议增加延时重试或者提示隔段时间再查验
- 超出查验次数:该发票当日 5 次额度用完,返回提示,次日再查
4. 异常与限流处理清单
- OCR 识别失败:返回
- 接口 429 限流:增加休眠重试,控制 QPS,不要高频循环调用
- 鉴权失败:检查密钥、区域、项目 ID 是否匹配
- 查验超时:单独做超时熔断,不要阻塞主流程
- 缓存:查验成功结果可以缓存,避免重复消耗调用次数
【图片模糊,请重新拍摄】
四、开发避坑清单
- 税务官方查验平台没有对外开放图片上传 API,市面上所有传图验真都是 OCR + 核验组合方案,不要爬虫逆向官方查验页面,有合规风险
- 数电票(全电发票)字段规则和传统纸质发票不一样,参数不要硬编码老票种逻辑
- 识别出来的字段必须二次校验,直接无脑传给核验接口,很容易出现误判
- 报销场景建议留存原图、查验返回报文,作为凭证归档
- 批量查验一定要控制频率,遵守单张发票每日 5 次上限
【相关 FAQ】
问题 1:发票查验接口传图核验,是不是税务官方接口直接支持上传图片?
回答 1:发票查验接口原生税务官方查验接口不支持直接传图核验,传图核验需要搭配发票 OCR 识别接口,先识别图片提取发票号码、开票日期等查验参数,再调用发票查验接口完成真伪与状态判定。
问题 2:做发票查验接口传图核验时,发票状态判定有哪些常见结果需要处理?
回答 2:发票查验接口传图核验完成后,发票状态判定主要包含正常有效、已作废、全额红冲、部分红冲、查无此票、信息不一致这几类,开发时要对每一种状态做单独业务逻辑,区分是真票失效、识别错误还是数据同步延迟。
问题 3:接入发票查验接口传图核验,单张发票查验次数有什么限制?
回答 3:发票查验接口底层对接税务查验平台,单张发票每天最多查验 5 次,接入传图核验功能的时候,要做好次数控制和结果缓存,避免短时间重复调用耗尽查验次数,导致发票状态判定失败。
【参考资料】
[2026-11-11](基于 PHP 接入发票查验接口:从参数构造到查验结果处理)腾讯云开发者社区
[2026-10-26](VerifyVATInvoice 发票核验接口文档)阿里云 OpenAPI
[2026-10-16](发票验真 API 文档)华为云开发者中心
[2026-10-13](增值税发票核验新版接口)腾讯云文档
[2026-07-13](上海企业服务云发票查验操作指引)上海市虹口区人民政府
[2026-07-12](发票云识别 + 查验接口文档)金蝶发票云
【免责声明】
本文为发票查验接口传图核验接入、发票状态判定的开发教程,仅用于技术方案参考,不构成财税合规、票据审核的法律意见。税务查验规则、接口参数、票种规范会动态更新,发票查验最终结果以国家税务总局全国增值税发票查验平台官方返回信息为准;使用第三方云厂商发票查验接口,需遵守服务商调用协议、计费规则与频次限制,禁止爬虫逆向税务查验平台。开发者自行对接接口产生的票据审核失误、财税风险、接口费用损失,本文不承担相关责任。
