| package com.doumee.core.utils.qiyeweixin; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.alibaba.fastjson.TypeReference; | 
| import com.doumee.biz.system.SystemDictDataBiz; | 
| import com.doumee.core.utils.HttpsUtil; | 
| import com.doumee.core.utils.qiyeweixin.model.request.QywxSendMsgRequest; | 
| import com.doumee.core.utils.qiyeweixin.model.response.*; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import javax.annotation.PostConstruct; | 
| import java.io.File; | 
| import java.io.IOException; | 
| import java.io.InputStream; | 
| import java.util.HashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
|   | 
| @Component | 
| @Slf4j | 
| public class QywxUtil { | 
|     private static JSONObject json = new JSONObject(); | 
|   | 
|   | 
|   | 
|     private static QywxUtil qyUtil; | 
|   | 
|     @Value("${qiwei.serviceurl}") | 
|     private    String qiweiUrl; | 
|   | 
|     @PostConstruct | 
|     private void init() { | 
|         qyUtil = this; | 
| //        QywxUtil.qiweiUrl =  serviceurl; | 
|     } | 
|   | 
|   | 
|     public static String create(Map<String, Object> map, String url, String token) throws IOException { | 
|         //  String token = getToken(QY_Constant.CORPID, QY_Constant.SCHEDULESECRET); | 
|         String postData = createPostData(map); | 
|         String response = HttpsUtil.post(url + token, postData,  "application/json", false); | 
|         System.out.println("获取到的token======>" + token); | 
|         System.out.println("请求数据======>" + postData); | 
|         System.out.println("发送微信的响应数据======>" + response); | 
|         return response; | 
|     } | 
|   | 
|     private static String createPostData(Map<String, Object> map) { | 
|         System.out.println("进入createPostData方法-------------------------"); | 
|         return JSONObject.toJSONString(map); | 
|     } | 
|   | 
|   | 
|     public static String getAccessToken(String corpId, String corpSecret)  { | 
|         String[] interfaceUrl = QywxConstant.GET_ACCESS_TOKEN; | 
|         String url = interfaceUrl[0].replace("${corpid}",corpId).replace("${secret}",corpSecret); | 
|         QywxBaseResponse response = sendHttpRequest(url,interfaceUrl[1],"",new TypeReference<QywxBaseResponse<String>>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response.getAccess_token(); | 
|         } | 
|         return null; | 
|     } | 
|     public static List<QywxDepartInfoResponse> getDepartmentAll(String token)   { | 
|         String[] interfaceUrl = QywxConstant.GET_DEPARTMENT_LIST; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${id}",""); | 
|         QywxBaseResponse<List<QywxDepartInfoResponse>> response = sendHttpRequest(url,interfaceUrl[1],"",new TypeReference<QywxBaseResponse<List<QywxDepartInfoResponse>>>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response.getData(); | 
|         } | 
|         return null; | 
|     } | 
|     public static QywxDepartInfoResponse getDepartmentInfo(String token,String departid)  { | 
|         String[] interfaceUrl = QywxConstant.GET_DEPARTMENT_INFO; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${id}",departid); | 
|         QywxBaseResponse<QywxDepartInfoResponse> response = sendHttpRequest(url,interfaceUrl[1],"" | 
|                 ,new TypeReference< QywxBaseResponse<QywxDepartInfoResponse>>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response.getData(); | 
|         } | 
|         return null; | 
|     } | 
|     public static QywxSendMsgResponse sendMsg(String token, QywxSendMsgRequest param)  { | 
|         try{ | 
|             String[] interfaceUrl = QywxConstant.SEND_MSG; | 
|             String url = interfaceUrl[0].replace("${accesstoken}",token); | 
|             QywxSendMsgResponse response = sendHttpRequestSingle(url,interfaceUrl[1],JSONObject.toJSONString(param) | 
|                     ,new TypeReference<QywxSendMsgResponse>(){}); | 
|             log.error("推送消息结果{}",JSONObject.toJSONString(response)); | 
|             if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|                 return response; | 
|             } | 
|         }catch (Exception e){ | 
|   | 
|         } | 
|   | 
|         return null; | 
|     } | 
|     public static List<QywxUserListResponse> getUserList(String token,String depatId)   { | 
|         try { | 
|             String[] interfaceUrl = QywxConstant.GET_DEPARTMENT_USER_LIST; | 
|             String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${departmentId}",depatId); | 
|             QywxBaseResponse<List<QywxUserListResponse>> response = sendHttpRequest(url,interfaceUrl[1],"",new TypeReference<QywxBaseResponse<List<QywxUserListResponse>>>(){}); | 
|             if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|                 return response.getData(); | 
|             } | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|         } | 
|   | 
|         return null; | 
|     } | 
|     public static InputStream getMediaInputstream(String token, String media)   { | 
|         try { | 
|             String[] interfaceUrl = QywxConstant.GET_MEDIA; | 
|             String url = qyUtil.qiweiUrl+interfaceUrl[0].replace("${accesstoken}",token).replace("${media_id}",media); | 
|             log.info("企业微信临时素材获取url=========="+url); | 
|             return  HttpsUtil.connectionInputsteam(url,"GET",null,null); | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|             log.error("企业微信临时素材获取error=========="+e.getMessage()); | 
|         } | 
|   | 
|         return null; | 
|     } | 
|     public static QywxUserInfoResponse getUserInfo(String token,String id)  { | 
|         String[] interfaceUrl = QywxConstant.GET_USER_DETAIL; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${id}",id); | 
|         QywxUserInfoResponse response = sendHttpRequestSingle(url,interfaceUrl[1],"" | 
|                 ,new TypeReference<QywxUserInfoResponse>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response; | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * | 
|      * @param token | 
|      * @param type     媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) | 
|      * @return | 
|      */ | 
|     public static QywxUploadMediaResponse uploadMedia(String token,String type,String imgurl)  { | 
|         String[] interfaceUrl = QywxConstant.UPLOAD_TEMP_MEDIA; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${type}",type); | 
|         QywxUploadMediaResponse response = sendHttpRequestMultifile(url,interfaceUrl[1],imgurl | 
|                 ,new TypeReference<QywxUploadMediaResponse>(){}); | 
|         if(response !=null && response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response; | 
|         } | 
|         return null; | 
|     } | 
|     public static QywxBaseResponse<String> getUserInfoByCode(String token,String code)  { | 
|         String[] interfaceUrl = QywxConstant.GET_USER_BY_AUTH_CODE; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${code}",code); | 
|         QywxBaseResponse<String> response = sendHttpRequest(url,interfaceUrl[1],"" | 
|                 ,new TypeReference<QywxBaseResponse<String>>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response; | 
|         } | 
|         return null; | 
|     } | 
|   | 
|   | 
|     public static String getJsApiTicket(String token)  { | 
|         String[] interfaceUrl = QywxConstant.GET_JSAPI_TICKET; | 
|         String url = interfaceUrl[0].replace("${accesstoken}",token); | 
|         QywxBaseResponse<String> response = sendHttpRequest(url,interfaceUrl[1],"" | 
|                 ,new TypeReference<QywxBaseResponse<String>>(){}); | 
|         if(response.getErrcode()!=null && response.getErrcode() ==0){ | 
|             return response.getTicket(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 发起wms接口请求 | 
|      * @param url | 
|      * @param name | 
|      * @param param | 
|      * @param typeReference | 
|      * @return | 
|      * @param <T> | 
|      */ | 
|     public static   <T> QywxBaseResponse<T> sendHttpRequest(String url, String name, String param, TypeReference<QywxBaseResponse<T>> typeReference){ | 
|         log.info("【"+name+"】================开始===="+url+"\nparam==========================:"+ JSONObject.toJSONString(param)); | 
|         if ( StringUtils.isNotBlank(url)) { | 
|             String res = null; | 
|             try { | 
|                 Map<String,String> headers = new HashMap<>(); | 
|                 res = HttpsUtil.postJson(qyUtil.qiweiUrl+url,param); | 
|                 QywxBaseResponse result = JSONObject.parseObject(res, typeReference.getType()); | 
|                 logResult(result,name); | 
|                 return  result; | 
|             }catch (Exception e){ | 
|                 e.printStackTrace(); | 
|                 log.error("【"+name+"】================失败===="+ JSONObject.toJSONString(param)); | 
|             } | 
|         } | 
|         return  null; | 
|     } | 
|     public static  <T extends QywxBaseSingleResponse>  T sendHttpRequestMultifile(String url, String name, String imgUrl  , TypeReference<T> typeReference){ | 
|         log.info("【"+name+"】================开始===="+ imgUrl); | 
|         if ( StringUtils.isNotBlank(url)) { | 
|             String res = null; | 
|             try { | 
|                  res = HttpsUtil.uploadTempMedia (qyUtil.qiweiUrl+url,imgUrl); | 
|                 log.info("从企微接口:{}----上传临时素材结果:{}",url,res); | 
|                 JSONObject jsonObject = JSONObject.parseObject(res); | 
|                 T result = JSONObject.parseObject(res, typeReference.getType()); | 
|                 return  result; | 
|             }catch (Exception e){ | 
|                 e.printStackTrace(); | 
|                 log.error("【"+name+"】================失败===="+ imgUrl); | 
|             } | 
|         } | 
|         return  null; | 
|     } | 
|     public static  <T extends QywxBaseSingleResponse>  T sendHttpRequestSingle(String url, String name, String param, TypeReference<T> typeReference){ | 
|         log.info("【"+name+"】================开始===="+ JSONObject.toJSONString(param)); | 
|         if ( StringUtils.isNotBlank(url)) { | 
|             String res = null; | 
|             try { | 
|                 Map<String,String> headers = new HashMap<>(); | 
|                 res = HttpsUtil.postJson(qyUtil.qiweiUrl+url,param); | 
|                 T result = JSONObject.parseObject(res, typeReference.getType()); | 
| //                logResult(result,name); | 
|                 return  result; | 
|             }catch (Exception e){ | 
|                 e.printStackTrace(); | 
|                 log.error("【"+name+"】================失败===="+ JSONObject.toJSONString(param)); | 
|             } | 
|         } | 
|         return  null; | 
|     } | 
|     private static void logResult(QywxBaseResponse res,String name) { | 
|         if( res.getErrcode() !=null && res.getErrcode().equals(0)){ | 
|             log.info("【企业微信接口:"+name+"】================成功====\n"+ JSONObject.toJSONString(res)); | 
|         }else{ | 
|             log.error("【企业微信接口:"+name+"】================失败====:\n"+  JSONObject.toJSONString(res)); | 
|         } | 
|     } | 
| } |