package com.poteviohealth.ym.ipos.utils; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.poteviohealth.cgp.common.utils.HttpUtils; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.ArrayUtils; import java.lang.reflect.Field; import java.util.Map; /** * 请求返回类封装 * @author Qin */ @Log4j2 public class YmUtil { private static final String SECRETKEY = "sXEEYUDtjkunTEYENlkp"; public static final String SUCCESS = "0000"; public static final String FAIL = "9998"; private static final String URL = "https://ipos-sa-std.wangcaio2o.com"; public static Object resultBack(T obj, T clazz) throws IllegalAccessException { Map maps = YmUtil.findObjectFields(obj,false); String sign = generateSign(obj); JSONObject object = (JSONObject) JSONObject.toJSON(maps); object.put("sign", sign); String jsonObject = JSONObject.toJSONString(object); log.info(clazz.getClass()+"===="+jsonObject); String val = HttpUtils.post(URL,jsonObject); log.info(clazz.getClass()+"==return=="+val); if(clazz.getClass().toString().contains("UserSearchBack") || clazz.getClass().toString().contains("SettlementQueryBack")){ return val; } return JSONObject.parseObject(val, clazz.getClass()); } private static String generateSign(T obj){ StringBuilder sb = new StringBuilder(SECRETKEY); try { Map maps = YmUtil.findObjectFields(obj,true); for (String s : maps.keySet()) { sb.append(s).append(maps.get(s)); } sb.append(SECRETKEY); } catch (IllegalAccessException e) { e.printStackTrace(); } return DigestUtils.md5Hex(sb.toString().getBytes()).toUpperCase(); } private static Map findObjectFields(T obj,boolean isType) throws IllegalAccessException { Map returnMaps =Maps.newTreeMap(); Class clazz = obj.getClass(); Field[] fields = new Field[0]; for(Class curClz = clazz; curClz != Object.class; curClz = curClz.getSuperclass()) { fields = ArrayUtils.addAll(fields, curClz.getDeclaredFields()); } for (Field f : fields) { f.setAccessible(true); String fieldName = f.getName(); Object fieldValue = f.get(obj); if(fieldValue =="" || fieldValue == null){ continue; }else if(isType){ if(f.getGenericType().getTypeName().contains("com.poteviohealth.ym.ipos.model")){ continue; } } returnMaps.put(fieldName,fieldValue); } return returnMaps; } public static void main(String[] args) { /* UserSearch userSearch = new UserSearch(); UserSearchDetail detail = new UserSearchDetail(); detail.setPhone("18010031183"); userSearch.setMerchant_query_request(detail); UserSearchBack back = null; try { String val = (String) YmUtil.resultBack(userSearch,new UserSearchBack()); JSONObject jsonObject = new JSONObject(JSON.parseObject(val)); if(val.contains("image_list")){ List list = jsonObject.getJSONArray("image_list").stream().map(item -> JSON.parseObject(item.toString(), new TypeReference() {})).collect(Collectors.toList()); jsonObject.put("image_list",list); } back = JSONObject.toJavaObject(jsonObject, UserSearchBack.class); } catch (IllegalAccessException e) { e.printStackTrace(); } System.out.println(JSONObject.toJSONString(back));*/ } }