springboot+钉钉微应用通过免登码获取用户信息。

添加maven依赖:

<!--钉钉-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibaba-dingtalk-service-sdk</artifactId>
    <version>2.0.0</version>
</dependency>

authCode

由前端获取authCode,传给后端
在这里插入图片描述

钉钉管理Controller

    /**
      * @description: 根据免登授权码, 获取登录用户身份
      * @param
      * @return
      * @throws
      * @author lgn
      * @date 2022/9/27 18:12
      */
    @GetMapping("/getGingTalkUser")
    public AjaxResult getGingTalkUser(@RequestParam(value = "authCode") String authCode) {
        return AjaxResult.success(dingTalkUserService.getGingTalkUser(authCode));

    }

DingTalkUserServiceImpl

package com.ruoyi.lab.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.ruoyi.lab.service.DingTalkUserService;
import com.taobao.api.ApiException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;

/**
 * @ClassName DingTalkUserServiceImpl * @Description TODO
 * @Author lgn
 * @Date 18:15 2022/9/27
 * @Version 1.0
 **/
@Service
@RefreshScope //热刷新
public class DingTalkUserServiceImpl implements DingTalkUserService {
    static Logger logger = LoggerFactory.getLogger(DingTalkUserServiceImpl.class);



    @Override
    public JSONObject getGingTalkUser(String authCode) {
        JSONObject jsonObject=new JSONObject();

        String appKey="dingxyd8mxocjzgbiyoj";
        String appSecret="f168jCW6xAVRcGgvCXteTVIJV_WNuAhUZaLFCHEokzqBwMD_XakE7-bL-MIlrHJK";

        String accessToken=getAccessToken(appKey,appSecret);
        String info=getuserinfo(authCode,accessToken);
        jsonObject.put("GingTalkUser",info);
        jsonObject.put("accessToken",accessToken);

        return jsonObject;
    }

    /**
     * 在使用accessToken时,请注意:
     * accessToken的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的accessToken。
     * 开发者需要缓存accessToken,用于后续接口的调用。因为每个应用的accessToken是彼此独立的,所以进行缓存时需要区分应用来进行存储。
     * 不能频繁调用接口,否则会受到频率拦截。
     *
     * @param appKey
     * @param appSecret
     * @return
     */
    public static String getAccessToken(String appKey, String appSecret) {

        String getAccessToken="";

        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
        OapiGettokenRequest request = new OapiGettokenRequest();

        request.setAppkey(appKey);
        request.setAppsecret(appSecret);
        request.setHttpMethod(HttpMethod.GET.name());

        try {
            OapiGettokenResponse response = client.execute(request);
            if (response.isSuccess()) {
                return response.getAccessToken();
            } else {
                logger.info(response.getErrorCode());
                logger.info(response.getErrmsg());
            }
        } catch (Exception e) {
            // 需要自己处理异常
            e.printStackTrace();
        }

        return getAccessToken;
    }

    /**
      * @description: 发送post请求
      * @param
      * @return
      * @throws
      * @author lgn
      * @date 2022/9/27 18:18
      */
    public String getuserinfo(String authCode, String accessToken) {

        String getBody="";

        try {
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
            OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
            req.setCode(authCode);
            OapiV2UserGetuserinfoResponse rsp = client.execute(req, accessToken);
            System.out.println(rsp.getBody());
            getBody=rsp.getBody();

        } catch (ApiException e) {
            e.printStackTrace();
        }

        return getBody;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值