OFD版式文件生成

一、概述

1.1 业务介绍

随着总局税控改革的推进,OFD格式将全面取PDF 格式,成为主流的电子发票版式文件。

OFD 版式文件作为一种全新的国标,尚处于普及推广的前奏阶段,客户对 OFD 版式文件服务的需求广泛而迫切。

现第三方服务商接入OFD,客户可以调用平台API接口实现文件生成、解析等功能。

1.2 目的

此文档为第三方服务商接入发票通OFD版式文件生成发票的接入技术规范(企业业务),第三方按此文档就接口内容、接口格式、交互模式等技术达成一致,并以此进行对接程 序的开发。对第三方开发、实现技术和实现方式等均无要求,由第三方自行决定,但需要满 足此文档的技术接入规范。

应业务要求,业务过程中涉及到的两个系统之间的数据交互方式及交互内容进行规范, 制定统一的协议,形成技术文档。

1.3 接入方式

接入主要采取 Oauth2.0 接入技术规范,认证成功后发票通平台提供相关服务业务功能, 业务参数和报文基于 XML/JSON 报文格式,采用 http 或 https 方式。

1、XML 格式规范

请求规范(HEAD 节点中的子节点根据实际业务自定义):

<?xml version="1.0" encoding="utf-8"?>
<REQUEST>
  <HEAD></HEAD>
  <BODY></BODY>
</REQUEST>

响应规范:

<?xml version="1.0" encoding="utf-8"?>
<ROOT>
  <HEAD>
    <SERVICE>
      <REPLYCODE>0</REPLYCODE>
      <REPLYMSG>success</REPLYMSG>
    </SERVICE>
  </HEAD>
  <BODY></BODY>
</ROOT>

2、JSON 格式规范

请求规范(HEAD 节点中的子节点根据实际业务自定义):

{
  "REQUEST": {
    "HEAD": {
    },
    "BODY": {
    }
  }
}

响应规范:

{
  "ROOT": {
    "HEAD": {
      "SERVICE": {
         "REPLYCODE": "0",
         "REPLYMSG": "success"
      }
    },
    "BODY": {
    }
  }
}

1.4 接入流程图

接入流程图
OAuth 2.0 认证流程

术语

注意:对 client_id 和 client_secret 信息进行保密,不要随意泄漏。

二、业务接口说明

1、OFD版式文件生成

1.1、请求报文

接口说明:用于OFD版式文件生成

调用方式:HTTPS请求方式 POST请求

测试环境 URL: https://IP:PORT/Entoauth/thirdApi?sign=DQWJSC&client_id=应用ID&access_token=访问Token&openID=openID的值&sqm=授权码&busiType=SQM_DQWJSC&data=报文数据(Base64过后的数据)&dataType=data报文数据类型(0:json/1:xml)

正式环境 URL: https://IP:PORT/Entoauth/thirdApi?sign=DQWJSC&client_id=应用ID&access_token=访问Token&openID=openID的值&sqm=授权码&busiType=SQM_DQWJSC&data=报文数据(Base64过后的数据)&dataType=data报文数据类型(0:json/1:xml)

参数说明:

序号 参数 含义
参数 1 client_id 应用 ID
参数 2 access_token 二.1 接口获取到
参数 3 openID 二.2 接口获取到
参数 4 sqm OFD版式文件生成授权码
参数 5 busiType 固定值 SQM_DQWJSC
参数 6 data 报文数据(Base64 过,然后再 URLEncoder 的数据)
参数 7 dataType data 报文数据类型(0:json/1:xml)

data 不同格式报文数据样例:

XML 格式数据:

<REQUEST>
<REQUEST_PARAM>
<REQUEST_COMMON_FPKJ>     
<XSF_MC>销方名称</XSF_MC>
<XSF_NSRSBH>销方税号</XSF_NSRSBH>  
<XSF_DZDH>销方地址电话</XSF_DZDH>  
<XSF_YHZH>销方银行账号</XSF_YHZH>
<GMF_MC>购买方名称</GMF_MC>
<GMF_NSRSBH>购方税号</GMF_NSRSBH>
<GMF_DZDH>购方地址电话</GMF_DZDH>
<GMF_YHZH>购方银行账号</GMF_YHZH>
<JYM>校验码</JYM>
  <QMZ>签名值</QMZ>  
  <ZSFS>征税方式</ZSFS>  
  <JSHJ>价税合计</JSHJ>  
  <COMMON_FPKJ_XMXXS class="COMMON_FPKJ_XMXX" size="">
    <COMMON_FPKJ_XMXX>
      <SE>税额</SE>  
      <HSBZ>含税标志</HSBZ>  
      <GGXH>规格型号</GGXH>  
      <SL>税率</SL>  
      <ZZSTSGL>增值税特殊管理</ZZSTSGL>  
      <XMSL>项目数量</XMSL>  
      <LSLBS>零税率标识</LSLBS>  
      <DW>单位</DW>  
      <SPSM>商品税目</SPSM>  
      <FPHXZ>发票行性质</FPHXZ>  
      <SPBM>商品编码</SPBM>  
      <XMDJ>项目单价</XMDJ>  
      <XMMC>项目名称</XMMC>  
      <XMJE>项目金额</XMJE>  
      <YHZCBS>优惠政策标识</YHZCBS>  
      <ZXBM>纳税人自行编码</ZXBM>
    </COMMON_FPKJ_XMXX>
  </COMMON_FPKJ_XMXXS>  
  <EWM>二维码</EWM>  
  <BZ>备注</BZ>  
  <JQBH>机器编号</JQBH>  
  <KPRQ>开票日期</KPRQ>    
  <FP_MW>发票密文</FP_MW>  
  <BMB_BBH>编码表版本号</BMB_BBH>  
  <KPLX>开票类型</KPLX>  
  <KPR>开票人</KPR>  
  <SKR>收款人</SKR>  
  <FHR>复核人</FHR>    
  <FP_HM>发票号码</FP_HM>  
  <FP_DM>发票代码</FP_DM>     
  <HJJE>合计金额</HJJE>  
  <TSPZ>特殊票种</TSPZ>  
  <YFP_DM>原发票代码</YFP_DM>  
  <HJSE>合计税额</HJSE>  
  <YFP_HM>原发票号码</YFP_HM>   
</REQUEST_COMMON_FPKJ>
</REQUEST_PARAM>
</REQUEST>

JSON 格式数据:

{
  "REQUEST": {
    "REQUEST_PARAM": {
      "REQUEST_COMMON_FPKJ": {
        "XSF_MC": "销方名称",
        "XSF_NSRSBH": "销方税号",
        "XSF_DZDH": "销方地址电话",
        "XSF_YHZH": "销方银行账号",
        "GMF_MC": "购买方名称",
        "GMF_NSRSBH": "购方税号",
        "GMF_DZDH": "购方地址电话",
        "GMF_YHZH": "购方银行账号",
        "JYM": "校验码",
        "QMZ": "签名值",
        "ZSFS": "征税方式",
        "JSHJ": "价税合计",
        "COMMON_FPKJ_XMXXS": {
            "COMMON_FPKJ_XMXX": {
            "SE": "税额",
            "HSBZ": "含税标志",
            "GGXH": "规格型号",
            "SL": "税率",
            "ZZSTSGL": "增值税特殊管理",
            "XMSL": "项目数量",
            "LSLBS": "零税率标识",
            "DW": "单位",
            "SPSM": "商品税目",
            "FPHXZ": "发票行性质",
            "SPBM": "商品编码",
            "XMDJ": "项目单价",
            "XMMC": "项目名称",
            "XMJE": "项目金额",
            "YHZCBS": "优惠政策标识",
            "ZXBM": "纳税人自行编码"
          }
        },
        "EWM": "二维码",
        "BZ": "备注",
        "JQBH": "机器编号",
        "KPRQ": "开票日期",
        "FP_MW": "发票密文",
        "BMB_BBH": "编码表版本号",
        "KPLX": "开票类型",
        "KPR": "开票人",
        "SKR": "收款人",
        "FHR": "复核人",
        "FP_HM": "发票号码",
        "FP_DM": "发票代码",
        "HJJE": "合计金额",
        "TSPZ": "特殊票种",
        "YFP_DM": "原发票代码",
        "HJSE": "合计税额",
        "YFP_HM": "原发票号码"
      }
    }
  }
}

请求参数:

序号 字段 名称 必须 说明
1client_id应用ID应用ID
2access_token访问Token2.1接口获取
3openIDOpenID2.2接口获取到的
4sqm授权码在开发者平台进行申请
5dataType报文数据类型0:json,1:xml
6busiType业务类型SQM_DQWJSC:OFD板式文件生成(未签章)
7dataJson/xml 业务报文需要进行Base64 编码  
7.1XSF_MC销方名称销方名称
7.2XSF_NSRSBH销方税号销方税号
7.3XSF_DZDH销方地址电话销方地址电话
7.4XSF_YHZH销方银行账号销方银行账号
7.5GMF_MC购买方名称如为非收购发票,为购买方名称;如为收购发票,此项必填,即开票纳税人名称,例如XX烟草公司
7.6GMF_NSRSBH购方税号购方税号
7.7GMF_DZDH购方地址电话购方地址电话
7.8GMF_YHZH购方银行账号购方银行账号
7.9JYM校验码成功必填
7.10QMZ签名值签名值
7.11ZSFS征税方式0:普通征税,1:减按计征,2:差额征税
7.12JSHJ价税合计小数点后2位 校验:价税合计=合计金额+合计税额 正票:13位;负票:14位
7.13EWM二维码二维码
7.14BZ备注备注
7.15JQBH机器编号机器编号
7.16KPRQ开票日期格式: “YYYYMM”
7.17FP_MW发票密文发票密文
7.18BMB_BBH编码表版本号编码表版本号
7.19KPLX开票类型0:正数票开具 1:负数票开具
7.20KPR开票人开票人
7.21SKR收款人收款人
7.22FHR复核人复核人
7.23FP_HM发票号码发票号码
7.24FP_DM发票代码发票代码
7.25HJJE合计金额小数点后2位,不含税 正票:12位;负票:13位
7.26TSPZ特殊票种“00”不是、“01”农产品销售、“02”农产品收购、“06”抵扣通行费、“07”其它通行费、“08”成品油销售。
7.27YFP_DM原发票代码原发票代码
7.28HJSE合计税额小数点后2位
7.29YFP_HM原发票号码原发票号码
7.30SE税额精度两位小数
7.31HSBZ含税标志N不含税,Y含税,建议均传不含税明细
7.32GGXH规格型号规格型号
7.33SL税率税率
7.34ZZSTSGL增值税特殊管理增值税特殊管理
7.35XMSL项目数量总长度包含小数点不能超过20位。若TSPZ为08,此项必填,不能为0。
7.36LSLBS零税率标识空代表正常税率。1 出口免税和其他免税优惠政策(免税)、2 不征增值税(不征税)、3 普通零税率(0%)
7.37DW单位单位
7.38SPSM商品税目保留字段,目前为空
7.39FPHXZ发票行性质0 正常行、1 折扣行、2 被折扣行
7.40SPBM商品编码总局固定编码,不能修改
7.41XMDJ项目单价不含税,总长度包含小数点不能超过20位(只有当ZSFS为1时,此处填含税单价)若TSPZ为08,此项必填,不能为0。
7.42XMMC项目名称如果为折扣行,商品名称须与被折扣行的商品名称相同,不能多行折扣。
7.43XMJE项目金额不含税,单位:元(最多保留2位小数)(只有当ZSFS为1时,此处填含税金额)(只有当ZSFS为1时,此处填含税金额)
7.44YHZCBS优惠政策标识0未使用,1使用
7.45ZXBM纳税人自行编码自定义编码以2位为一级,共10级,每级可用编码值为00-99 或AA-ZZ

1.2、返回报文

XML 格式返回报文

<RESPONSE>
<CODE>返回代码</CODE>
<MESSAGE>返回消息</MESSAGE>
<DATA>返回数据 base64加密的OFD byte数组</DATA>
</RESPONSE>

JSON 格式返回报文

{
  "RESPONSE": {
    "CODE": "返回代码",
    "MESSAGE": "返回消息",
    "DATA": "返回数据 base64加密的OFD byte数组"
}

返回参数说明

序号 字段 名称 长度 必须 说明
1 CODE 返回代码 0000 为成功,其它为失败
2 MESSAGE 返回信息 详细信息描述
3 DATA 返回数据 返回数据