package com.ectrip.trips.net; import com.alibaba.fastjson.JSON; import com.ectrip.cyt.bean.BaseRequest; import com.ectrip.cyt.bean.BaseResponse; import com.ectrip.cyt.bean.DataTranfer; import com.ectrip.cyt.utils.Base64; import com.ectrip.cyt.utils.LogUtil; import com.ectrip.cyt.utils.SignTools; /** * This is a tool class for Check Ticket Http * Created by lingkitho on 2017/3/1. */ public class ModelTools { /** * 解析请求体 - 将Http请求转换成Bean对象 * @param rawData 原始数据 * @param clazz 类模板 * @return Bean 对象 */ public static T parseRequest(String rawData, Class clazz) throws Exception { DataTranfer dataTranfer = null; String param;//请求数据 try { dataTranfer = JSON.parseObject(rawData,DataTranfer.class); if(null == dataTranfer){ throw new Exception("原始数据为空!"); } if(null == dataTranfer.getSigned()){ throw new Exception("签名为空!"); } boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData()); if(!isOk){ throw new Exception("签名验证失败!"); } } catch (Exception e) { throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e)); } try { byte[] requestDataJson = Base64.decode(dataTranfer.getData()); param = new String(requestDataJson); } catch (Exception e) { throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!"); } if(null != param && param.length()>0) { try { BaseResponse response = JSON.parseObject(param,BaseResponse.class); if(response != null && response.getData() != null){ T obj = JSON.parseObject(response.getData().toString(), clazz); LogUtil.i("CHECK","【请求数据返回成功】ResultBean="+response.getData().toString()); if(null == obj){ throw new Exception("转换后的请求实体为null,请检查参数"); } return obj; } return null; } catch (Exception e) { throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应"); } }else{ return null; } } public static BaseResponse parseRequestFace(String rawData) throws Exception { BaseResponse response = null; DataTranfer dataTranfer = null; String param;//请求数据 try { dataTranfer = JSON.parseObject(rawData,DataTranfer.class); if(null == dataTranfer){ throw new Exception("原始数据为空!"); } if(null == dataTranfer.getSigned()){ throw new Exception("签名为空!"); } boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData()); if(!isOk){ throw new Exception("签名验证失败!"); } } catch (Exception e) { throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e)); } try { byte[] requestDataJson = Base64.decode(dataTranfer.getData()); param = new String(requestDataJson); } catch (Exception e) { throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!"); } if(null != param && param.length()>0) { try { response = JSON.parseObject(param,BaseResponse.class); // if(response != null && response.getData() != null){ //// T obj = JSON.parseObject(response.getData().toString(), clazz); //// T obj = (T)response.getData(); // LogUtil.i("CHECK","【请求数据返回成功】ResultBean="+response.getData().toString()); // if(null == obj){ // throw new Exception("转换后的请求实体为null,请检查参数"); // } // return obj; // } return response; } catch (Exception e) { throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应"); } }else{ return null; } } /** * 解析请求体 - 将Http请求转换成Bean对象 * @param rawData 原始数据 * @param clazz 类模板 * @return Bean 对象 */ public static T parseBaseRequest(String rawData, Class clazz) throws Exception { DataTranfer dataTranfer = null; String param;//请求数据 try { dataTranfer = JSON.parseObject(rawData,DataTranfer.class); if(null == dataTranfer){ throw new Exception("原始数据为空!"); } if(null == dataTranfer.getSigned()){ throw new Exception("签名为空!"); } boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData()); if(!isOk){ throw new Exception("签名验证失败!"); } } catch (Exception e) { throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e)); } try { byte[] requestDataJson = Base64.decode(dataTranfer.getData()); param = new String(requestDataJson); } catch (Exception e) { throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!"); } if(null != param && param.length()>0) { try { T obj = JSON.parseObject(param, clazz); if(null == obj){ throw new Exception("转换后的请求实体为null,请检查参数"); } return obj; } catch (Exception e) { throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应"); } }else{ return null; } } public static String getParam (BaseRequest data , String method){ String dataJson = JSON.toJSONString(data);//将请求的实体转换成json字符串 String dataBase64 = Base64.encode(dataJson.getBytes());//将字符串进行base64加密 String signed = SignTools.getSign(dataBase64);//获得签名 DataTranfer dataTranfer = new DataTranfer();//封装到body的实体 dataTranfer.setData(dataBase64);//将base64的加密串作为data dataTranfer.setSigned(signed);//设置签名 dataTranfer.setMethod(method);//设置方法名 String param = JSON.toJSONString(dataTranfer); return param; } public static String getParamFace (String dataBase64 , String method){ String signed = SignTools.getSign(dataBase64);//获得签名 DataTranfer dataTranfer = new DataTranfer();//封装到body的实体 dataTranfer.setData(dataBase64);//将base64的加密串作为data dataTranfer.setSigned(signed);//设置签名 dataTranfer.setMethod(method);//设置方法名 String param = JSON.toJSONString(dataTranfer); return param; } }