钉钉服务实现层
钉钉服务端SDK下载
所有版本 SDK下载地址
Java版本:点击下载
JAR包
<dependency>
<groupId>com.dingtalk.api</groupId>
<artifactId>top-api-sdk-dev</artifactId>
<version>ding-open-mc-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/taobao-sdk-java-auto_1479188381469-20210623.jar</systemPath>
</dependency>
Service层
/**
* @description: 钉钉
*/
public interface DingTalkService {
/**
* 获取access_token
* @return
*/
String requestAccessToken();
/**
* 获取unionid
* @return
*/
String requestUnionId(String userId);
}
ServiceImpl层
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.deloitte.pms.common.redis.RedisUtil;
import com.deloitte.pms.common.utils.StringUtil;
import com.deloitte.pms.performance.provider.sf.service.DingTalkService;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* @description: 钉钉服务实现层
*/
@Slf4j
@Service
public class DingTalkServiceImpl implements DingTalkService {
@Autowired
private RedisUtil redisUtil;
@Value("${dk.tokenUrl}")
private String tokenUrl;
@Value("${dk.unionIdUrl}")
private String unionIdUrl;
@Value("${dk.appKey}")
private String appKey;
@Value("${dk.appSecret}")
private String appSecret;
@Override
public String requestAccessToken() {
DingTalkClient client = new DefaultDingTalkClient(tokenUrl);
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(appKey);
request.setAppsecret(appSecret);
request.setHttpMethod("GET");
OapiGettokenResponse response = null;
try {
response = client.execute(request);
} catch (ApiException e) {
e.printStackTrace();
}
if (response != null) {
if (0 == response.getErrcode()) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
return jsonObject.getString("access_token");
} else {
return null;
}
}
return null;
}
@Override
public String requestUnionId(String userId) {
//从redis缓存获取企业内部应用的access_token
String accessToken = null;
if (redisUtil.hasKey("DingTalk:accessToken")){
accessToken = redisUtil.get("DingTalk:accessToken").toString();
}
//redis如果没有重新获取并存入redis
if (!StringUtil.isNotBlank(accessToken)) {
accessToken = requestAccessToken();
redisUtil.set("DingTalk:accessToken", accessToken, 7200);
}
//根据userid获取用户详情
DingTalkClient client = new DefaultDingTalkClient(unionIdUrl);
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(userId);
req.setLanguage("zh_CN");
OapiV2UserGetResponse rsp = null;
try {
rsp = client.execute(req, accessToken);
} catch (ApiException e) {
e.printStackTrace();
}
if (rsp != null) {
if (0 == rsp.getErrcode()) {
JSONObject jsonObject = JSON.parseObject(rsp.getBody()).getJSONObject("result");
return jsonObject.getString("unionid");
} else {
log.info("获取unionid错误信息:{}", JSON.toJSON(rsp));
return null;
}
}
return null;
}
}