第三方应用与钉钉集成所需 工具类

package com.csjs.coreapp.prove.utils;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.aliyun.dingtalkoauth2_1_0.Client;
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest;
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
import com.aliyun.dingtalktodo_1_0.models.CreateTodoTaskHeaders;
import com.aliyun.dingtalktodo_1_0.models.CreateTodoTaskRequest;
import com.aliyun.tea.TeaException;

import com.aliyun.teaopenapi.models.*;
import com.aliyun.teautil.models.RuntimeOptions;
import com.csjs.coreapp.prove.entity.SysProve;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import sun.net.www.protocol.http.Handler;

import java.net.URLStreamHandler;
import java.util.Arrays;
import java.util.HashMap;

public class DingApiUtils {
    public static final String corpId = "ding9de32f70******84d735c2f4657eb6378f";
    public static final Long agentId = 1139606534L;
    private static final String appKey = "dingbj*****ur7xbhjxk6h";
    private static final String appSecret = "15ns8yle0_2HiPxpvs1ybBtNH9RwnJyniRGJ**NPdYOpSN54c5EJ_dRK_lkpwsJ";

    /**
     * 新增钉钉待办任务
     * @param creatorId 创建者id
     * @param executorIds  执行者ids
     * @param title    待办标题
     * @param description 待办备注
     * @param url    待办url
     * @return
     */
    public static String addTasks(String creatorId, String[] executorIds,
                                  String title, String description, String url
    ) {
        // 第一步 ============================== 根据手机号获取userId
        String userIdByMobile = getUserIdByMobile("152*****491");
        // 第二步 =========================== 根据 userId 获取用户信息
        String userInfo = getUserInfoByUserId(userIdByMobile);
        JSONObject jsonObject = JSONUtil.parseObj(userInfo);
        String unionid = jsonObject.getJSONObject("result").get("unionid").toString();
        System.out.println(userInfo);
        // 第三步 =========================== 待办任务参数的封装
        HashMap<String, Object> params = new HashMap<>();
        // 待办标题
        params.put("subject", title);
        // 创建者的unionid
        params.put("creatorId", creatorId);
        // 待办备注描述
        params.put("description", description);
        // 业务系统唯一标识
//        params.put("sourceId","111111111111111111111111");
        // 执行者的unionid    可以是数组或字符串
        params.put("executorIds",executorIds);
        // 第三方待办任务跳转地址
        HashMap<String, Object> detailUrl = new HashMap<>();
        detailUrl.put("appUrl", url);   // 移动端
        detailUrl.put("appUrl", url);   // pc 端
        params.put("detailUrl", detailUrl);
        // 参与者的unionid    可以是数组或字符串
        params.put("participantIds", Arrays.asList(unionid));
        // 生成的待办是否仅展示在执行者的待办列表中。 Boolean
        params.put("isOnlyShowExecutor", false);
        // 优先级  10:较低 20:普通 30:紧急 40:非常紧急
        params.put("priority", 20);
        // 待办通知配置 DING通知配置,目前仅支持取值为1,表示应用内DING。
        HashMap<String, Object> dingNotify = new HashMap<>();
        dingNotify.put("dingNotify", "1");
        params.put("notifyConfigs", dingNotify);
        // 第四步 =========================== 发送待办任务 采用HTTP 方式  其他方式请参照官方API
        HttpRequest post = HttpUtil.createPost("https://api.dingtalk.com/v1.0/todo/users/" + creatorId +
                "/tasks?operatorId=" + unionid);
        post.header("x-acs-dingtalk-access-token", getAccessToken());
        JSON parse = JSONUtil.parse(params);
        post.body(parse);
        HttpResponse execute = post.execute();
        String body = execute.body();
        System.out.println(body);
        return null;
    }

    /***
     * 根据用户userId获取用户详情
     * @return
     */
    public static String getUserInfoByUserId(String userId) {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
        OapiV2UserGetRequest req = new OapiV2UserGetRequest();
        req.setUserid(userId);
        req.setLanguage("zh_CN");
        try {
            OapiV2UserGetResponse rsp = client.execute(req, getAccessToken());
            return rsp.getBody();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /***
     * 根据手机号获取钉钉用户userID
     * @return
     */
    public static String getUserIdByMobile(String mobile) {
        String userId = "";
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
        OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
        req.setMobile(mobile);
        try {
            OapiV2UserGetbymobileResponse rsp = client.execute(req, getAccessToken());
            String body = rsp.getBody();
            JSONObject jsonObject = JSONUtil.parseObj(body);
            JSONObject result = JSONUtil.parseObj(jsonObject.get("result").toString());
            userId = result.get("userid").toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return userId;
    }


    /***
     * 获取企业凭证 access_token
     * @return
     */
    public static String getAccessToken() {
        GetAccessTokenResponse accessToken = null;
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        try {
            com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
            GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
                    .setAppKey(appKey)
                    .setAppSecret(appSecret);
            accessToken = client.getAccessToken(getAccessTokenRequest);

        } catch (TeaException err) {
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
            }

        } catch (Exception _err) {
            TeaException err = new TeaException(_err.getMessage(), _err);
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
            }

        }
        return accessToken.getBody().accessToken;
    }

    public static void main(String[] args) {
//        addTasks();
    }
}

相关maven 依赖

        <!--hutool工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.1</version>
        </dependency>
        <!--钉钉sdk-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dingtalk</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>2.0.0</version>
        </dependency>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值