doum
2025-09-26 9057e04efad1b7d61c77a72e5c37a504d0aee935
server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,248 @@
package com.doumee.core.utils.qiyeweixin;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.core.utils.qiyeweixin.model.request.QywxSendMsgRequest;
import com.doumee.core.utils.qiyeweixin.model.response.*;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
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));
        }
    }
}