Commit 241d25d8ae6e34f412b03d774642ab6e6e013144
1 parent
598cc868
Exists in
master
涂鸦云服务接口调用
Showing
11 changed files
with
970 additions
and
6 deletions
Show diff stats
springboot/pom.xml
... | ... | @@ -23,12 +23,12 @@ |
23 | 23 | <dependency> |
24 | 24 | <groupId>org.springframework.boot</groupId> |
25 | 25 | <artifactId>spring-boot-starter-web</artifactId> |
26 | - <exclusions> | |
27 | - <exclusion> | |
28 | - <groupId>org.springframework.boot</groupId> | |
29 | - <artifactId>spring-boot-starter-tomcat</artifactId> | |
30 | - </exclusion> | |
31 | - </exclusions> | |
26 | + <!--<exclusions>--> | |
27 | + <!--<exclusion>--> | |
28 | + <!--<groupId>org.springframework.boot</groupId>--> | |
29 | + <!--<artifactId>spring-boot-starter-tomcat</artifactId>--> | |
30 | + <!--</exclusion>--> | |
31 | + <!--</exclusions>--> | |
32 | 32 | </dependency> |
33 | 33 | |
34 | 34 | <dependency> |
... | ... | @@ -38,6 +38,12 @@ |
38 | 38 | |
39 | 39 | <dependency> |
40 | 40 | <groupId>org.springframework.boot</groupId> |
41 | + <artifactId>spring-boot-starter-tomcat</artifactId> | |
42 | + <scope>provided</scope> | |
43 | + </dependency> | |
44 | + | |
45 | + <dependency> | |
46 | + <groupId>org.springframework.boot</groupId> | |
41 | 47 | <artifactId>spring-boot-starter-test</artifactId> |
42 | 48 | <scope>test</scope> |
43 | 49 | </dependency> |
... | ... | @@ -70,6 +76,42 @@ |
70 | 76 | <artifactId>mybatis-spring-boot-starter</artifactId> |
71 | 77 | <version>2.0.0</version> |
72 | 78 | </dependency> |
79 | + | |
80 | + <!--模拟http请求包--> | |
81 | + <dependency> | |
82 | + <groupId>org.apache.httpcomponents</groupId> | |
83 | + <artifactId>httpclient</artifactId> | |
84 | + <version>4.5.3</version> | |
85 | + </dependency> | |
86 | + | |
87 | + <!--Json格式的字符串序列化和反序列化 jackson--> | |
88 | + <dependency> | |
89 | + <groupId>com.fasterxml.jackson.core</groupId> | |
90 | + <artifactId>jackson-databind</artifactId> | |
91 | + <version>2.9.8</version> | |
92 | + </dependency> | |
93 | + <!--Json格式的字符串序列化和反序列化 fastjson--> | |
94 | + <dependency> | |
95 | + <groupId>com.alibaba</groupId> | |
96 | + <artifactId>fastjson</artifactId> | |
97 | + <version>1.2.58</version> | |
98 | + </dependency> | |
99 | + <!--开启 cache 缓存--> | |
100 | + <dependency> | |
101 | + <groupId>org.springframework.boot</groupId> | |
102 | + <artifactId>spring-boot-starter-cache</artifactId> | |
103 | + </dependency> | |
104 | + <!-- ehcache 缓存 --> | |
105 | + <dependency> | |
106 | + <groupId>net.sf.ehcache</groupId> | |
107 | + <artifactId>ehcache</artifactId> | |
108 | + </dependency> | |
109 | + | |
110 | + <dependency> | |
111 | + <groupId>org.apache.commons</groupId> | |
112 | + <artifactId>commons-lang3</artifactId> | |
113 | + <version>3.1</version> | |
114 | + </dependency> | |
73 | 115 | </dependencies> |
74 | 116 | |
75 | 117 | <build> | ... | ... |
springboot/src/main/java/com/sincre/springboot/ApiModel/DeviceToken.java
0 → 100644
... | ... | @@ -0,0 +1,57 @@ |
1 | +package com.sincre.springboot.ApiModel; | |
2 | + | |
3 | +import com.fasterxml.jackson.annotation.JsonInclude; | |
4 | + | |
5 | +@JsonInclude(JsonInclude.Include.NON_EMPTY) | |
6 | +public class DeviceToken { | |
7 | + | |
8 | + private String uid; //用户唯一标识 是 | |
9 | + | |
10 | + private String timeZoneId; //用户所在时区id,州/省份(Asia/Shanghai) 是 | |
11 | + | |
12 | + public String getUid() { | |
13 | + return uid; | |
14 | + } | |
15 | + | |
16 | + public void setUid(String uid) { | |
17 | + this.uid = uid; | |
18 | + } | |
19 | + | |
20 | + public String getTimeZoneId() { | |
21 | + return timeZoneId; | |
22 | + } | |
23 | + | |
24 | + public void setTimeZoneId(String timeZoneId) { | |
25 | + this.timeZoneId = timeZoneId; | |
26 | + } | |
27 | + | |
28 | + public String getLon() { | |
29 | + return lon; | |
30 | + } | |
31 | + | |
32 | + public void setLon(String lon) { | |
33 | + this.lon = lon; | |
34 | + } | |
35 | + | |
36 | + public String getLat() { | |
37 | + return lat; | |
38 | + } | |
39 | + | |
40 | + public void setLat(String lat) { | |
41 | + this.lat = lat; | |
42 | + } | |
43 | + | |
44 | + public String getLang() { | |
45 | + return lang; | |
46 | + } | |
47 | + | |
48 | + public void setLang(String lang) { | |
49 | + this.lang = lang; | |
50 | + } | |
51 | + | |
52 | + private String lon; //经度 否 | |
53 | + | |
54 | + private String lat; //纬度 否 | |
55 | + | |
56 | + private String lang; //系统语言,zh,eu等,默认zh 否 | |
57 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java
0 → 100644
springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaResResult.java
0 → 100644
... | ... | @@ -0,0 +1,53 @@ |
1 | +package com.sincre.springboot.ApiModel; | |
2 | + | |
3 | +import com.fasterxml.jackson.annotation.JsonInclude; | |
4 | + | |
5 | +@JsonInclude(JsonInclude.Include.NON_EMPTY) | |
6 | +public class TuYaResResult<T> { | |
7 | + | |
8 | + public String getSuccess() { | |
9 | + return success; | |
10 | + } | |
11 | + | |
12 | + public void setSuccess(String success) { | |
13 | + this.success = success; | |
14 | + } | |
15 | + | |
16 | + public T getResult() { | |
17 | + return result; | |
18 | + } | |
19 | + | |
20 | + public void setResult(T result) { | |
21 | + this.result = result; | |
22 | + } | |
23 | + | |
24 | + public String getCode() { | |
25 | + return code; | |
26 | + } | |
27 | + | |
28 | + public void setCode(String code) { | |
29 | + this.code = code; | |
30 | + } | |
31 | + | |
32 | + public String getMsg() { | |
33 | + return msg; | |
34 | + } | |
35 | + | |
36 | + public void setMsg(String msg) { | |
37 | + this.msg = msg; | |
38 | + } | |
39 | + | |
40 | + public Long getT() { | |
41 | + return t; | |
42 | + } | |
43 | + | |
44 | + public void setT(Long t) { | |
45 | + this.t = t; | |
46 | + } | |
47 | + | |
48 | + private String success; | |
49 | + private String code; | |
50 | + private String msg; | |
51 | + private Long t; | |
52 | + private T result; | |
53 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaResTokenObj.java
0 → 100644
... | ... | @@ -0,0 +1,43 @@ |
1 | +package com.sincre.springboot.ApiModel; | |
2 | + | |
3 | +public class TuYaResTokenObj { | |
4 | + | |
5 | + private String uid; | |
6 | + | |
7 | + public String getUid() { | |
8 | + return uid; | |
9 | + } | |
10 | + | |
11 | + public void setUid(String uid) { | |
12 | + this.uid = uid; | |
13 | + } | |
14 | + | |
15 | + public String getAccess_token() { | |
16 | + return access_token; | |
17 | + } | |
18 | + | |
19 | + public void setAccess_token(String access_token) { | |
20 | + this.access_token = access_token; | |
21 | + } | |
22 | + | |
23 | + public int getExpire_time() { | |
24 | + return expire_time; | |
25 | + } | |
26 | + | |
27 | + public void setExpire_time(int expire_time) { | |
28 | + this.expire_time = expire_time; | |
29 | + } | |
30 | + | |
31 | + public String getRefresh_token() { | |
32 | + return refresh_token; | |
33 | + } | |
34 | + | |
35 | + public void setRefresh_token(String refresh_token) { | |
36 | + this.refresh_token = refresh_token; | |
37 | + } | |
38 | + | |
39 | + private String access_token; | |
40 | + | |
41 | + private int expire_time; | |
42 | + private String refresh_token; | |
43 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/ApiModel/UserInfo.java
0 → 100644
... | ... | @@ -0,0 +1,68 @@ |
1 | +package com.sincre.springboot.ApiModel; | |
2 | + | |
3 | +import com.fasterxml.jackson.annotation.JsonInclude; | |
4 | + | |
5 | +@JsonInclude(JsonInclude.Include.NON_EMPTY) | |
6 | +public class UserInfo { | |
7 | + | |
8 | + /** | |
9 | + * 国家码 必填项 | |
10 | + * */ | |
11 | + private String country_code; | |
12 | + /** | |
13 | + * 用户名,业务方md5加密 是 | |
14 | + */ | |
15 | + private String username; | |
16 | + /** | |
17 | + * 用户密码,业务方md5加密 是 | |
18 | + * */ | |
19 | + private String password; | |
20 | + /** | |
21 | + * 昵称 否 | |
22 | + */ | |
23 | + private String nick_name; | |
24 | + /** | |
25 | + * 用户名类型,1:mobile,2:email,3:username,默认:3 否 | |
26 | + */ | |
27 | + private String username_type; | |
28 | + | |
29 | + public String getCountry_code() { | |
30 | + return country_code; | |
31 | + } | |
32 | + | |
33 | + public void setCountry_code(String country_code) { | |
34 | + this.country_code = country_code; | |
35 | + } | |
36 | + | |
37 | + public String getUsername() { | |
38 | + return username; | |
39 | + } | |
40 | + | |
41 | + public void setUsername(String username) { | |
42 | + this.username = username; | |
43 | + } | |
44 | + | |
45 | + public String getPassword() { | |
46 | + return password; | |
47 | + } | |
48 | + | |
49 | + public void setPassword(String password) { | |
50 | + this.password = password; | |
51 | + } | |
52 | + | |
53 | + public String getNick_name() { | |
54 | + return nick_name; | |
55 | + } | |
56 | + | |
57 | + public void setNick_name(String nick_name) { | |
58 | + this.nick_name = nick_name; | |
59 | + } | |
60 | + | |
61 | + public String getUsername_type() { | |
62 | + return username_type; | |
63 | + } | |
64 | + | |
65 | + public void setUsername_type(String username_type) { | |
66 | + this.username_type = username_type; | |
67 | + } | |
68 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/ApiPlatform/TuYaCloudService.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.sincre.springboot.ApiPlatform; | |
2 | + | |
3 | +import com.sincre.springboot.common.Encript; | |
4 | + | |
5 | +public class TuYaCloudService { | |
6 | + public static String TuYaOpenUrl = "https://openapi.TuYacn.com"; | |
7 | + //公司的账号 | |
8 | + public static String ClientId = "thddfrm97kydyq9wrc8u"; | |
9 | + public static String Secret = "tqcuypeytayths9pudcn937wfupugc3t"; | |
10 | + public static String Sign_method = "HMAC-SHA256"; | |
11 | + | |
12 | + /** | |
13 | + * 获取平台访问的签名 | |
14 | + * @param message 消息 | |
15 | + * @param secret 秘钥 | |
16 | + * @return | |
17 | + */ | |
18 | + public static String createSign(String message, String secret){ | |
19 | + | |
20 | + return Encript.sha256_HMAC(message,secret).toUpperCase(); | |
21 | + } | |
22 | +} | |
23 | + | ... | ... |
springboot/src/main/java/com/sincre/springboot/common/EhcacheUtil.java
0 → 100644
... | ... | @@ -0,0 +1,230 @@ |
1 | +package com.sincre.springboot.common; | |
2 | + | |
3 | +import com.alibaba.fastjson.JSON; | |
4 | +import net.sf.ehcache.CacheException; | |
5 | +import net.sf.ehcache.CacheManager; | |
6 | +import net.sf.ehcache.Ehcache; | |
7 | +import net.sf.ehcache.Element; | |
8 | + | |
9 | +import java.io.IOException; | |
10 | +import java.io.InputStream; | |
11 | + | |
12 | +public class EhcacheUtil { | |
13 | + | |
14 | + /** | |
15 | + * CacheManage是Ehcache框架的核心接口和类,负责管理一个或多个Cache对象 | |
16 | + */ | |
17 | + private static final CacheManager CACHE_MANAGER = createCacheManager(); | |
18 | + | |
19 | + /** | |
20 | + * 描 述: 根据ehcache.xml,创建CacheManager生产器 | |
21 | + * 参 数: | |
22 | + * 返回值: net.sf.ehcache.CacheManager | |
23 | + * 创建时间: 2018/5/23 | |
24 | + */ | |
25 | + private static CacheManager createCacheManager() { | |
26 | + CacheManager cacheManager; | |
27 | + InputStream input = EhcacheUtil.class.getResourceAsStream("/ehcache.xml"); | |
28 | + | |
29 | + if (input != null) { | |
30 | + try { | |
31 | + cacheManager = CacheManager.create(input); | |
32 | + } catch (Throwable t) { | |
33 | + cacheManager = CacheManager.create(); | |
34 | + } finally { | |
35 | + try { | |
36 | + input.close(); | |
37 | + } catch (IOException e) { | |
38 | + } | |
39 | + } | |
40 | + } else { | |
41 | + cacheManager = CacheManager.create(); | |
42 | + } | |
43 | + | |
44 | + return cacheManager; | |
45 | + } | |
46 | + | |
47 | + /** | |
48 | + * The cache id. 缓存所在的位置标识 | |
49 | + */ | |
50 | + private final String id; | |
51 | + | |
52 | + /** | |
53 | + * 创建EhCache | |
54 | + */ | |
55 | + public EhcacheUtil(){ | |
56 | + this.id = this.getClass().getName(); | |
57 | + if (!CACHE_MANAGER.cacheExists(this.id)) { | |
58 | + CACHE_MANAGER.addCache(this.id); | |
59 | + } | |
60 | + } | |
61 | + | |
62 | + /** | |
63 | + * 得到当前缓存 | |
64 | + * @return | |
65 | + */ | |
66 | + private Ehcache getCache() { | |
67 | + return CACHE_MANAGER.getCache(this.id); | |
68 | + } | |
69 | + | |
70 | + /** | |
71 | + * 写入EhCache,当前实例对象T,同时转成Json格式 | |
72 | + * @param key | |
73 | + * @param value | |
74 | + * @param <T> | |
75 | + */ | |
76 | + public <T> void set(String key, T value){ | |
77 | + setObject(key, JSON.toJSONString(value)); | |
78 | + } | |
79 | + | |
80 | + /** | |
81 | + * 写入EhCache,字符串对象 | |
82 | + * @param key | |
83 | + * @param value | |
84 | + */ | |
85 | + public void set(String key, String value){ | |
86 | + setObject(key,value); | |
87 | + } | |
88 | + | |
89 | + /** | |
90 | + * 写入EhCache,当前实例对象T, 同时转成Json格式,并设置失效时间 | |
91 | + * @param key | |
92 | + * @param value | |
93 | + * @param time | |
94 | + * @param <T> | |
95 | + */ | |
96 | + public <T> void setex(String key, T value, int time){ | |
97 | + setexObject(key, JSON.toJSONString(value),time); | |
98 | + } | |
99 | + | |
100 | + /** | |
101 | + * 写入EhCache,字符串对象,并设置失效时间 | |
102 | + * @param key | |
103 | + * @param value | |
104 | + * @param time | |
105 | + */ | |
106 | + public void setex(String key, String value, int time){ | |
107 | + setexObject(key,value,time); | |
108 | + } | |
109 | + | |
110 | + /** | |
111 | + * 存入EhCache缓存 | |
112 | + * @param key | |
113 | + * @param value | |
114 | + */ | |
115 | + public void setObject(String key, Object value) { | |
116 | + try { | |
117 | + this.getCache().put(new Element(key, value)); | |
118 | + } catch (Throwable t) { | |
119 | + throw new CacheException(t.getMessage(),t); | |
120 | + } | |
121 | + } | |
122 | + | |
123 | + /** | |
124 | + * 存入EhCache缓存,并设置失效时间 | |
125 | + * @param key | |
126 | + * @param value | |
127 | + * @param time | |
128 | + */ | |
129 | + public void setexObject(String key, Object value, int time) { | |
130 | + Element element = new Element(key, value); | |
131 | + element.setTimeToLive(time); | |
132 | + try { | |
133 | + this.getCache().put(element); | |
134 | + } catch (Throwable t) { | |
135 | + throw new CacheException(t.getMessage(),t); | |
136 | + } | |
137 | + } | |
138 | + | |
139 | + /** | |
140 | + * 获取EhCache对象,字符串对象 | |
141 | + * @param key | |
142 | + * @return | |
143 | + */ | |
144 | + public String get(String key){ | |
145 | + Object value = getObject(key); | |
146 | + return value == null ? "" : value.toString(); | |
147 | + } | |
148 | + | |
149 | + /** | |
150 | + * 获取EhCache对象,当前实例对象T | |
151 | + * @param key | |
152 | + * @param clazz | |
153 | + * @param <T> | |
154 | + * @return | |
155 | + */ | |
156 | + public <T> T get(String key, Class<T> clazz){ | |
157 | + Object obj = getObject(key); | |
158 | + if(obj == null){ | |
159 | + return null; | |
160 | + } | |
161 | + return JSON.parseObject(getObject(key).toString(),clazz); | |
162 | + } | |
163 | + | |
164 | + /** | |
165 | + * 根据Key获取缓存对象 | |
166 | + * @param key | |
167 | + * @return | |
168 | + */ | |
169 | + public Object getObject(String key) { | |
170 | + try { | |
171 | + Element cachedElement = this.getCache().get(key); | |
172 | + if (cachedElement == null) { | |
173 | + return null; | |
174 | + } | |
175 | + return cachedElement.getObjectValue(); | |
176 | + } catch (Exception t) { | |
177 | + throw new CacheException(t.getMessage(),t); | |
178 | + } | |
179 | + } | |
180 | + | |
181 | + /** | |
182 | + * 删除当前Cache的key | |
183 | + * @param key | |
184 | + */ | |
185 | + public void remove(String key) { | |
186 | + try { | |
187 | + this.getCache().remove(key); | |
188 | + } catch (Throwable t) { | |
189 | + throw new CacheException(t.getMessage(),t); | |
190 | + } | |
191 | + } | |
192 | + | |
193 | + /** | |
194 | + * 获取当前Cache的数目 | |
195 | + * @return | |
196 | + */ | |
197 | + public Long dbSize() { | |
198 | + try { | |
199 | + return Long.valueOf(this.getCache().getSize()); | |
200 | + } catch (Throwable t) { | |
201 | + throw new CacheException(t.getMessage(),t); | |
202 | + } | |
203 | + } | |
204 | + | |
205 | + /** | |
206 | + * 清空当前Cache的所有缓存 | |
207 | + */ | |
208 | + public void flushDB() { | |
209 | + this.getCache().removeAll(); | |
210 | + } | |
211 | + | |
212 | + | |
213 | + /** | |
214 | + * 重写hashCode | |
215 | + * @return | |
216 | + */ | |
217 | + @Override | |
218 | + public int hashCode() { | |
219 | + return this.id.hashCode(); | |
220 | + } | |
221 | + | |
222 | + /** | |
223 | + * 重写toString | |
224 | + * @return | |
225 | + */ | |
226 | + @Override | |
227 | + public String toString() { | |
228 | + return "EHCache {" + this.id + "}"; | |
229 | + } | |
230 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/common/Encript.java
0 → 100644
... | ... | @@ -0,0 +1,46 @@ |
1 | +package com.sincre.springboot.common; | |
2 | + | |
3 | +import javax.crypto.Mac; | |
4 | +import javax.crypto.spec.SecretKeySpec; | |
5 | + | |
6 | +public class Encript { | |
7 | + | |
8 | + /** | |
9 | + * 将加密后的字节数组转换成字符串(原始64位) | |
10 | + * | |
11 | + * @param b 字节数组 | |
12 | + * @return 字符串 | |
13 | + */ | |
14 | + public static String byteArrayToHexString(byte[] b) { | |
15 | + StringBuilder hs = new StringBuilder(); | |
16 | + String stmp; | |
17 | + for (int n = 0; b!=null && n < b.length; n++) { | |
18 | + stmp = Integer.toHexString(b[n] & 0XFF); | |
19 | + if (stmp.length() == 1) | |
20 | + hs.append('0'); | |
21 | + hs.append(stmp); | |
22 | + } | |
23 | + return hs.toString().toLowerCase(); | |
24 | + } | |
25 | + | |
26 | + /** | |
27 | + * sha256_HMAC加密 | |
28 | + * @param message 消息 | |
29 | + * @param secret 秘钥 | |
30 | + * @return 加密后字符串 | |
31 | + * */ | |
32 | + public static String sha256_HMAC(String message, String secret) { | |
33 | + String hash = ""; | |
34 | + try { | |
35 | + Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); | |
36 | + SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); | |
37 | + sha256_HMAC.init(secret_key); | |
38 | + byte[] bytes = sha256_HMAC.doFinal(message.getBytes()); | |
39 | + hash = byteArrayToHexString(bytes); | |
40 | + System.out.println(hash); | |
41 | + } catch (Exception e) { | |
42 | + System.out.println("Error HmacSHA256 ===========" + e.getMessage()); | |
43 | + } | |
44 | + return hash; | |
45 | + } | |
46 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java
0 → 100644
... | ... | @@ -0,0 +1,188 @@ |
1 | +package com.sincre.springboot.controller; | |
2 | + | |
3 | +import com.fasterxml.jackson.core.type.TypeReference; | |
4 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
5 | +import com.sincre.springboot.ApiModel.*; | |
6 | +import com.sincre.springboot.ApiPlatform.TuYaCloudService; | |
7 | +import com.sincre.springboot.common.EhcacheUtil; | |
8 | +import com.sincre.springboot.utils.ApiHelper; | |
9 | +import io.swagger.annotations.Api; | |
10 | +import org.apache.commons.lang3.StringUtils; | |
11 | +import org.springframework.web.bind.annotation.*; | |
12 | + | |
13 | +import java.util.HashMap; | |
14 | +import java.util.Map; | |
15 | + | |
16 | +@RestController | |
17 | +@RequestMapping(value = "/TuYa/*") | |
18 | +@Api(value = "涂鸦云服务API调用") | |
19 | +public class TuYaYunController { | |
20 | + | |
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") | |
51 | + public TuYaResResult getTuYaDevicesInfo(){ | |
52 | + | |
53 | + EhcacheUtil ehcacheUtil = new EhcacheUtil(); | |
54 | + String apiUrl = "/v1.0/devices?device_ids="; | |
55 | + Long t = System.currentTimeMillis(); | |
56 | + String access_Token = ehcacheUtil.get("TuYa_Token"); | |
57 | + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); | |
58 | + Map<String,String> map = new HashMap(); | |
59 | + map.put("client_id", TuYaCloudService.ClientId); | |
60 | + map.put("access_token",access_Token); | |
61 | + map.put("sign",sign); | |
62 | + map.put("sign_method",TuYaCloudService.Sign_method); | |
63 | + map.put("t",t.toString()); | |
64 | + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); | |
65 | + | |
66 | + TuYaResResult<TuYaDevicesList> resResult = null; | |
67 | + try{ | |
68 | + ObjectMapper objectMapper = new ObjectMapper(); | |
69 | + TypeReference<TuYaResResult<TuYaDevicesList>> reference = new TypeReference<TuYaResResult<TuYaDevicesList>>(){}; | |
70 | + resResult = objectMapper.readValue(result,reference); | |
71 | + System.out.println(resResult.getResult().total); | |
72 | + } catch(Exception ex){ | |
73 | + System.out.println(ex.getMessage()); | |
74 | + } | |
75 | + | |
76 | + System.out.println(result); | |
77 | + return resResult; | |
78 | + } | |
79 | + | |
80 | + | |
81 | + /** | |
82 | + * 根据schema分页获取开发者App下的用户列表 | |
83 | + * @param AppId 应用标识 | |
84 | + * @param pageIndex 页码 | |
85 | + * @param pageSize 大小 | |
86 | + * @return | |
87 | + */ | |
88 | + @GetMapping("{AppId}/GetTuYaAPPUser") | |
89 | + public String getTuYaAPPUser(@PathVariable("AppId") String AppId, @RequestParam int pageIndex, @RequestParam int pageSize){ | |
90 | + | |
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 | |
94 | + Long t = System.currentTimeMillis(); | |
95 | + String access_Token = ehcacheUtil.get("TuYa_Token"); | |
96 | + System.out.println(access_Token); | |
97 | + //Token获取后的签名 | |
98 | + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); | |
99 | + Map<String,String> headMap = new HashMap(); | |
100 | + headMap.put("client_id", TuYaCloudService.ClientId); | |
101 | + headMap.put("access_token",access_Token); | |
102 | + headMap.put("sign",sign); | |
103 | + headMap.put("sign_method",TuYaCloudService.Sign_method); | |
104 | + headMap.put("t",t.toString()); | |
105 | + | |
106 | + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,headMap); | |
107 | + | |
108 | + return result; | |
109 | + } | |
110 | + | |
111 | + | |
112 | + @PostMapping("{AppId}/AddTuYaAPPUser") | |
113 | + public String addTuYaAPPUser(@PathVariable("AppId") String AppId,@RequestBody UserInfo userInfo){ | |
114 | + | |
115 | + EhcacheUtil ehcacheUtil = new EhcacheUtil(); | |
116 | + | |
117 | + String apiUrl = String.format("/v1.0/apps/%s/user",AppId);//应用标识iotshunzhi | |
118 | + Long t = System.currentTimeMillis(); | |
119 | + String access_Token = ehcacheUtil.get("TuYa_Token"); | |
120 | + //Token获取后的签名 | |
121 | + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); | |
122 | + Map<String,String> headMap = new HashMap(); | |
123 | + headMap.put("client_id", TuYaCloudService.ClientId); | |
124 | + headMap.put("access_token",access_Token); | |
125 | + headMap.put("sign",sign); | |
126 | + headMap.put("sign_method",TuYaCloudService.Sign_method); | |
127 | + headMap.put("t",t.toString()); | |
128 | + | |
129 | + ObjectMapper objectMapper = new ObjectMapper(); | |
130 | + | |
131 | + String jsonResult = ""; | |
132 | + try { | |
133 | + jsonResult = objectMapper.writeValueAsString(userInfo); | |
134 | + System.out.println(jsonResult); | |
135 | + }catch (com.fasterxml.jackson.core.JsonProcessingException ex){ | |
136 | + ex.printStackTrace(); | |
137 | + } | |
138 | + | |
139 | + String result = ApiHelper.doPost(TuYaCloudService.TuYaOpenUrl + apiUrl,headMap,jsonResult); | |
140 | + | |
141 | + TuYaResResult<UserInfo> resResult = null; | |
142 | + | |
143 | + return result; | |
144 | + } | |
145 | + | |
146 | + /** | |
147 | + * 生成配网的Token | |
148 | + * @return | |
149 | + */ | |
150 | + @GetMapping("AddDevicesToken") | |
151 | + public String addDevicesToken(@RequestParam String UId){ | |
152 | + | |
153 | + EhcacheUtil ehcacheUtil = new EhcacheUtil(); | |
154 | + | |
155 | + String apiUrl = String.format("/v1.0/devices/token"); | |
156 | + Long t = System.currentTimeMillis(); | |
157 | + String access_Token = ehcacheUtil.get("TuYa_Token"); | |
158 | + //Token获取后的签名 | |
159 | + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); | |
160 | + System.out.println("签名"+sign); | |
161 | + Map<String,String> map = new HashMap(); | |
162 | + map.put("client_id", TuYaCloudService.ClientId); | |
163 | + map.put("access_token",access_Token); | |
164 | + map.put("sign",sign); | |
165 | + map.put("sign_method",TuYaCloudService.Sign_method); | |
166 | + map.put("t",t.toString()); | |
167 | + | |
168 | + if(StringUtils.isNotBlank(UId)){ | |
169 | + UId = "ay1557735327941UvZAG"; | |
170 | + } | |
171 | + | |
172 | + ObjectMapper objectMapper = new ObjectMapper(); | |
173 | + DeviceToken deviceToken = new DeviceToken(); | |
174 | + deviceToken.setUid(UId); | |
175 | + deviceToken.setTimeZoneId("Asia/ZheJiang"); | |
176 | + | |
177 | + String jsonResult = ""; | |
178 | + try { | |
179 | + jsonResult = objectMapper.writeValueAsString(deviceToken); | |
180 | + System.out.println(jsonResult); | |
181 | + }catch (com.fasterxml.jackson.core.JsonProcessingException ex){ | |
182 | + ex.printStackTrace(); | |
183 | + } | |
184 | + String result = ApiHelper.doPost(TuYaCloudService.TuYaOpenUrl + apiUrl,map,jsonResult); | |
185 | + | |
186 | + return result; | |
187 | + } | |
188 | +} | ... | ... |
springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java
0 → 100644
... | ... | @@ -0,0 +1,200 @@ |
1 | +package com.sincre.springboot.utils; | |
2 | + | |
3 | +import org.apache.http.HttpEntity; | |
4 | +import org.apache.http.NameValuePair; | |
5 | +import org.apache.http.client.ClientProtocolException; | |
6 | +import org.apache.http.client.config.RequestConfig; | |
7 | +import org.apache.http.client.entity.UrlEncodedFormEntity; | |
8 | +import org.apache.http.client.methods.CloseableHttpResponse; | |
9 | +import org.apache.http.client.methods.HttpGet; | |
10 | +import org.apache.http.client.methods.HttpPost; | |
11 | +import org.apache.http.entity.ContentType; | |
12 | +import org.apache.http.entity.StringEntity; | |
13 | +import org.apache.http.impl.client.CloseableHttpClient; | |
14 | +import org.apache.http.impl.client.HttpClients; | |
15 | +import org.apache.http.message.BasicNameValuePair; | |
16 | +import org.apache.http.util.EntityUtils; | |
17 | + | |
18 | +import java.io.IOException; | |
19 | +import java.io.UnsupportedEncodingException; | |
20 | +import java.util.*; | |
21 | + | |
22 | +public class ApiHelper { | |
23 | + | |
24 | + public static String doGet(String url,Map<String, String> headerParamMap) { | |
25 | + CloseableHttpClient httpClient = null; | |
26 | + CloseableHttpResponse response = null; | |
27 | + String result = ""; | |
28 | + try { | |
29 | + // 通过址默认配置创建一个httpClient实例 | |
30 | + httpClient = HttpClients.createDefault(); | |
31 | + // 创建httpGet远程连接实例 | |
32 | + HttpGet httpGet = new HttpGet(url); | |
33 | + // 设置请求头信息, | |
34 | + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) { | |
35 | + httpGet.setHeader(entry.getKey(),entry.getValue()); | |
36 | + } | |
37 | + | |
38 | + // 设置配置请求参数 | |
39 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间 | |
40 | + .setConnectionRequestTimeout(35000)// 请求超时时间 | |
41 | + .setSocketTimeout(60000)// 数据读取超时时间 | |
42 | + .build(); | |
43 | + // 为httpGet实例设置配置 | |
44 | + httpGet.setConfig(requestConfig); | |
45 | + // 执行get请求得到返回对象 | |
46 | + response = httpClient.execute(httpGet); | |
47 | + // 通过返回对象获取返回数据 | |
48 | + HttpEntity entity = response.getEntity(); | |
49 | + // 通过EntityUtils中的toString方法将结果转换为字符串 | |
50 | + result = EntityUtils.toString(entity); | |
51 | + } catch (ClientProtocolException e) { | |
52 | + e.printStackTrace(); | |
53 | + } catch (IOException e) { | |
54 | + e.printStackTrace(); | |
55 | + } finally { | |
56 | + // 关闭资源 | |
57 | + if (null != response) { | |
58 | + try { | |
59 | + response.close(); | |
60 | + } catch (IOException e) { | |
61 | + e.printStackTrace(); | |
62 | + } | |
63 | + } | |
64 | + if (null != httpClient) { | |
65 | + try { | |
66 | + httpClient.close(); | |
67 | + } catch (IOException e) { | |
68 | + e.printStackTrace(); | |
69 | + } | |
70 | + } | |
71 | + } | |
72 | + return result; | |
73 | + } | |
74 | + | |
75 | + /** | |
76 | + * 表单格式的post请求 | |
77 | + * @param url 接口地址 | |
78 | + * @param headerParamMap 设置请求头 | |
79 | + * @param paramMap 设置请求值 | |
80 | + * @return | |
81 | + */ | |
82 | + public static String doPost(String url,Map<String, String> headerParamMap, Map<String, Object> paramMap) { | |
83 | + CloseableHttpClient httpClient ; | |
84 | + String result; | |
85 | + // 创建httpClient实例 | |
86 | + httpClient = HttpClients.createDefault(); | |
87 | + // 创建httpPost远程连接实例 | |
88 | + HttpPost httpPost = new HttpPost(url); | |
89 | + // 设置请求头 | |
90 | + httpPost.addHeader("Content-Type", "application/json"); | |
91 | + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) { | |
92 | + httpPost.setHeader(entry.getKey(),entry.getValue()); | |
93 | + } | |
94 | + // 配置请求参数实例 | |
95 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间 | |
96 | + .setConnectionRequestTimeout(35000)// 设置连接请求超时时间 | |
97 | + .setSocketTimeout(60000)// 设置读取数据连接超时时间 | |
98 | + .build(); | |
99 | + // 为httpPost实例设置配置 | |
100 | + httpPost.setConfig(requestConfig); | |
101 | + | |
102 | + // 封装post请求参数 | |
103 | + if (null != paramMap && paramMap.size() > 0) { | |
104 | + List<NameValuePair> nvps = new ArrayList<NameValuePair>(); | |
105 | + // 通过map集成entrySet方法获取entity | |
106 | + Set<Map.Entry<String, Object>> entrySet = paramMap.entrySet(); | |
107 | + // 循环遍历,获取迭代器 | |
108 | + Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator(); | |
109 | + while (iterator.hasNext()) { | |
110 | + Map.Entry<String, Object> mapEntry = iterator.next(); | |
111 | + nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString())); | |
112 | + } | |
113 | + | |
114 | + // 为httpPost设置封装好的请求参数 | |
115 | + try { | |
116 | + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nvps, "UTF-8"); | |
117 | + entity.setContentType("application/json"); | |
118 | + httpPost.setEntity(entity); | |
119 | + } catch (UnsupportedEncodingException e) { | |
120 | + e.printStackTrace(); | |
121 | + } | |
122 | + } | |
123 | + result = closeHttpAndResult(httpClient,httpPost); | |
124 | + return result; | |
125 | + } | |
126 | + | |
127 | + /** | |
128 | + * post请求,内容体比较灵活,任意字符串格式的内容 | |
129 | + * @param url | |
130 | + * @param headerParamMap | |
131 | + * @param jsonParam | |
132 | + * @return | |
133 | + */ | |
134 | + public static String doPost(String url, Map<String, String> headerParamMap, String jsonParam) { | |
135 | + CloseableHttpClient httpClient; | |
136 | +// CloseableHttpResponse httpResponse = null; | |
137 | + String result; | |
138 | + // 创建httpClient实例 | |
139 | + httpClient = HttpClients.createDefault(); | |
140 | + // 创建httpPost远程连接实例 | |
141 | + HttpPost httpPost = new HttpPost(url); | |
142 | + // 设置请求头 | |
143 | + httpPost.addHeader("Content-Type", "application/json"); | |
144 | + for (Map.Entry<String, String> entry : headerParamMap.entrySet()) { | |
145 | + httpPost.setHeader(entry.getKey(),entry.getValue()); | |
146 | + } | |
147 | + // 配置请求参数实例 | |
148 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间 | |
149 | + .setConnectionRequestTimeout(35000)// 设置连接请求超时时间 | |
150 | + .setSocketTimeout(60000)// 设置读取数据连接超时时间 | |
151 | + .build(); | |
152 | + // 为httpPost实例设置配置 | |
153 | + httpPost.setConfig(requestConfig); | |
154 | +// try { | |
155 | + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8")); | |
156 | +// stringEntity.setContentType("application/json"); | |
157 | +// stringEntity.setContentEncoding("gzip");//请求头的编码格式 | |
158 | + httpPost.setEntity(stringEntity); | |
159 | +// }catch (UnsupportedEncodingException e){ | |
160 | +// e.printStackTrace(); | |
161 | +// } | |
162 | + result = closeHttpAndResult(httpClient,httpPost); | |
163 | + return result; | |
164 | + } | |
165 | + | |
166 | + private static String closeHttpAndResult(CloseableHttpClient httpClient,HttpPost httpPost){ | |
167 | + CloseableHttpResponse httpResponse = null; | |
168 | + String result = null; | |
169 | + try { | |
170 | + // httpClient对象执行post请求,并返回响应参数对象 | |
171 | + httpResponse = httpClient.execute(httpPost); | |
172 | + // 从响应对象中获取响应内容 | |
173 | + HttpEntity entity = httpResponse.getEntity(); | |
174 | + result = EntityUtils.toString(entity); | |
175 | + } catch (ClientProtocolException e) { | |
176 | + e.printStackTrace(); | |
177 | + } catch (IOException e) { | |
178 | + e.printStackTrace(); | |
179 | + } finally { | |
180 | + // 关闭资源 | |
181 | + if (null != httpResponse) { | |
182 | + try { | |
183 | + httpResponse.close(); | |
184 | + } catch (IOException e) { | |
185 | + e.printStackTrace(); | |
186 | + } | |
187 | + } | |
188 | + if (null != httpClient) { | |
189 | + try { | |
190 | + httpClient.close(); | |
191 | + } catch (IOException e) { | |
192 | + e.printStackTrace(); | |
193 | + } | |
194 | + } | |
195 | + } | |
196 | + | |
197 | + return result; | |
198 | + } | |
199 | +} | |
200 | + | ... | ... |