获取钉钉通讯录用户详情

钉钉服务实现层

钉钉服务端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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值