电子税务平台Api接口-发票查验-发票验真-发票核验-发票查验真伪

随着数字化办公和财税电子化管理日益普及,发票的真实性查验已经成为企业财务、税务审计等业务流程中重要的一环。而不符合规定、虚假的发票,不得作为财务凭证,任何企业和个人有权拒收。发票查验接口即可实现发票真实性查验的功能。如对查验结果有疑议,可持发票原件至当地税务机关进行鉴定。
开发者可通过编程方式将发票查验接口集成到自己的系统中,输入发票号码、发票代码、开票金额和开票日期或上传发票版式文件(pdf、ofd或xml),即可实现在线实时查询发票信息,辨别发票真伪等功能。

1、支持多种发票类型

增值税专用发票
普通发票
机动车销售发票
二手车销售发票
通行费发票
航空运输电子客票行程单
铁路电子客票
财政发票
区块链发票
通用电子发票

2、可查验的时间范围

可查验最近5年内开具的发票;
当日开具的发票当日可进行查验;

3、实现方式

接入发票查验接口a.cnhue.cn/MHAomyC即可实现发票查验功能

输入参数

名称 类型 必须 说明
appId String 用户唯一标识
timestamp Long 当前时间戳
sign String 签名,详见签名算法说明
fpdm String 发票代码 非全电发票必填
fphm String 发票号码
kprq String 开票日期 格式YYYYMMDD
jym String 校验码后 6 位, 增值税普通发票、增值税电子普通发票、增值税普通发票(卷式)、增值税电子普通发票(通行费)必填
je String 增值税专用发票、增值税电子专用发票、机动车销售统一发票输入不含税金额;二手车销售统一发票输入车价合计;全电发票输入价税合计

签名算法

sign = sha256(appId + appSecret + timestamp)

用 appId、 appSecret,当前时间时间戳 timestamp,按上述顺序拼接成字符串,再进行 sha256 哈希得到。如下:

String appId = "xyzxy2121zxyz";
String timestamp = "1555378976238";
String appSecret = "efcefcef1121cefcefc1212121";
String str = appId  + appSecret + timestamp;
String sign = sha256(str);

响应示例

以增值税专用发票为例

{
  "code": 200, // 返回码,详见code返回码说明
  "msg": "成功", //code对应的描述
  "taskNo": "12552230716560623515",  // 本次唯一请求号
  "charge": true, // 计费标志
  "data": {
    "fplx": "01", // 发票类型,详见发票类型说明
    "times": 4, // 查验次数(第几次)
    "xfsbh":"1522***********K01451",    //销方识别号
    "gfmc":"东方****有限公司",            //购方名称
    "gmfyhzh":"工行杭州景江苑支行 12******************36",    //购买方银行账号
    "xhqdBz":"N",                        //清单标志:发票明细中是否有清单行(Y清单 N非清单)
    "dkXsfmc":"马*弟<",                    //代开销售方名称
    "dq":"内蒙古自治区",                    //地区
    "tspzDm": "",                         // 特殊票种代码,02农产品收购发票 08成品油发票
    "xsfdzdh":"乌兰浩特市 1584****535",    //销售方地址电话
    "se":240,                            //税额
    "kprq":"2022-01-04 00:00:00",        //开票日期
    "bz":"代开企业税号:15222*****71610 代开企业名称:马*弟<br/>房屋坐落地址:乌兰浩特市爱国小区*号楼",    //备注
    "kjlx":"2",                            //开具类型
    "fpztDm":"0",                        //发票状态代码
    "sbbh":"661816407119",                //设备编号
    "gfsbh":"91330********66XE",        //购方识别号
    "fpdm":"150*****60",                //发票代码
    "fphm":"00****89",                    //发票号码
    "jym":"69591030500952264929",     //校验码
    "dkXsfsbh":"152**************610",    //代开销售方识别号
    "gmfdzdh":"杭州市滨江区****66号 0571-8*****34",    //购买方地址电话
    "xsfyhzh":"31522***********07111",    //销售方银行账号
    "jshj":16800,                        //价税合计
    "jshjcn":"壹万陆仟捌佰元整",            //价税合计(中文大写)
    "je":16560,                            //金额
    "xfmc":"国家税务总局乌兰浩特市税务局第一税务分局",    //销方名称
    "txfbz":"Y",//如果是通行费,则有该字段,Y表示该通行费可抵扣,N表示不可以抵扣    //通行费标识
    "tspzDm": "86",//特殊票种,02-农产品收购;03-稀土矿产品发票;04-稀土产成品发票;05-石脑油;06-通行费可抵扣;07-通行费(不可抵扣);08-成品油发票;12-机动车; 76-报废产品收购;77-报废产品收购; 83-建筑服务; 84-货物运输服务; 85-不动产销售; 86-不动产经营租赁服务; 89-旅客运输服务; 92-自产农产品销售; 93-拖拉机按减征税; 96-农产品收购;其它为空;
    "hwxx":[                            //货物信息
      {
        "ggxh":"",                    //规格型号
        "jldw":"套",                    //计量单位
        "dj":"16560.00",            //单价
        "mxxh":1,                    //明细序号
        "se":240,                    //税额
        "ysse":"240",                //原始税额
        "mc":"房屋租赁(20220101-20221231)",    //名称
        "sl":"1",                    //数量
        "je":16560,                    //金额
        "slv":0.015,                //税率
        "ysslv":"1.5%",                //原始税率
        "spbm":""                    //商品编码
      }
    ]
  }
}

示例(java)

import com.anq.core.utils.HttpUtil;
import com.anq.core.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class Examples {
    String appId = "聚美智数分配的appId";
    String appSecret = "聚美智数分配的appSecret";
    String apiUrl = "";

    @Test
    public void examples() {
        long timestamp = System.currentTimeMillis();
        String sign = DigestUtils.sha256Hex(appId + appSecret + timestamp); // 生成sign

        Map<String, Object> params = new HashMap<String, Object>();

        params.put("appId", appId);  // 聚美智数分配的appId
        params.put("timestamp", timestamp);
        params.put("sign", sign);
        params.put("productCode", "invoice_validate_v2");// 固定值
        params.put("fpdm", ""); // 发票代码 ,发票代码  非全电发票必填
        params.put("fphm", ""); // 发票号码 
        params.put("kprq", ""); // 开票日期 ,格式YYYYMMDD
        params.put("jym", ""); // 校验码后6位 ,增值税普通发票、增值税电子普通发票、增值税普通发票(卷式)、增值税电子普通发票(通行费)必填
        params.put("je", ""); // 金额 ,增值税专用发票、增值税电子专用发票、机动车销售统一发票输入**不含税金额**; 二手车销售统一发票输入**车价合计**; 全电发票输入**价税合计**

        // HttpUtil可从这里下载 https://file.jumdata.com/support/HttpUtil.java
        String resultJson = HttpUtil.postForm(apiUrl, null, params);
        log.info(resultJson);

        // JumeiOpenApiResponse 可从这里下载 https://file.jumdata.com/support/JumeiOpenApiResponse.java
        // JsonUtil可从这里下载 https://file.jumdata.com/support/JsonUtil.java
        JumeiOpenApiResponse jumeiOpenApiResponse = JsonUtil.toObject(resultJson, JumeiOpenApiResponse.class)
        if(jumeiOpenApiResponse.getCode() == 200){
           //TODO
        }else{
           //TODO
        }
    }
}
posted @ 2026-01-19 14:10  Jumdata  阅读(0)  评论(0)    收藏  举报