Commit 0a28faf7808b7995c13fff64e718eb61a960f20a

Authored by baishou
1 parent 241d25d8
Exists in master

获取Token代码整合,加入刷新Token的方法

springboot/src/main/java/com/sincre/springboot/common/Encript.java
@@ -37,7 +37,6 @@ public class Encript { @@ -37,7 +37,6 @@ public class Encript {
37 sha256_HMAC.init(secret_key); 37 sha256_HMAC.init(secret_key);
38 byte[] bytes = sha256_HMAC.doFinal(message.getBytes()); 38 byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
39 hash = byteArrayToHexString(bytes); 39 hash = byteArrayToHexString(bytes);
40 - System.out.println(hash);  
41 } catch (Exception e) { 40 } catch (Exception e) {
42 System.out.println("Error HmacSHA256 ===========" + e.getMessage()); 41 System.out.println("Error HmacSHA256 ===========" + e.getMessage());
43 } 42 }
springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java
@@ -2,12 +2,14 @@ package com.sincre.springboot.controller; @@ -2,12 +2,14 @@ package com.sincre.springboot.controller;
2 2
3 import com.fasterxml.jackson.core.type.TypeReference; 3 import com.fasterxml.jackson.core.type.TypeReference;
4 import com.fasterxml.jackson.databind.ObjectMapper; 4 import com.fasterxml.jackson.databind.ObjectMapper;
5 -import com.sincre.springboot.ApiModel.*; 5 +import com.sincre.springboot.ApiModel.DeviceToken;
  6 +import com.sincre.springboot.ApiModel.TuYaDevicesList;
  7 +import com.sincre.springboot.ApiModel.TuYaResResult;
  8 +import com.sincre.springboot.ApiModel.UserInfo;
6 import com.sincre.springboot.ApiPlatform.TuYaCloudService; 9 import com.sincre.springboot.ApiPlatform.TuYaCloudService;
7 -import com.sincre.springboot.common.EhcacheUtil;  
8 import com.sincre.springboot.utils.ApiHelper; 10 import com.sincre.springboot.utils.ApiHelper;
  11 +import com.sincre.springboot.utils.CacheHelper;
9 import io.swagger.annotations.Api; 12 import io.swagger.annotations.Api;
10 -import org.apache.commons.lang3.StringUtils;  
11 import org.springframework.web.bind.annotation.*; 13 import org.springframework.web.bind.annotation.*;
12 14
13 import java.util.HashMap; 15 import java.util.HashMap;
@@ -18,42 +20,12 @@ import java.util.Map; @@ -18,42 +20,12 @@ import java.util.Map;
18 @Api(value = "涂鸦云服务API调用") 20 @Api(value = "涂鸦云服务API调用")
19 public class TuYaYunController { 21 public class TuYaYunController {
20 22
21 - @GetMapping("GetToken")  
22 - public TuYaResResult getTuYaToken(){  
23 -  
24 - String apiUrl = "/v1.0/token?grant_type=1";  
25 - Long t = System.currentTimeMillis();  
26 - //Token获取前的签名  
27 - String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+t,TuYaCloudService.Secret);  
28 - Map<String,String> map = new HashMap();  
29 - map.put("client_id", TuYaCloudService.ClientId);  
30 - map.put("sign",sign);  
31 - map.put("sign_method",TuYaCloudService.Sign_method);  
32 - map.put("t",t.toString());  
33 - String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);  
34 -  
35 - TuYaResResult<TuYaResTokenObj> resResult = new TuYaResResult<>();  
36 - try{  
37 - ObjectMapper objectMapper = new ObjectMapper();  
38 - resResult = objectMapper.readValue(result,new TypeReference<TuYaResResult<TuYaResTokenObj>>(){});  
39 -  
40 - String access_Token = resResult.getResult().getAccess_token(); //存储第一次获取的Token  
41 - EhcacheUtil ehcacheUtil = new EhcacheUtil();  
42 - ehcacheUtil.setex("TuYa_Token",access_Token,60);  
43 - } catch(Exception ex){  
44 - System.out.println(ex.getMessage());  
45 - }  
46 -  
47 - return resResult;  
48 - }  
49 -  
50 @GetMapping("GetDevicesInfo") 23 @GetMapping("GetDevicesInfo")
51 public TuYaResResult getTuYaDevicesInfo(){ 24 public TuYaResResult getTuYaDevicesInfo(){
52 25
53 - EhcacheUtil ehcacheUtil = new EhcacheUtil();  
54 String apiUrl = "/v1.0/devices?device_ids="; 26 String apiUrl = "/v1.0/devices?device_ids=";
55 Long t = System.currentTimeMillis(); 27 Long t = System.currentTimeMillis();
56 - String access_Token = ehcacheUtil.get("TuYa_Token"); 28 + String access_Token = CacheHelper.getTuYaToken();
57 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); 29 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
58 Map<String,String> map = new HashMap(); 30 Map<String,String> map = new HashMap();
59 map.put("client_id", TuYaCloudService.ClientId); 31 map.put("client_id", TuYaCloudService.ClientId);
@@ -68,7 +40,6 @@ public class TuYaYunController { @@ -68,7 +40,6 @@ public class TuYaYunController {
68 ObjectMapper objectMapper = new ObjectMapper(); 40 ObjectMapper objectMapper = new ObjectMapper();
69 TypeReference<TuYaResResult<TuYaDevicesList>> reference = new TypeReference<TuYaResResult<TuYaDevicesList>>(){}; 41 TypeReference<TuYaResResult<TuYaDevicesList>> reference = new TypeReference<TuYaResResult<TuYaDevicesList>>(){};
70 resResult = objectMapper.readValue(result,reference); 42 resResult = objectMapper.readValue(result,reference);
71 - System.out.println(resResult.getResult().total);  
72 } catch(Exception ex){ 43 } catch(Exception ex){
73 System.out.println(ex.getMessage()); 44 System.out.println(ex.getMessage());
74 } 45 }
@@ -88,12 +59,9 @@ public class TuYaYunController { @@ -88,12 +59,9 @@ public class TuYaYunController {
88 @GetMapping("{AppId}/GetTuYaAPPUser") 59 @GetMapping("{AppId}/GetTuYaAPPUser")
89 public String getTuYaAPPUser(@PathVariable("AppId") String AppId, @RequestParam int pageIndex, @RequestParam int pageSize){ 60 public String getTuYaAPPUser(@PathVariable("AppId") String AppId, @RequestParam int pageIndex, @RequestParam int pageSize){
90 61
91 - EhcacheUtil ehcacheUtil = new EhcacheUtil();  
92 -  
93 String apiUrl = String.format("/v1.0/apps/%s/users?page_no=%d&page_size=%d",AppId,pageIndex,pageSize);//iotshunzhi 62 String apiUrl = String.format("/v1.0/apps/%s/users?page_no=%d&page_size=%d",AppId,pageIndex,pageSize);//iotshunzhi
94 Long t = System.currentTimeMillis(); 63 Long t = System.currentTimeMillis();
95 - String access_Token = ehcacheUtil.get("TuYa_Token");  
96 - System.out.println(access_Token); 64 + String access_Token = CacheHelper.getTuYaToken();
97 //Token获取后的签名 65 //Token获取后的签名
98 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); 66 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
99 Map<String,String> headMap = new HashMap(); 67 Map<String,String> headMap = new HashMap();
@@ -112,11 +80,9 @@ public class TuYaYunController { @@ -112,11 +80,9 @@ public class TuYaYunController {
112 @PostMapping("{AppId}/AddTuYaAPPUser") 80 @PostMapping("{AppId}/AddTuYaAPPUser")
113 public String addTuYaAPPUser(@PathVariable("AppId") String AppId,@RequestBody UserInfo userInfo){ 81 public String addTuYaAPPUser(@PathVariable("AppId") String AppId,@RequestBody UserInfo userInfo){
114 82
115 - EhcacheUtil ehcacheUtil = new EhcacheUtil();  
116 -  
117 String apiUrl = String.format("/v1.0/apps/%s/user",AppId);//应用标识iotshunzhi 83 String apiUrl = String.format("/v1.0/apps/%s/user",AppId);//应用标识iotshunzhi
118 Long t = System.currentTimeMillis(); 84 Long t = System.currentTimeMillis();
119 - String access_Token = ehcacheUtil.get("TuYa_Token"); 85 + String access_Token = CacheHelper.getTuYaToken();
120 //Token获取后的签名 86 //Token获取后的签名
121 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); 87 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
122 Map<String,String> headMap = new HashMap(); 88 Map<String,String> headMap = new HashMap();
@@ -131,7 +97,6 @@ public class TuYaYunController { @@ -131,7 +97,6 @@ public class TuYaYunController {
131 String jsonResult = ""; 97 String jsonResult = "";
132 try { 98 try {
133 jsonResult = objectMapper.writeValueAsString(userInfo); 99 jsonResult = objectMapper.writeValueAsString(userInfo);
134 - System.out.println(jsonResult);  
135 }catch (com.fasterxml.jackson.core.JsonProcessingException ex){ 100 }catch (com.fasterxml.jackson.core.JsonProcessingException ex){
136 ex.printStackTrace(); 101 ex.printStackTrace();
137 } 102 }
@@ -144,20 +109,41 @@ public class TuYaYunController { @@ -144,20 +109,41 @@ public class TuYaYunController {
144 } 109 }
145 110
146 /** 111 /**
  112 + * 根据用户ID来获取用户账号下的所有设备
  113 + * @param uid
  114 + * @return
  115 + */
  116 + @GetMapping("{uid}/GetDevicesByUid")
  117 + public String getDevicesByUid(@PathVariable("uid") String uid){
  118 +
  119 + String apiUrl = String.format("/v1.0/users/%s/devices",uid);
  120 + Long t = System.currentTimeMillis();
  121 + String access_Token = CacheHelper.getTuYaToken();
  122 + //Token获取后的签名
  123 + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
  124 + Map<String,String> map = new HashMap();
  125 + map.put("client_id", TuYaCloudService.ClientId);
  126 + map.put("access_token",access_Token);
  127 + map.put("sign",sign);
  128 + map.put("sign_method",TuYaCloudService.Sign_method);
  129 + map.put("t",t.toString());
  130 +
  131 + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);
  132 +
  133 + return result;
  134 + }
  135 + /**
147 * 生成配网的Token 136 * 生成配网的Token
148 * @return 137 * @return
149 */ 138 */
150 @GetMapping("AddDevicesToken") 139 @GetMapping("AddDevicesToken")
151 public String addDevicesToken(@RequestParam String UId){ 140 public String addDevicesToken(@RequestParam String UId){
152 141
153 - EhcacheUtil ehcacheUtil = new EhcacheUtil();  
154 -  
155 String apiUrl = String.format("/v1.0/devices/token"); 142 String apiUrl = String.format("/v1.0/devices/token");
156 Long t = System.currentTimeMillis(); 143 Long t = System.currentTimeMillis();
157 - String access_Token = ehcacheUtil.get("TuYa_Token"); 144 + String access_Token = CacheHelper.getTuYaToken();
158 //Token获取后的签名 145 //Token获取后的签名
159 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); 146 String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
160 - System.out.println("签名"+sign);  
161 Map<String,String> map = new HashMap(); 147 Map<String,String> map = new HashMap();
162 map.put("client_id", TuYaCloudService.ClientId); 148 map.put("client_id", TuYaCloudService.ClientId);
163 map.put("access_token",access_Token); 149 map.put("access_token",access_Token);
@@ -165,10 +151,6 @@ public class TuYaYunController { @@ -165,10 +151,6 @@ public class TuYaYunController {
165 map.put("sign_method",TuYaCloudService.Sign_method); 151 map.put("sign_method",TuYaCloudService.Sign_method);
166 map.put("t",t.toString()); 152 map.put("t",t.toString());
167 153
168 - if(StringUtils.isNotBlank(UId)){  
169 - UId = "ay1557735327941UvZAG";  
170 - }  
171 -  
172 ObjectMapper objectMapper = new ObjectMapper(); 154 ObjectMapper objectMapper = new ObjectMapper();
173 DeviceToken deviceToken = new DeviceToken(); 155 DeviceToken deviceToken = new DeviceToken();
174 deviceToken.setUid(UId); 156 deviceToken.setUid(UId);
@@ -177,7 +159,6 @@ public class TuYaYunController { @@ -177,7 +159,6 @@ public class TuYaYunController {
177 String jsonResult = ""; 159 String jsonResult = "";
178 try { 160 try {
179 jsonResult = objectMapper.writeValueAsString(deviceToken); 161 jsonResult = objectMapper.writeValueAsString(deviceToken);
180 - System.out.println(jsonResult);  
181 }catch (com.fasterxml.jackson.core.JsonProcessingException ex){ 162 }catch (com.fasterxml.jackson.core.JsonProcessingException ex){
182 ex.printStackTrace(); 163 ex.printStackTrace();
183 } 164 }
@@ -185,4 +166,24 @@ public class TuYaYunController { @@ -185,4 +166,24 @@ public class TuYaYunController {
185 166
186 return result; 167 return result;
187 } 168 }
  169 +
  170 + @GetMapping("{token}/GetDevicesByToken")
  171 + public String getDevicesByToken(@PathVariable("token") String token){
  172 +
  173 + String apiUrl = String.format("/v1.0/devices/tokens/%s",token);
  174 + Long t = System.currentTimeMillis();
  175 + String access_Token = CacheHelper.getTuYaToken();
  176 + //Token获取后的签名
  177 + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret);
  178 + Map<String,String> map = new HashMap();
  179 + map.put("client_id", TuYaCloudService.ClientId);
  180 + map.put("access_token",access_Token);
  181 + map.put("sign",sign);
  182 + map.put("sign_method",TuYaCloudService.Sign_method);
  183 + map.put("t",t.toString());
  184 +
  185 + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);
  186 +
  187 + return result;
  188 + }
188 } 189 }
springboot/src/main/java/com/sincre/springboot/utils/CacheHelper.java 0 → 100644
@@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
  1 +package com.sincre.springboot.utils;
  2 +
  3 +import com.fasterxml.jackson.core.type.TypeReference;
  4 +import com.fasterxml.jackson.databind.ObjectMapper;
  5 +import com.sincre.springboot.ApiModel.TuYaResResult;
  6 +import com.sincre.springboot.ApiModel.TuYaResTokenObj;
  7 +import com.sincre.springboot.ApiPlatform.TuYaCloudService;
  8 +import com.sincre.springboot.common.EhcacheUtil;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +
  11 +import java.util.HashMap;
  12 +import java.util.Map;
  13 +
  14 +public class CacheHelper {
  15 +
  16 + static EhcacheUtil ehcacheUtil = new EhcacheUtil();
  17 + static String TuYaTokenKey = "TuYa_Token";
  18 + static String TuYaRefreshTokenKey = "TuYa_Re_Token";
  19 + private static void setTuYaToken(){
  20 +
  21 + String apiUrl = "/v1.0/token?grant_type=1";
  22 + Long t = System.currentTimeMillis();
  23 + //Token获取前的签名
  24 + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+t,TuYaCloudService.Secret);
  25 + Map<String,String> map = new HashMap();
  26 + map.put("client_id", TuYaCloudService.ClientId);
  27 + map.put("sign",sign);
  28 + map.put("sign_method",TuYaCloudService.Sign_method);
  29 + map.put("t",t.toString());
  30 + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);
  31 +
  32 + TuYaResResult<TuYaResTokenObj> resResult ;
  33 + try{
  34 + ObjectMapper objectMapper = new ObjectMapper();
  35 + resResult = objectMapper.readValue(result,new TypeReference<TuYaResResult<TuYaResTokenObj>>(){});
  36 +
  37 + String access_Token = resResult.getResult().getAccess_token(); //存储第一次获取的Token
  38 + String refresh_Token = resResult.getResult().getRefresh_token();
  39 + // 第一次缓存数据的时候,不刷新,后期刷新
  40 + if(StringUtils.isNotBlank(ehcacheUtil.get(TuYaTokenKey))){
  41 + TuYaRefresh(resResult.getResult());
  42 + }else {
  43 + ehcacheUtil.setex(TuYaTokenKey, access_Token, resResult.getResult().getExpire_time()); // 储存二个小时
  44 + ehcacheUtil.setex(TuYaRefreshTokenKey,refresh_Token,60 * 60); // 储存一个小时
  45 + System.out.println("获取Token:"+ access_Token);
  46 + System.out.println("刷新Token:"+ refresh_Token);
  47 +
  48 + }
  49 + } catch(Exception ex){
  50 + System.out.println(ex.getMessage());
  51 + }
  52 + }
  53 +
  54 + /**
  55 + * 获取涂鸦Api 访问的Token
  56 + * @return
  57 + */
  58 + public static String getTuYaToken(){
  59 +
  60 + if(StringUtils.isBlank(ehcacheUtil.get(TuYaRefreshTokenKey))){
  61 + setTuYaToken();
  62 + }
  63 +
  64 + return ehcacheUtil.get(TuYaTokenKey);
  65 + }
  66 +
  67 + private static void TuYaRefresh(TuYaResTokenObj tuYaResTokenObj){
  68 +
  69 + String apiUrl = "/v1.0/token/"+tuYaResTokenObj.getRefresh_token();
  70 + Long t = System.currentTimeMillis();
  71 +
  72 + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+t,TuYaCloudService.Secret);
  73 + Map<String,String> map = new HashMap();
  74 + map.put("client_id", TuYaCloudService.ClientId);
  75 + map.put("sign",sign);
  76 + map.put("sign_method",TuYaCloudService.Sign_method);
  77 + map.put("t",t.toString());
  78 + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);
  79 +
  80 + TuYaResResult<TuYaResTokenObj> resResult;
  81 + try{
  82 + ObjectMapper objectMapper = new ObjectMapper();
  83 + TypeReference<TuYaResResult<TuYaResTokenObj>> reference = new TypeReference<TuYaResResult<TuYaResTokenObj>>(){};
  84 + resResult = objectMapper.readValue(result,reference);
  85 + String re_access_Token = resResult.getResult().getAccess_token(); //重新刷新后获取的Token
  86 + String refresh_Token = resResult.getResult().getRefresh_token();
  87 + System.out.println("刷新后的Token:"+re_access_Token);
  88 + ehcacheUtil.setex(TuYaTokenKey,re_access_Token,resResult.getResult().getExpire_time()); // 储存两个小时
  89 + ehcacheUtil.setex(TuYaRefreshTokenKey,refresh_Token,60 * 60); //储存一个小时
  90 + } catch(Exception ex){
  91 + System.out.println(ex.getMessage());
  92 + }
  93 + }
  94 +}