正式环境域名: https://cop.caocaokeji.cn
沙箱环境域名: https://sandbox-cop.caocaokeji.cn
1、首先确保在开放平台申请应用获取client_id和sign_key(非常重要)
申请地址:https://open.caocaokeji.cn/ocean/login
2.接口调试
2.1 签名认证(防止参数篡改)
签名方式:SHA1 MD5
加签参数 | 是否必须加签 | 备注 |
---|---|---|
client_id | 是 | 曹操申请的client_id |
sign_key | 是 | 秘钥 |
timestamp | 是 | 时间戳 |
业务参数 | 具体对待 | 业务参数 |
1.生成签名时将sign_key加入传递的参数,参与签名;
2.将所有的参数按照key值按字符升序排列(key1value1key2value2),生成小写的签名作为sign;
3.生成sign后,sign与其他的参数一同传递;
4.sign_key不参与传递;
5.timestamp时间戳为毫秒,例如 timestamp=1508240915308
注:access_token 方式接入时 access_token 不参与加签(参与传递),仍然是 client_id 参与加签(不参与传递)
Java 加签示例:
@Override
public String sign(Map<String, Object> params, String signKey) throws Exception {
params.put(SIGN_KEY, signKey);
Map<String, String> needVerify = new HashMap<>();
for (Map.Entry<String, Object> entry : params.entrySet()) {
needVerify.put(entry.getKey(), String.valueOf(entry.getValue()));
}
List<Map.Entry<String, String>> entryList = new ArrayList<>(needVerify.entrySet());
//排序
Collections.sort(entryList, (o1, o2) -> o1.getKey().compareTo(o2.getKey()));
StringBuilder buffer = new StringBuilder();
for (Map.Entry<String, String> entry : entryList) {
buffer.append(entry.getKey()).append(entry.getValue());
}
logger.info("sha1 签名参数:{}", buffer.toString());
return SHA.encodeBySHA(buffer.toString());
}
2.2、请求服务
请求地址: /v2/xxxx/xxxx
服务协议: HTTP/(POST or GET)
Content-Type: application/x-www-form-urlencoded
请求参数:
参数 | 是否必传 | 备注 |
---|---|---|
client_id | 是 | 曹操申请的client_id |
sign | 是 | 参数加签之后结果 |
timestamp | 是 | 时间戳 毫秒 (过期为5分钟) |
其他业务参数 |
2.3、返回结果:
参数 | 必有 | 备注 |
---|---|---|
code | 是 | success code:200 |
success | 是 | 是否成功 |
msg | 否 | 提示信息 |
data | 否 | 结果消息体 |