企享云API(适配版本)
  1. 快速开始
企享云API(适配版本)
  • 基本介绍
  • 快速开始
    • 开发必读
    • 对接地址
    • SDK集成
    • 认证鉴权
    • 接口调用
    • 加密说明
  • 前置流程
    • 业务指引
    • 证书申请指引
    • 证书对接前置流程
    • 小号申请指引
  • 公共业务
    • 鉴权
      • 获取access_token
    • 订购
      • 自然人获取企业列表
      • 订购产品
      • 订购取消
      • 订购查询
      • 企业取消授权
    • 自然人
      • 自然人创建接口
      • 自然人修改接口
      • 自然人删除接口
    • 通知预警
      • 客户通知
    • 附录
      • 地区代码
  • 登录业务
    • 简介
    • 登录
      • 托管模式
        • 创建用户
        • 登录接口
        • 通用账户创建
        • 账号启用
        • 登录电票平台接口
        • 校验电局账号有效性
      • 自持登录
        • 自然人同步登录接口
        • 自然人异步登录发送验证码接口
        • 异步登录校验税局缓存是否有效
        • 异步登录税局【发送短信验证码】
        • 扫码登录税局(二维码获取)
        • 扫码登录税局(二维码登录)
        • 异步登录税局【上传短信验证码登录】
        • 自然人异步登录税局【上传短信验证码登录】
        • 上传cookie接口
      • 校验appkey是否账户自持
    • 多账号管理
      • 托管模式
        • 托管账号创建
        • 托管账号修改
        • 托管账号删除
        • 托管账号查询
        • 账号产品绑定
        • 账号产品解绑
      • 自持登录
        • 校验异步登录税务数字账户缓存是否有效
        • 异步登录税务数字账户【发送短信验证码】
        • 异步登录税务数字账户【上传短信验证码登录】
  • 发票业务
    • 海关进出口
      • 获取退税报关单
      • 进出口报关单获取
      • 出口报关单打印
      • 获取通关无纸化出口放行通知书PDF文件
      • 获取电子委托协议PDF文件
      • 获取购销合同PDF文件
      • 获取装箱单PDF
    • 发票附录
      • 发票附录
      • 数电票号码规则
  1. 快速开始

接口调用

HTTP调用方式可以面向HTTP接口进行开发,ISV可以根据自己系统的情况,选择不同的实现语言来实现对接。

请求参数

  • 公共请求头

除了HTTP协议中规定的头信息以外,本开放接口额外做以下头信息要求:

参数名称参数类型说明
Content-TypeString请填写application/json;charset=UTF-8
access_tokenString大多数接口,需要通过验证身份以后才能访问,需要携带该头信息;请从OAuth接口获取的access_token
req_dateLong当前时间戳的毫秒数。可以参考java的System.currentTimeMillis()方法生成;(如果未携带该头信息,或与服务端的时间差超过 15 分钟,则云端拒绝该请求)
req_signString签名校验请求的合法性
  • 公共返回报文

在所有请求的返回值里,有一些公共的字段:

参数名称参数类型说明
codeString业务编码
successBoolean接口是否成功(是否发生业务异常)
reqIdString由服务器端生成的唯一标识,对应每次请求。排查接口异常时,可提供该字段方便定位
messageString业务异常信息
dataOject业务数据
  • 返回结果

请求成功时返回结果示例:

{
    "reqId": "0550e35a24014277ab056cf7246eb7db",
    "code": "2000",
    "success": true,
    "message": null,
    "data": {
        "access_token": ""
    }

请求异常时返回示例:

{
    "reqId": "8146864387cd4847801616abd9e2f16a",
    "code": "2000",
    "success": true,
    "message": null,
    "data": {
        "error_msg": "应用的密钥无效!",
    }
}

签名规则

每个请求头都需要添加req_sign字段,来验证请求的合法性,填写方法如下:

1、req_sign头信息填写的内容如下:

req_sign: API-SV1:<AppKey>:<Signature>

其中:

  • API-SV1:表示签名算法版本,暂时固定API-SV1
  • AppKey:为分配给接入方的AppKey
  • Signature:为签名值,计算方法见下面描述

2、签名值的计算方法:

第一步,拼装待签名字符串

待签名字符串 = HTTPMethod + "_" + Content-Md5 + "_" + req_date + "_" + access_token + "_" + AppSecret

其中:

  • HTTPMethod:为请求的方法,通常为POST
  • Content-Md5:为请求Body内容的md5
  • req_date:为请求头信息中的req_date
  • access_token:为AppKey和AppSecret登录后获取
  • AppSecret:为分配给接入方的密钥

注意:
签名字符串必须为UTF-8格式,含有中文字符的签名串必须先进行UTF-8编码
本文档中 md5 相关的结果都转为小写处理

第二步,计算签名

签名值 = Base64(MD5(待签名字符串)))

签名示例

签名示例 执行结果 示例描述
请求body:
{"nsrsbh":"915211111111111111"}
请求body Md5结果:
Content-Md5=4e7f9b81e299ad014cfbc6949c3f4e04
请注意空格换行等空白字符,如果POST请求body内容包含空格换行等空白字符,请签名用的字符串也包含,保持和POST请求body一致,最简单的做法是请求body和计算签名都去掉空白字符串
待签名字符串:
signStr=HTTPMethod_Content-Md5_req_date_accessToken_appSecret =POST_4e7f9b81e299ad014cfbc6949c3f4e04_xxx_yyy_zzz
签名值过程 md5之后结果:
e8e798e67dc2baa7b420169e08b135c4

再base64之后最终签名值:
freq_signMD5=ZThlNzk4ZTY3ZGMyYmFhN2I0MjAxNjllMDhiMTM1YzQ=
1、xxx请替换成实际的时间戳,类似1581588537349的格式
2、yyy请替换成实际取到的accessToken, 类似 eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJbLTEsLTEsLTEsMTAwLFwiXCIsMTAwMDEwMDEsbnVsbCxcIlwiLC0xXSIsImV4cCI6MTU4Mjg4Mjg0NSwiaWF0IjoxNTgxNTg2ODQ1fQ.T4GTFFzf6xD2n1rrCFVu88dQA8ipEobX2_i-Ub7qvIkxrTScmUm_113r1VEsTGhysA-jLFVwFWOtRqEaWvIvVA
3、zzz请替换成实际的appSecret,类似 9r27FCIHtmIAUBoNjA5Z5hq2vTCEfAL82YzrnV4vdlhpXAp2
req_sign=API-SV1:appKey :freq_signMD5 最终请求header,req_sign的值:
API-SV1:1000xxxx:ZThlNzk4ZTY3ZGMyYmFhN2I0MjAxNjllMDhiMTM1YzQ=
1000xxxx请替换为实际的appkey
  • 上述举例的数据是为了验证签名算法,请先按照举例的数据验证 md5 和 base64 算法,看看生成的签名值是否正确,实际请求请按照实际数据签名。
上一页
认证鉴权
下一页
加密说明
Built with