HC 物联网系统对接协议
说明
代码:https://gitee.com/java110/MicroCommunityThings
官网:http://www.homecommunity.cn/
开发前必读
协议规范设计
第三方调用开放接口时,需使用 https 协议、Json 数据格式、UTF8 编码
注:建议封装统一的 API 请求接口,便于进行 token 容错处理,以及相关日志打
印等
请求参数:默认使用 json 方式(access_token 必须传至http header 中)
通用响应报文格式:
{
"code":0,
"msg":"返回码描述内容",
"data": {
}
}
通用响应报文字段说明:
名称 | 类型 | 描述 |
---|---|---|
code | Integer | 返回码 |
msg | String | 对返回码的文本描述内容 |
data | Object | 返回数据(部分接口无返回数据) |
通用错误码说明
状态 | 描述 |
---|---|
0 | 成功 |
-1 | 失败 |
授权认证-获取access_token
根据 appId+appSecret 换取 access_token。access_token 是平台全局接口的唯一凭证,调用其他接口均需传 access_token
参数到Http header 中 如 access_token 12312312。
请求方式:GET
请求地址: /extApi/auth/getAccessToken?appId=APPID&appSecret=APPSECRET
注:此处标注大写的单词 APPID 和 APPSECRET,为需要替换的变量,根据实际获取值更新。其它接口也采用相同的标注,不
再说明。
请求参数:
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
appId | String | 是 | 2fe1465ce30f4bc1b71978d42349c6 | APPID |
appSecret | String | 是 | 2fe1465ce30f4bc1b71978d42349c2 | APP 秘钥 |
响应参数:
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
access_token | String | 2fe1465ce30f4bc1b71978d42349c6 | accessToken 访问凭据 |
expires_in | Integer | 7200 | 过期时间为 7200 秒,即 2 小时 |
响应示例:
{
"code":0,
"msg":"成功",
"data":{
"access_token": "225262e8b548b77f76f018d218291647",
"expires_in": 7200
}
}
参考代码:
//@Java110Synchronized 为分布式全局锁 根据 实际替换为自己的全局锁代码
@Java110Synchronized(value = "hc_get_token")
public static String get(RestTemplate restTemplate,boolean refreshAccessToken) {
//先从缓存中获取是否存在access_token
String token = CommonCache.getValue(IotConstant.HC_TOKEN);
if (!StringUtil.isEmpty(token) && !refreshAccessToken) {
return token;
}
HttpHeaders headers = new HttpHeaders();
HttpEntity httpEntity = new HttpEntity(headers);
String url = IotConstant.getUrl(IotConstant.GET_TOKEN_URL.replace("APP_ID", IotConstant.getAppId()).replace("APP_SECRET", IotConstant.getAppSecret()));
ResponseEntity<String> tokenRes = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
if (tokenRes.getStatusCode() != HttpStatus.OK) {
throw new IllegalArgumentException("获取token失败" + tokenRes.getBody());
}
JSONObject tokenObj = JSONObject.parseObject(tokenRes.getBody());
if (!tokenObj.containsKey("code") || ResultVo.CODE_OK != tokenObj.getInteger("code")) {
throw new IllegalArgumentException