Нет описания

ThirdToken.java 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. package com.shuhaiwifi.web.auth2.iot;
  2. import java.nio.charset.StandardCharsets;
  3. import java.security.MessageDigest;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.util.Base64;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.Map;
  9. import java.util.Map.Entry;
  10. import java.util.TreeMap;
  11. import org.apache.commons.logging.Log;
  12. import org.apache.commons.logging.LogFactory;
  13. import com.alibaba.fastjson.JSONArray;
  14. import com.alibaba.fastjson.JSONObject;
  15. import com.nianzai.util.Tools;
  16. import cn.hutool.crypto.SecureUtil;
  17. import cn.hutool.http.HttpUtil;
  18. public class ThirdToken {
  19. private static final Log logger = LogFactory.getLog(CmApi.class);
  20. public static void main(String[] args)
  21. {
  22. String iccid="898608352325D0094600";
  23. String token=getToken(2,iccid);
  24. System.out.println(token);
  25. CmApi.getTerminalList(token,iccid,"9C-E5-49-E0-4D-65");
  26. // String iccid="89860441192580181041";
  27. // String token=getToken(1,iccid);
  28. // System.out.println(token);
  29. // //CmApi.getTerminalList(token,iccid,"18-60-24-8F-4D-AD");
  30. // CmApi.sendSms(token, iccid, "18-60-24-8F-4D-AD", "18-10-24-8F-4D-AD", "13501078357");
  31. }
  32. public static String getToken(int kasid,String iccid)
  33. {
  34. String token ="";
  35. if(kasid==Iot.bw)
  36. {
  37. String url="https://dmp.combmobile.com/mifi-portal/api/getOneLinkAuthToken";
  38. Map<String,String> m=new HashMap<String,String>();
  39. m.put("iccid", iccid);
  40. String content=HttpUtil.createPost(url).body(JSONObject.toJSONString(m), "application/json").execute().body();
  41. JSONObject resJson = JSONObject.parseObject(content);
  42. boolean code=resJson.getBoolean("success");
  43. if(code)
  44. {
  45. resJson = JSONObject.parseObject(resJson.getString("data"));
  46. token=resJson.getString("token");
  47. }
  48. }
  49. else if(kasid==Iot.yl)
  50. {
  51. try
  52. {
  53. String appKey="1ca4d68a50d10ce9b9ba9334a1c90eea";
  54. String appSecret="df53a52ca350494ba94ca5f4daa1204f";
  55. String appid="C5010851A85156636691";
  56. String url="https://iotapi.apika.cn/iot-api/wireless/auth/refreshWirelessToken";
  57. String sign=getSignature(appKey,appSecret);
  58. Map<String,String> m=new HashMap<String,String>();
  59. m.put("appid", appid);
  60. Map<String, String> map = new HashMap<String, String>();
  61. map.put("appKey", appKey);
  62. map.put("appSecret", appSecret);
  63. map.put("signature", sign);
  64. map.put("sign", sign);
  65. logger.info(url);
  66. String content=HttpUtil.createPost(url).addHeaders(map).body(JSONObject.toJSONString(m), "application/json").execute().body();
  67. logger.info(content);
  68. JSONObject resJson = JSONObject.parseObject(content);
  69. int code=resJson.getIntValue("code");
  70. if(code==200)
  71. {
  72. resJson = JSONObject.parseObject(resJson.getString("data"));
  73. token=resJson.getString("token");
  74. }
  75. }
  76. catch(Exception e)
  77. {
  78. logger.info(Tools.getExceptionMessage(e));
  79. }
  80. }
  81. if(kasid==Iot.ylqg)//亿联4G移动(全国移动)
  82. {
  83. String appKey="1ca4d68a50d10ce9b9ba9334a1c90eea";
  84. String appSecret="df53a52ca350494ba94ca5f4daa1204f";
  85. String appid="C5010851A85156636691";
  86. String url="https://iotapi.apika.cn/iot-api/wireless/auth/refreshWirelessToken";
  87. String sign=getSignature(appKey,appSecret);
  88. Map<String,String> m=new HashMap<String,String>();
  89. m.put("appid", appid);
  90. Map<String, String> map = new HashMap<String, String>();
  91. map.put("appKey", appKey);
  92. map.put("appSecret", appSecret);
  93. map.put("signature", sign);
  94. logger.info(url);
  95. String content=HttpUtil.createPost(url).addHeaders(map).body(JSONObject.toJSONString(m), "application/json").execute().body();
  96. logger.info("ylqg>>>"+content);
  97. JSONObject resJson = JSONObject.parseObject(content);
  98. int code=resJson.getIntValue("code");
  99. if(code==200)
  100. {
  101. resJson = JSONObject.parseObject(resJson.getString("data"));
  102. token=resJson.getString("token");
  103. }
  104. }
  105. if(kasid==Iot.lfgd)//科锋广东
  106. {
  107. String url = "http://120.76.136.43:18888/iotcard/sys/api/getToken?name=ssly&sing=527C8E05E4B21647FD21CEA1FBC1668D&time=1678340234&aisleid=28997376438029133";
  108. logger.info(url);
  109. token= HttpUtil.get(url);
  110. }
  111. if(kasid==Iot.wx || kasid==Iot.wx2)//五兴4G移动卡
  112. {
  113. String url = "https://api.wxkjwlw.com/api/v2/outputApi/operatorRealNameAuthToken";
  114. logger.info(url);
  115. String appKey="VO1NFpu75CHaC9WY2Yc31wkS6EM1IVvd";
  116. String appSecret="f06825dc52664f6cb0ac1153be4d5851";
  117. Map<String,Object> m = new TreeMap<>();
  118. m.put("operator", 2);
  119. m.put("operatorPlatformType", 1);
  120. m.put("operatorPlatformKey", kasid==Iot.wx?"C5010200A9992001846946":"C5010200A9992001846023");
  121. m.put("appkey", appKey);
  122. m.put("timestamp", System.currentTimeMillis()/1000);
  123. m.put("nonce", (int) (Math.random() * 90000) + 10000);
  124. String signstr = convertToQueryString(m)+"&secret="+appSecret;
  125. String sign = sha1(signstr).toUpperCase();
  126. m.put("sign", sign);
  127. logger.info("wuxing req>>>"+JSONObject.toJSONString(m));
  128. String content=HttpUtil.createPost(url).body(JSONObject.toJSONString(m), "application/json").execute().body();
  129. logger.info("wuxing resp>>>"+content);
  130. JSONObject resJson = JSONObject.parseObject(content);
  131. int code=resJson.getIntValue("code");
  132. if(code==0)
  133. {
  134. resJson = JSONObject.parseObject(resJson.getString("data"));
  135. token=resJson.getString("token");
  136. logger.info(token);
  137. }
  138. }
  139. if(kasid==Iot.yljs)//亿联4G移动(江苏移动)
  140. {
  141. String url = "http://ecrz.yeadry.com/api/v5/wireless/get/token/appid?appid=b0758ea013f147f1a7ed0bcce3c233ff";
  142. logger.info("yljs>>>"+url);
  143. String content= HttpUtil.get(url);
  144. content=content.trim();
  145. logger.info(content);
  146. JSONObject resJson = JSONObject.parseObject(content);
  147. int code=resJson.getIntValue("code");
  148. if(code==0) {
  149. resJson = JSONObject.parseObject(resJson.getString("result"));
  150. token=resJson.getString("token");
  151. logger.info(token);
  152. }
  153. }
  154. if(kasid==Iot.zy)//中亿4G移动卡
  155. {
  156. String url = "https://api.aiotzy.com/api/auth/oauth/token?grant_type=open_api&appId=zyO3OQ3uTr&appSecret=c451942cfc9a6e52b5711c4f1e24ceaa418b456f";
  157. logger.info("zy oauth>>>"+url);
  158. String content= HttpUtil.post(url,"");
  159. content=content.trim();
  160. logger.info(content);
  161. JSONObject resJson = JSONObject.parseObject(content);
  162. JSONObject result=resJson.getJSONObject("data");
  163. if(result!=null) {
  164. String tokenHead=result.getString("tokenHead");
  165. String accessToken=result.getString("accessToken");
  166. url = "https://api.aiotzy.com/api/terminal/open/v1/terminalCard/queryAuthToken";
  167. logger.info("zy queryAuthToken>>>"+url);
  168. Map<String, String> head = new HashMap<>();
  169. Map<String, Object> body = new HashMap<>();
  170. head.put("Authorization", tokenHead+accessToken);
  171. body.put("terminal", iccid);
  172. body.put("forceRefreshToken", 1);
  173. content=HttpUtil.createPost(url).addHeaders(head).body(JSONObject.toJSONString(body), "application/json").execute().body();
  174. logger.info(content);
  175. resJson = JSONObject.parseObject(content);
  176. result=resJson.getJSONObject("data");
  177. if(result!=null) {
  178. token=result.getString("token");
  179. logger.info(token);
  180. }
  181. }
  182. }
  183. if(kasid==Iot.bmbjyd || kasid==Iot.bmlcyd || kasid==Iot.bmgdyd) {
  184. String appId="",openId="",channelId="";
  185. if (kasid==Iot.bmbjyd) {
  186. appId="C5010100A23100111720247";
  187. openId="GFLaxxfVMG4DGkgcdZEEg4zexmje3dq4";
  188. channelId="236";
  189. } else if (kasid==Iot.bmlcyd){
  190. appId="C5010531Aq5201817914";
  191. openId="GFLaxxfVMG4DGkgcdZEEg4zexmje3dq4";
  192. channelId="216";
  193. } else {
  194. appId="C5010200A9992002368004";
  195. openId="GFLaxxfVMG4DGkgcdZEEg4zexmje3dq4";
  196. channelId="239";
  197. }
  198. Map<String, String> receivedData = new HashMap<String, String>();
  199. String times=String.valueOf(System.currentTimeMillis()/1000);
  200. receivedData.put("times", times);
  201. receivedData.put("appId", appId);
  202. receivedData.put("channelId", channelId);
  203. TreeMap<String, String> sortedData = new TreeMap<>(receivedData);
  204. // 构建待签名字符串
  205. StringBuilder stringA = new StringBuilder();
  206. stringA.append(openId);
  207. for (Map.Entry<String, String> entry : sortedData.entrySet()) {
  208. String key = entry.getKey();
  209. String value = entry.getValue();
  210. if (value != null && !value.isEmpty() && !"sign".equals(key) ) {
  211. stringA.append(key).append(value);
  212. }
  213. }
  214. // 拼接key,并进行MD5运算
  215. stringA.append(openId);
  216. System.out.println(stringA.toString());
  217. String signValue = SecureUtil.sha1((stringA.toString())).toUpperCase();
  218. String url="http://db.jinmaiiot.com:7021/api/external/getDeviceToken?appId="+appId+"&openId="+openId+"&times="+times+"&sign="+signValue+"&channelId="+channelId;
  219. logger.info("bmyd>>>"+url);
  220. String content= HttpUtil.get(url);
  221. logger.info(content);
  222. JSONObject resJson = JSONObject.parseObject(content);
  223. JSONArray result=resJson.getJSONArray("result");
  224. int status=resJson.getIntValue("status");
  225. if(status==0) {
  226. resJson=JSONObject.parseObject(String.valueOf(result.get(0)));
  227. token=resJson.getString("token");
  228. logger.info(token);
  229. }
  230. }
  231. if(kasid==Iot.lxxj || kasid==Iot.lxyn || kasid==Iot.lxqh || kasid==Iot.lxgz) {
  232. String appId="";
  233. if (kasid==Iot.lxxj) {
  234. appId="C5010991A9912845696";
  235. }else if (kasid==Iot.lxyn) {
  236. appId="C5010871A87111730331";
  237. }else if (kasid==Iot.lxqh) {
  238. appId="C5010971A7100567389";
  239. } else {
  240. appId="C5010851A85151776534";
  241. }
  242. String url="http://ecrz.szsgsxc.cn/api/v5/wireless/get/token/appid?appid="+appId;
  243. logger.info("lxyd>>>"+url);
  244. String content= HttpUtil.get(url);
  245. logger.info(content);
  246. JSONObject resJson = JSONObject.parseObject(content);
  247. JSONObject result=resJson.getJSONObject("result");
  248. String code=resJson.getString("code");
  249. if("0".equals(code)) {
  250. token=result.getString("token");
  251. logger.info(token);
  252. }
  253. }
  254. if(kasid==Iot.whhnyd) {
  255. String url = "https://shouhuapi.yimingkeji.net/polling/v1/channel/channleAuthToken";
  256. logger.info("whhnyd queryAuthToken>>>"+url);
  257. Map<String, Object> body = new HashMap<>();
  258. body.put("appid", "7112100442210304");
  259. String content=HttpUtil.createPost(url).body(JSONObject.toJSONString(body), "application/json").execute().body();
  260. logger.info("whhnyd>>"+content);
  261. JSONObject resJson = JSONObject.parseObject(content);
  262. JSONObject result=resJson.getJSONObject("result");
  263. String code = resJson.getString("code");
  264. if ("0".equals(code) && result != null) {
  265. token = result.getString("token");
  266. logger.info(token);
  267. }
  268. }
  269. if(kasid==Iot.bw)
  270. {
  271. String url="https://dmp.combmobile.com/mifi-portal/api/getOneLinkAuthToken";
  272. Map<String,String> m=new HashMap<String,String>();
  273. m.put("iccid", iccid);
  274. String content=HttpUtil.createPost(url).body(JSONObject.toJSONString(m), "application/json").execute().body();
  275. JSONObject resJson = JSONObject.parseObject(content);
  276. boolean code=resJson.getBoolean("success");
  277. if(code)
  278. {
  279. resJson = JSONObject.parseObject(resJson.getString("data"));
  280. token=resJson.getString("token");
  281. }
  282. }
  283. return token;
  284. }
  285. public static String sha1(String input) {
  286. if (input == null) {
  287. throw new IllegalArgumentException("输入不能为null");
  288. }
  289. MessageDigest digest = null;
  290. try {
  291. digest = MessageDigest.getInstance("SHA-1");
  292. } catch (NoSuchAlgorithmException e) {
  293. // TODO 自动生成的 catch 块
  294. e.printStackTrace();
  295. }
  296. byte[] hashBytes = digest.digest(input.getBytes());
  297. StringBuilder sb = new StringBuilder();
  298. for(byte b : hashBytes) {
  299. String hex = Integer.toHexString(0xff & b);
  300. if(hex.length() == 1) sb.append('0');
  301. sb.append(hex);
  302. }
  303. return sb.toString();
  304. }
  305. public static String convertToQueryString(Map<String, Object> map) {
  306. if (map == null || map.isEmpty()) {
  307. return "";
  308. }
  309. StringBuilder result = new StringBuilder();
  310. Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
  311. while (iterator.hasNext()) {
  312. Entry<String, Object> entry = iterator.next();
  313. String key = entry.getKey();
  314. String value = String.valueOf(entry.getValue());
  315. // 跳过空值
  316. if (value == null || value.trim().isEmpty()) {
  317. continue;
  318. }
  319. result.append(key).append("=").append(value);
  320. if (iterator.hasNext()) {
  321. result.append("&");
  322. }
  323. }
  324. return result.toString();
  325. }
  326. /**
  327. * 获取签名
  328. *
  329. * @param appKey
  330. * @param appSecret
  331. * @return
  332. */
  333. public static String getSignature(String appKey, String appSecret)
  334. {
  335. String signStr="";
  336. String data = "{" + appKey + "}:{" + appSecret + "}";
  337. byte[] bytes = null;
  338. try {
  339. MessageDigest md = MessageDigest.getInstance("SHA-256");
  340. bytes = md.digest(data.getBytes(StandardCharsets.UTF_8));
  341. StringBuilder sign = new StringBuilder();
  342. for (int i = 0; i < bytes.length; i++) {
  343. String hex = Integer.toHexString(bytes[i] & 0xFF);
  344. if (hex.length() == 1) {
  345. sign.append("0");
  346. }
  347. sign.append(hex.toUpperCase());
  348. }
  349. signStr = Base64.getEncoder().encodeToString(sign.toString().getBytes(StandardCharsets.UTF_8));
  350. // System.out.println("获取出来的签名为: {}"+ signStr);
  351. } catch (Exception gse) {
  352. //System.out.println("获取签名出错 {}"+gse.getCause().toString());
  353. }
  354. return signStr;
  355. }
  356. }