调用方式
API的调用地址遵循如下约定的方式:
API地址前缀+ 服务 + 资源+ 参数
其中:
API地址前缀:是不变的URL地址,分为测试环境和正式环境。
测试环境:https://uat.bigdataxy.com
生产环境:https://www.bigdataxy.com
秘钥说明
客户id和secret:用于客户身份验证,需作为参数传递至服务器
客户端密钥对:客户端公钥用于请求加密,客户端私钥用于请求加签
服务端密钥对:服务端公钥用于响应验签、解密
加密签名
请求时加密、签名算法
请求的数据格式为固定json格式,具体为:
字段 | 说明 |
---|---|
appid | 客户id |
data | 业务参数(加密) |
vector | 偏移量 |
sign | 签名 |
步骤:
第一步,将业务参数与客户id(client_id)、客户secret(client_secret)存入键值对象(map),执行toJsonString(map)获取到json字符串对象;
第二步,使用客户公钥(取39-63位)与随机8位偏移量对第一步生成的字符串进行加密,得到参数密文;
第三步,对参数密文进行md5编码并转化为大写字符,得到待签名字符串,使用客户私钥对待签名串进行加签,得到签名sign字符串;
第四步,将客户id、参数密文、8位偏移量和签名字符串装成最终json参数。
举例:
假设传递业务参数如下:
"client_id":"201534"
"client_secret":"dfoekwdldllrkhsfd"
"orderNo": KD30ea5df4f
第一步所得json字符串对象为:String paramJsonStr =
"{"client_id":"201534","client_secret":"dfoekwdldllrkhsfd","orderNo":"KD30ea5df4f"}"
第二步加密:String encryptStr = Cipher3DES.encrypt(paramJsonStr ,
clientPublicKey, vector);
第三步签名:String sign =
RsaSignCoder.sign(md5(encryptStr).toUpperCase(), clientSecretKey);
第四步组装:Map finalJsonObj =
{"appid":client_id,"data":encryptStr,"sign":sign,"vector":vector}
响应时验签、解密算法
返回的数据格式为固定json格式,具体为:
字段 | 说明 | |
---|---|---|
status | 系统响应码 | |
msg | 系统响应信息 | |
data | sign | 签名 |
vector | 偏移量 | |
result | 业务结果(加密) |
步骤:
第一步:判断status,如果status为200,下一步;否则失败;
第二步:使用服务端公钥验证签名:
Boolean signResult =
RsaSignCoder.verify(md5(data.result).toUpperCase(), kdPublickey,
data.sign),signResult为true,验证通过,下一步;否则失败。
第三步:使用服务端公钥解密获得业务结果json字符串:
String resultJsonStr = Cipher3DES.decrypt(data.result, kdPublicKey,
data.vector);
第四步:根据不同接口定义处理业务。