package com.mm.android.deviceaddmodule.openapi; import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; import com.mm.android.deviceaddmodule.mobilecommon.utils.MD5Helper; import org.apache.http.conn.ConnectTimeoutException; import org.json.JSONObject; import java.io.IOException; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.URLDecoder; import java.net.UnknownHostException; import java.net.UnknownServiceException; import java.util.HashMap; import java.util.Map; import java.util.UUID; import javax.net.ssl.SSLException; public class HttpSend { private static final String TAG = HttpSend.class.getSimpleName(); public static JsonObject execute(Map paramsMap, String method,int timeOut) throws BusinessException { Map map = paramsInit(paramsMap); JsonObject jsonObj = null; JsonObject jsonResult = null; if (CONST.HOST.contains("hdlcontrol.com")) { // 返回json jsonObj = doPost(CONST.HOST + "/home-wisdom/imou/openapi/" + method, map, timeOut); LogUtil.debugLog(TAG, "url::" + method + "\n" + "response result:" + jsonObj.toString()); if (jsonObj == null) { throw new BusinessException("openApi response is null"); } jsonResult = jsonObj; } else { jsonObj = doPost(CONST.HOST + "/openapi/" + method, map, timeOut); LogUtil.debugLog(TAG, "url::" + method + "\n" + "response result:" + jsonObj.toString()); if (jsonObj == null) { throw new BusinessException("openApi response is null"); } jsonResult = jsonObj.getAsJsonObject("result"); } if (jsonResult == null) { throw new BusinessException("openApi response is null"); } String code = jsonResult.get("code").getAsString(); if (!"0".equals(code)) { String msg = jsonResult.get("msg").getAsString(); throw new BusinessException(code + msg); } try { JsonObject jsonData = jsonResult.getAsJsonObject("data"); if (jsonData == null) { jsonData = new JsonObject(); } return jsonData; } catch (Throwable e) { BusinessException businessException = new BusinessException(e); throw businessException; } } public static JsonObject execute(String json, String method,int timeOut) throws BusinessException { // 返回json LogUtil.debugLog(TAG, "request result:" + json.toString()); JsonObject jsonResult=null; if (CONST.HOST.contains("hdlcontrol.com")) { JsonObject jsonObj = doPost(CONST.HOST + "/home-wisdom/imou/openapi/" + method, json, timeOut); LogUtil.debugLog(TAG, "URL::"+method+"\n"+"response result:" + jsonObj.toString()); if (jsonObj == null) { throw new BusinessException("openApi response is null"); } jsonResult = jsonObj; } else { JsonObject jsonObj = doPost(CONST.HOST + "/openapi/" + method, json, timeOut); LogUtil.debugLog(TAG, "URL::"+method+"\n"+"response result:" + jsonObj.toString()); if (jsonObj == null) { throw new BusinessException("openApi response is null"); } jsonResult = jsonObj.getAsJsonObject("result"); } if (jsonResult == null) { throw new BusinessException("openApi response is null"); } String code = jsonResult.get("code").getAsString(); if (!"0".equals(code)) { String msg = jsonResult.get("msg").getAsString(); throw new BusinessException(code + msg); } try { JsonObject jsonData = jsonResult.getAsJsonObject("data"); if (jsonData ==null){ jsonData=new JsonObject(); } return jsonData; } catch (Throwable e) { BusinessException businessException = new BusinessException(e); throw businessException; } } private static JsonObject doPost(String url, Map map, int timeOut) throws BusinessException { Gson gson = new Gson(); map.put("homeId",1547099040465408002L); String json =null; JsonObject jsonObject = new JsonObject(); if(url.contains("hdlcontrol.com")) { if (map.containsKey("params")) { Map tempMap = (Map) map.get("params"); map.remove("params"); map.remove("id"); map.remove("system"); for (Map.Entry temp : tempMap.entrySet()) { if ("page".equals(temp.getKey())) { map.put("pageNo", temp.getValue()); } else { if("token".equals(temp.getKey())){ continue; } map.put(temp.getKey(), temp.getValue()); } } } json = gson.toJson(HttpClient.encrypt(map)); }else{ json = gson.toJson(map); } try { LogUtil.debugLog(TAG, "reqest: " + url + " data:" + json); String openApi = HttpClient.post(url, json, "application/json", "OpenApi",timeOut); jsonObject = new JsonParser().parse(openApi).getAsJsonObject(); } catch (IOException e) { BusinessException b = new BusinessException(e); if (e instanceof ConnectTimeoutException || e instanceof SocketTimeoutException || e instanceof UnknownHostException || e instanceof UnknownServiceException || e instanceof SSLException || e instanceof SocketException) { b.errorDescription = "操作失败,请检查网络"; } throw b; } catch (Throwable e) { BusinessException b = new BusinessException(e); throw b; } return jsonObject; } private static JsonObject doPost(String url, String json, int timeOut) throws BusinessException { Gson gson = new Gson(); JsonObject jsonObject = new JsonObject(); try { LogUtil.debugLog(TAG, "reqest: " + url + " data:" + json.toString()); String openApi = HttpClient.post(url, json, "application/json", "OpenApi",timeOut); jsonObject = new JsonParser().parse(openApi).getAsJsonObject(); } catch (IOException e) { BusinessException b = new BusinessException(e); if (e instanceof ConnectTimeoutException || e instanceof SocketTimeoutException || e instanceof UnknownHostException || e instanceof UnknownServiceException || e instanceof SSLException || e instanceof SocketException) { b.errorDescription = "操作失败,请检查网络"; } throw b; } catch (Throwable e) { BusinessException b = new BusinessException(e); throw b; } return jsonObject; } private static Map paramsInit(Map paramsMap) { long time = System.currentTimeMillis() / 1000; String nonce = UUID.randomUUID().toString(); String id = UUID.randomUUID().toString(); StringBuilder paramString = new StringBuilder(); paramString.append("time:").append(time).append(","); paramString.append("nonce:").append(nonce).append(","); paramString.append("appSecret:").append(CONST.SECRET); String sign = ""; // 计算MD5得值 sign = MD5Helper.encodeToLowerCase(paramString.toString().trim()); Map systemMap = new HashMap(); systemMap.put("ver", "1.0"); systemMap.put("sign", sign); systemMap.put("appId", CONST.APPID); systemMap.put("nonce", nonce); systemMap.put("time", time); Map map = new HashMap(); map.put("system", systemMap); map.put("params", paramsMap); map.put("id", id); return map; } /** * 基本类型加密 *

* 判断当前值是否需要参与签名,保持跟云端一致 * 空字符串不参与 * 数组,集合不参与 * * @return ture 需要加密 */ private static boolean valueNeedSign(String valueStr) { try { if (TextUtils.isEmpty(valueStr)) return false; final char[] strChar = URLDecoder.decode(valueStr, "utf-8") .substring(0, 1).toCharArray(); final char firstChar = strChar[0]; return firstChar != '{' && firstChar != '['; } catch (Exception e) { e.printStackTrace(); } return false; } }