钉钉常用工具类DingTalkUtil

留存DingTalkUtil,有需要的朋友请自行配置应用参数

public class DingTalkUtil {
    private static String appId = "";
    private static String appSecret = "";
    //微应用的配置
    public static String agentId = "";
    private static String appKey = "";
    private static String appSecretWei = "";

    public static void main(String[] args) throws Exception {
        String s = mediaUpload(getToken());
        System.out.println(s);

    }

    public static OapiSnsGetuserinfoBycodeResponse getUserInfoByCode(String code) throws ApiException {
        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
        OapiSnsGetuserinfoBycodeRequest req = new OapiSnsGetuserinfoBycodeRequest();
        req.setTmpAuthCode(code);
        return client.execute(req, appId, appSecret);
    }

    /**
     * 根据unionid获取用户Id
     *
     * @param accessToken
     * @param unionid
     * @throws ApiException
     */
    public static String getUserIdByUnionid(String accessToken, String unionid) throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getUseridByUnionid");
        OapiUserGetbyunionidRequest request = new OapiUserGetbyunionidRequest();
        request.setHttpMethod("GET");
        request.setUnionid(unionid);
        OapiUserGetbyunionidResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        String body = response.getBody();
        Map<String, Object> map = JSONUtil.parseJSONstr2Map(body);

        return map.get("userid").toString();
    }

    /**
     * 获取微应用Token
     *
     * @return
     * @throws ApiException
     */
    public static String getToken() throws Exception {
//        String dingTalkToken = RedisUtils.getString("dingTalkToken");
//        if (StringUtils.isNotBlank(dingTalkToken)){
//            return dingTalkToken;
//        }
        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
        OapiGettokenRequest request = new OapiGettokenRequest();
        request.setAppkey(appKey);
        request.setAppsecret(appSecretWei);
        request.setHttpMethod("GET");
        OapiGettokenResponse response = client.execute(request);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        String accessToken = response.getAccessToken();
        //  RedisUtils.set("dingTalkToken",accessToken,7200);
        return accessToken;
    }

    /**
     * @return  根据token和请求授权码获取用户id
     * @throws ApiException
     */
    public static String getUerIdByAccessTokenAndCode(String accessToken, String requestAuthCode) throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
        OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
        request.setCode(requestAuthCode);
        request.setHttpMethod("GET");
        OapiUserGetuserinfoResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        String userId = response.getUserid();
        return userId;
    }

    /**
     * 获取用户详情
     *
     * @return
     * @throws ApiException
     */
    public static OapiUserGetResponse getUerDetailsByAccessTokenAndUserId(String accessToken, String userId) throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
        OapiUserGetRequest request = new OapiUserGetRequest();
        request.setUserid(userId);
        request.setHttpMethod("GET");
        return client.execute(request, accessToken);
    }

    /**
     * 获取用户详情
     *
     * @return
     * @throws ApiException
     */
    public static OapiUserGetResponse getUerDetailsByCode(String requestAuthCode) throws Exception {
        //1、获取accessToken
        String accessToken = getToken();
        //2、根据token和requestAuthCode得userId
        String userId = getUerIdByAccessTokenAndCode(accessToken, requestAuthCode);
        //3、根据token和userId获取用户详情
        OapiUserGetResponse response = getUerDetailsByAccessTokenAndUserId(accessToken, userId);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response;
    }

    /**
     * 获取部门列表
     *
     * @param accessToken
     * @param departmentId
     * @return
     * @throws ApiException
     */
    public static OapiDepartmentListResponse getDepartmentList(String accessToken, String departmentId) throws ApiException {
        if (StringUtils.isBlank(departmentId)) {
            departmentId = "1";//顶级部门为1
        }
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
        OapiDepartmentListRequest request = new OapiDepartmentListRequest();
        request.setId(departmentId);
        request.setFetchChild(false);
        request.setHttpMethod("GET");
        OapiDepartmentListResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response;
    }

    /**
     * 根据部门Id获取用户列表
     *
     * @param accessToken
     * @param departmentId
     * @return
     * @throws ApiException
     */
    public static OapiUserListbypageResponse getUserList(String accessToken, String departmentId) throws ApiException {
        if (StringUtils.isBlank(departmentId)) {
            departmentId = "1";//顶级部门为1
        }
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/listbypage");
        OapiUserListbypageRequest request = new OapiUserListbypageRequest();
        request.setDepartmentId(Long.valueOf(departmentId));
        request.setOrder("entry_desc");
        request.setOffset(0L);
        request.setSize(100L);
        request.setHttpMethod("GET");
        OapiUserListbypageResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response;
    }

    /**
     * 获取部门详情
     *
     * @param accessToken
     * @param departmentId
     * @return
     * @throws ApiException
     */
    public static OapiDepartmentGetResponse getDepartmentInfo(String accessToken, String departmentId) throws ApiException {
        if (StringUtils.isBlank(departmentId)) {
            departmentId = "1";
        }
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/get");
        OapiDepartmentGetRequest request = new OapiDepartmentGetRequest();
        request.setId("2");
        request.setHttpMethod("GET");
        OapiDepartmentGetResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response;
    }

    public static OapiUserGetResponse getUserByUnionid(String unionid) throws Exception {
        String token = getToken();
        String userId = getUserIdByUnionid(token, unionid);
        OapiUserGetResponse response = getUserByUserId(token, userId);
        return response;
    }

    public static OapiUserGetResponse getUserByUserId(String accessToken, String userId) throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
        OapiUserGetRequest request = new OapiUserGetRequest();
        request.setUserid(userId);
        request.setHttpMethod("GET");
        OapiUserGetResponse response = client.execute(request, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response;
    }

    public static Long sendMessage(String unionid, String content) throws Exception {
        if (StringUtils.isEmpty(unionid)) {
            throw new RuntimeException("用户列表不能为空");
        }
        String token = getToken();
        String userId = getUserIdByUnionid(token, unionid);
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
        OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
        request.setUseridList(userId);
        request.setAgentId(Long.valueOf(agentId));
        request.setToAllUser(false);
        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
        msg.setMsgtype("text");
        msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
        msg.getText().setContent(content);
        request.setMsg(msg);
        OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, token);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response.getTaskId();
    }


    public static Long sendLinkMessage(String unionid, String title, String url) throws Exception {
        if (StringUtils.isEmpty(unionid)) {
            throw new RuntimeException("用户列表不能为空");
        }
        String token = getToken();

        String userId = getUserIdByUnionid(token, unionid);
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
        OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
        request.setUseridList(userId);
        request.setAgentId(Long.valueOf(agentId));
        request.setToAllUser(false);
        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
        msg.setMsgtype("link");
        msg.setLink(new OapiMessageCorpconversationAsyncsendV2Request.Link());
        msg.getLink().setTitle(title);
        msg.getLink().setText(title);
        msg.getLink().setMessageUrl(url);
        msg.getLink().setPicUrl("@lADOADmaWMzazQKA");
        request.setMsg(msg);
        OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, token);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }
        return response.getTaskId();
    }

    /**
     * 媒体文件上传
     *
     * @param accessToken
     * @return mediaId 媒体文件上传后获取的唯一标识
     * @throws ApiException
     */
    public static String mediaUpload(String accessToken) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/media/upload");
        OapiMediaUploadRequest req = new OapiMediaUploadRequest();
        //type image:图片 voice:语音  file:普通文件例如word、excel文件
        req.setType("image");
        req.setMedia(new FileItem("D:\\dev\\钉钉.png"));
        OapiMediaUploadResponse response = client.execute(req, accessToken);
        if (0 != response.getErrcode()) {
            throw new RuntimeException(response.getErrmsg());
        }

        return response.getMediaId();
    }

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值