通用约定

调用方式

API的调用地址遵循如下约定的方式:

API地址前缀+ 服务 + 资源+ 参数

其中:
API地址前缀:是不变的URL地址,分为测试环境和正式环境。
测试环境:https://bigdataxy.kingdee.com:7205
生产环境: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);
第四步:根据不同接口定义处理业务。

对接Demo下载