接入指南
系统关系
证书签名系统与业务系统的关系见下图。签发资料由业务方通过api方式提交。
Server端接口请求规范
输入参数字符集必须是UTF-8,参数为Json格式。 输入固定上下文信息(参数信息)。它包含的属性:
- timestamp时间戳,当前访问客户端系统时间戳明文,必填 ,例如14656332256。
- signInfo签名信息,使用固定算法对数据与授权码等信息进行加密后的密文,必填(请参看签名算法)。
- bussNo交易流水,该笔交易如果存在流水号,系统将记录,选填。
- app_id应用id,由云签平台分配, 必填。
- data交易数据,数据格式为base64(jsonStr), 选填,详细请看每个方法输入参数描述。
示例:
{ timestamp:14656332256 , signInfo:"", bussNo:"", app_id:"", data:"" }
Server端接口返回规范
返回值是http status code=200服务器相应,由服务器返回的数据,该数据是固定参数json格式Messge,Messge格式如下:
{
code:0 ,//数字,信息码,如果是0,说明是正常,其他说明错误
message :”注册成功”,//字符串,具体信息。
content:{id:0,name:”张三”} //任意json格式数据或者字符串
}
api参数签名算法
参与签名参数(所有参数大小敏感)如:app_id(渠道码)、timestamp(时间戳)、bussNo(流水号)、data(业务数据)。对所有待签名参数按照参数名的ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2...)拼接成字符串string1。String1再使用URL键值对的格式加上app_secret(应用密钥--非传输参数)拼接成字符串string2。这里需要注意的是对string2作sha256加密,参数名和参数值都采用原始值,不进行URL转义。即 signInfo=sha256(string2).
示例:
app_id=Wcdd4F5cEdjl6E
timestamp=14656332256
bussNo=20170315009
data=base64(‘{param1:value1,param2:value2}’)=”e3BhcmFtMTp2YWx1ZTEscGFyYW0yOnZhbHVlMn0=”
app_secret=pjaeKm8ESzzAEbbcHFm7GMu3F9LGKpyM
步骤1. 对签名字段排序
对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:app_id=Wcdd4F5cEdjl6E&bussNo=20170315009&data=e3BhcmFtMTp2YWx1ZTEscGFyYW0yOnZhbHVlMn0=×tamp=14656332256
步骤2. 对签名字段排序后值加入校验密钥
在string1后使用URL键值对的格式拼接成字符串string2:app_id=Wcdd4F5cEdjl6E&bussNo=20170315009&data=e3BhcmFtMTp2YWx1ZTEscGFyYW0yOnZhbHVlMn0=×tamp=14656332256&app_secret=pjaeKm8ESzzAEbbcHFm7GMu3F9LGKpyM
步骤3. 计算哈希
对string2进行sha256签名,得到signInfo:000dde85d3f1bb3cc0acb269e9ee9d837c165e6607f1e1a49ba9023f00120821
注意事项
1. app_secret是云签分配的密钥,只作数据签名使用
2. 参数为空(null或空字符串)不参与签名
签名验证
步骤1:计算哈希
通过上文的 签名算法 计算出哈希值
步骤2:比较哈希
比较计算所得哈希值与signInfo值是否一致,若不一致说明数据被篡改
实例demo所需jar包下载
签名示例jar(右键另存为)
HttpsClientUtil.java(右键另存为)
其中HttpsClientUtil依赖httpclient,如果没有,maven可以使用一下的依赖引入:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>