Skip to content

发票实时同步接口文档

1. 概述

通过接口编号 S000621,可实时获取多种进项发票与凭证数据,适用于已兼容全电税务数字账户的系统。该接口通过电子税务局获取以下信息: 接口:ip:port/invoice/S000621

  • 未勾选发票、缴款书、完税凭证
  • 当期已勾选发票、缴款书、完税凭证
  • 不抵扣已勾选发票、完税凭证
  • 未到期发票、海关缴款书
  • 往期抵扣类发票、缴款书、完税凭证
  • 出口退税已认证类

2. 请求数据格式

json
{
  "appid": "xxx",
  "serviceid": "S000621",
  "jtnsrsbh": "xxxxxxx",
  "nsrsbh": "xxxxxxx",
  "content": "",
  "signature": "xxxxxxxxxxxxxxxxx",
  "signType": "0"
}

content说明

发票勾选状态查询参数对照表(rzzt)

img.png


字段说明

参数参数类型参数说明是否必填备注
pageInteger第几页默认1
pageSizeInteger每页数量默认系统根据不同省份给不同数量,建议100
rzztString状态详见状态码说明表格
skssqString税款所属期格式yyyyMM
rq_qString日期起格式yyyy-MM-dd,rzzt为11、17、15时为勾选日期,其它为开票日期
rq_zString日期止格式yyyy-MM-dd
iszipString是否压缩0否,1是,默认0,解密方法详见第5节
adapterString是否适配针对rzzt=40专用,默认0(否)
znxpzString是否转内销发票N否,Y是,默认N,仅支持rzzt=12
fpdmString税控发票代码rzzt=10或11时可用,默认为空
fphmString税控发票号码rzzt=10或11时可用,默认为空
qdfphmString数电发票号码rzzt=10或11时可用,默认为空
fpztdmString发票状态代码rzzt=10或11时可用,默认0,2,7,8(0正常,2红冲,7部分红冲,8全额红冲)
fxdjdmString风险等级代码rzzt=10或11时可用,默认01,02,03(01正常,02疑点发票,03异常凭证)
fplxdmString发票类型代码rzzt=10或11时可用,默认81,82,85,86,03,01,04,08,10,83,87,61,51,14,8208
gxrq_qString勾选日期起rzzt=11时可用,格式yyyy-MM-dd
gxrq_zString勾选日期止rzzt=11时可用,格式yyyy-MM-dd

content 参数示例

json
{
  "rq_q": "2018-07-28",
  "rzzt": "11",
  "pageSize": 100,
  "page": 1,
  "rq_z": "2018-08-23"
}
content 字段说明
参数类型必填说明
pageInteger页码,默认1
pageSizeInteger每页记录数,建议100
rzztString发票认证状态代码
skssqString税款所属期 yyyyMM
rq_q / rq_zString起止日期 yyyy-MM-dd
iszipString是否压缩 0否1是
adapterStringrzzt=40专用适配
znxpzString是否转内销发票(rzzt=12)
fpdm / fphm / qdfphmString发票代码/号码
fpztdm / fplxdm / fxdjdmString状态、类型、风险等级代码
gxrq_q / gxrq_zString勾选日期范围(rzzt=11时可用)

3. 请求方式

POST

4. 返回数据格式

json
{
  "uuid": "",
  "code": "0000",
  "msg": "请求成功",
  "sfjf": "Y",
  "jf_num": 1,
  "content": base64
}

content解密:
{
"pageSize": 100,
"currentPage": 1,
"count":201,
"InvoiceList": [
{
"billingDate": "2018-06-21",//开票日期
"deductible": "0",//是否认证(0-未认证,1-已认证)
"deductibleDate": "",/认证日期(YYYY-MM-DD)
"deductiblePeriod": "",//认证属期(YYYYMM)
"deductibleType": "",//认证方式(1-勾选,2-扫描)
"deductibleMode": "",//认证模式(1-抵扣,2-退税)
"invoiceCode": "5200171130",//发票代码
"invoiceNumber": "01539905",//发票号码
"invoiceType": "01",//发票类型
"purchaserName": "北京*********有限公司",//购方名称
"purchaserTaxNo": "911*********15B",//购方税号
"salesTaxName": "*******有限公司",//销方名称
"salesTaxNo": "9152**********936",//销方税号
"state": "0",//发票状态
"totalAmount": 28155.34,//未税金额
"totalTax": 844.66,//税额
"validTax": 844.66,
"checkStatus": "1",
"checkDate": “”,
"managementStatus": "0",
"abnormalType":"",
"checkCode":"",
"ylzd4":"不抵扣类型",
"ylzd5":"全电纸质发票的全电发票号码",
"tdyslxDm":"业务类型, 08 通行费,12 自产农产品,16 自小规模处采购农产品,空字符串或null-无业务类型"
}
],
"skssq": "202201" //需要所属期的同步才会返回值
}

字段说明

字段(ID)名称类型必须说明
pageSize每页数量number(8)查询每页返回的记录数量
currentPage当前页数number(8)当前页码
count发票总张数number(8)总记录数
InvoiceList发票数据list发票信息列表
billingDate开票日期char(10)格式:YYYY-MM-DD,缴款书发票表示填发日期
deductible是否认证char(1)0-未认证,1-已认证
deductibleDate认证日期char(10)已认证时填写,格式:YYYY-MM-DD
deductibleMode认证模式char(1)1-抵扣,2-退税,4-不抵扣勾选
deductiblePeriod认证属期char(4)格式:YYYYMM
deductibleType认证方式char(1)1-勾选,2-扫描
invoiceCode发票代码char(15)缴款书或全电发票时为空
invoiceNumber发票号码char(30)发票或缴款书号码
invoiceType发票类型char(2)示例:01增值税专票,10增值税普票,17海关缴款书等,详见下方类型表
purchaserName购方名称char(200)发票购方企业或个人名称
purchaserTaxNo购方税号char(20)购方纳税人识别号
salesTaxName销方名称char(200)发票销方名称
salesTaxNo销方税号char(20)销方纳税人识别号
state发票状态char(1)0正常,1作废,2红冲,3失控,4异常,7部分红冲,8全额红冲,80红字发票待确认
totalAmount未税金额number(18,2)增值税发票必填,缴款书为空
totalTax税额number(18,2)发票税额
validTax有效税额number(18,2)可用于抵扣的税额
checkStatus勾选状态char(1)0-未勾选,1-已勾选
checkDate勾选日期char(10)格式:YYYY-MM-DD
managementStatus管理状态char(1)0正常,1疑点,2异常,3红字锁定,4禁止勾选退税,5机动车高风险,6机动车低风险
abnormalType异常类别char(1)0状态异常,1用途变更,2管理状态异常
checkCode校验码char(20)发票校验码
ylzd2是否录入不符项char(2)0-否,1-是
ylzd5全电发票号码varchar(50)全电纸质发票的关联全电发票号
ylzd4不抵扣类型varchar(50)1-非应税项目,2-免税项目,3-福利消费,4-非正常损失,5-其他
tdyslxDm业务类型char(2)示例:08通行费,12自产农产品,16采购农产品,06不动产等
ylzd3转内销证明编号varchar(50)转内销相关凭证编号

发票类型代码说明(部分)

  • 01:增值税专用发票
  • 10:增值税普通发票
  • 08:电子专票
  • 09:全电发票(专票)
  • 90:全电发票(普票)
  • 17:海关缴款书
  • 18:完税凭证
  • 85 / 86:纸质专用 / 普通发票
  • 51 / 61:铁路 / 航空数电票
  • 83 / 87:机动车销售类发票

5. rzzt=40 适配返回格式(adapter=1)

json
adapter=1时:
{
"pageSize": "100",
"currentPage": "1",
"InvoiceList": {
"202002": {
"FP": [
{
"abnormalType": "",
"billingDate": "2020-01-16 00:00:00",
"checkDate": "2020-02-28 22:01:30",
"checkStatus": "1",
"checkTime": "2020-02-28 22:01:30",
"deductible": "1",
"deductibleDate": "2020-02-28 22:01:30",
"deductibleMode": "1",
"deductiblePeriod": "202002",
"deductibleType": "1",
"id": 0,
"invoiceCode": "1100193***",
"invoiceNumber": "06374***",
"invoiceType": "01",
"managementStatus": "0",
"purchaserName": "商贸有限公司",
"purchaserTaxNo": "91310115797033****",
"salesTaxName": "(中国)有限公司",
"salesTaxNo": "91110000625907****",
"source": "1",
"state": "0",
"totalAmount": 5763.7,
"totalTax": 749.28,
"validTax": 749.28,
"ylzd5": ""
}
],
"HGJKS": [
{
"abnormalType": "",
"billingDate": "2019-11-28 00:00:00",
"checkDate": "2020-02-24 15:19:28",
"checkStatus": "1",
"checkTime": "2020-02-24 15:19:28",
"deductible": "1",
"deductibleDate": "2020-02-24 15:19:28",
"deductibleMode": "1",
"deductiblePeriod": "202002",
"deductibleType": "1",
"id": 35100,
"invoiceCode": "",
"invoiceNumber": "53042019104106***8-L02",
"invoiceType": "17",
"managementStatus": "0",
"purchaserName": "贸有限公司",
"purchaserTaxNo": "91310115797033***",
"source": "1",
"state": "0",
"totalTax": 433138.8,
"tq_bj": "0",
"validTax": 433138.8,
"xg_sj": "2023-06-06 17:50:44"
}
]
},
"202306": {}
}
}

6. 解密方法(Java示例)

  1. Base64 解码 → 2. ZIP 解压
java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 * 
 * @ClassName: ZipUtil
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author lipenghui
 * @email 511930751@qq.com
 * @date 2023年6月6日
 *
 */
public class ZipUtil {

    public static void main(String[] args) {
        System.out.println(unzipDecode("JCSK2023",true));
    }

    /**
     * 解密(压缩解密)
     * (先base64解密,在解压)
     * @param zipStr
     * @param iszip    是否是压缩文件, false表示只做base64操作
     * @return
     */
    public static String unzipDecode(String zipStr,boolean iszip) {    
        String unzipStr="";
        try{
             byte[] unzip=new sun.misc.BASE64Decoder().decodeBuffer(zipStr);
             if(iszip){                
                unzipStr=decompress(unzip);
             }
             else{
             unzipStr= new String(unzip,"UTF-8");
            }
        }
        catch(Exception e){
//            logger.error("压缩解密失败:"+zipStr);
            e.printStackTrace();
        }

        return unzipStr;
    }


    /**
     * 解压
     * @param compressed
     * @return
     */
    private static String decompress(byte[] compressed) {
        if (compressed == null)
            return null;

        ByteArrayOutputStream out = null;
        ByteArrayInputStream in = null;
        ZipInputStream zin = null;
        String decompressed;
        try {
            out = new ByteArrayOutputStream();
            in = new ByteArrayInputStream(compressed);
            zin = new ZipInputStream(in);
            ZipEntry entry = zin.getNextEntry();
            byte[] buffer = new byte[1024];
            int offset = -1;
            while ((offset = zin.read(buffer)) != -1) {
                out.write(buffer, 0, offset);
            }
            decompressed = out.toString("UTF-8");
        } catch (IOException e) {
            decompressed = null;
        } finally {
            if (zin != null) {
                try {
                    zin.close();
                } catch (IOException e) {
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                }
            }
        }

        return decompressed;
    }

}