接入指导
## 接入指导
### 一、本接口接入遵循以下约定
-
- 网关地址:https://ioe.car900.com
- 接口地址: 网关地址+接口路径(详见每个接口)
- 请求方式: POST/GET
- 数据格式:
- 请求:Content-Type:application/x-www-form-urlencoded
- 返回:Content-Type:application/json
- 编码方式:UTF-8
- 公共参数:
- appId: 应用 ID,由云想印提供
- token: 签名 token(算法见下方)
- timestamp: 请求时间戳(毫秒),格式:1632745900575
- requestId: 请求标识,用于唯一标识当前请求
- userCode: 用户账户名称(同appId)
- 公共响应
- Code: 错误码,详见[错误码](doc:jWCERdCP)
- Msg: 错误信息,详见[错误码](doc:jWCERdCP)
- Data: 返回结果集
- Total: 返回结果集数量
### 二、签名算法
第一步:将公共请求参数,除token外,按照Ascii由小到大排序,参数1+参数1的值+参数2+参数2的值+…+参数n+参数n的值,拼接成 **stringA**
参数值为空不参考签名
第二步:将 stringA最后面拼接上appSecret,得到 **stringSignTemp** 字符串,并对 stingSignTemp 进行 MD5 运算,再将得到的字符串**转为大写**,就是签名 **token**
签名算法 JAVA 代码示范
```java
/**
* 获取token
*
* @param objectMap 接口请求参数appId,timestamp,requestId,userCode
* @param appSecret 密钥
* @return
*/
public static String getToken(Map<String, Object> objectMap, String appSecret) {
StringBuffer content = new StringBuffer();
List keys = new ArrayList();
for (String key : objectMap.keySet()) {
switch (key) {
case "appId":
keys.add(key);
break;
case "timestamp":
keys.add(key);
break;
case "requestId":
keys.add(key);
break;
case "userCode":
keys.add(key);
break;
}
}
Collections.sort(keys);
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = objectMap.get(key).toString();
if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value)) {
content.append(key).append(value);
} else {
return "key:" + key + "的值非法";
}
}
System.out.println("加密字符串:" + content);
return HashUtil.MD5(content.append(appSecret)).toUpperCase();
}
```
官方开放平台文档:[https://bsj2.yuque.com/docs/share/f500d056-6a9d-4847-a5c5-c6a163742eb8?#](https://bsj2.yuque.com/docs/share/f500d056-6a9d-4847-a5c5-c6a163742eb8?#)