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.LCDeviceEngine; 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 jsonResult = null; if (CONST.isHdlServer()) { jsonResult = doPost(CONST.HOST + "/home-wisdom/imou/openapi/" + method, map, timeOut); } else { jsonResult = doPost(CONST.HOST + "/openapi/" + method, map, timeOut); if (jsonResult == null) { throw new BusinessException("openApi response is null"); } jsonResult = jsonResult.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(); String json; JsonObject jsonObject; if(CONST.isHdlServer()) { map.put("homeId", LCDeviceEngine.newInstance().getHomeId()); 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); LogUtil.debugLog(TAG, "返回结果: \r\n" + openApi); 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; } // 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.isHdlServer()) { // 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, 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; // } }