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>