码迷,mamicode.com
首页 > Web开发 > 详细

钉钉扫码登录web网站

时间:2018-08-03 18:48:09      阅读:2944      评论:0      收藏:0      [点我收藏+]

标签:过期   pen   http   doc   result   ram   persist   inf   art   

钉钉扫码登录网站

  • 前言
    ?由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过。前端我们采用的是把二维码内嵌到我们的网页中。

流程如下:
技术分享图片

1.登录钉钉后台创建一个企业应用

技术分享图片

2.根据appid与app_secret获取access_token

  • access_token有效期为2个小时,可以自行缓存。
    /**
     * 获取access token 有效期2 个小时,有效期获取,值不变,时间延长
     * @return
     */
    public static DdResult getAccessToken(String appid, String secret){
        String requestUrl = "https://oapi.dingtalk.com/sns/gettoken?appid=APPID&appsecret=APPSECRET";
        requestUrl = requestUrl.replace("APPID", appid).replace("APPSECRET", secret);
        String accessTokenResult = HttpClientUtil.doGet(requestUrl);
        log.info("------->> >> -------->> request ding ding access token result:{}", accessTokenResult);
        if (StringUtils.isNotBlank(accessTokenResult)) {
            return JSON.parseObject(accessTokenResult, new TypeReference<DdResult>(){});
        }
        return new DdResult();
    }

3.获取持久码persistent_code

  • 根据前端传回来的code与上一步获取的access_token获取persistent_code,持久码暂时无过期时间。

    /**
     * 根据code与accessToken获取用户的持久授权码
     * @param code 临时码,只能使用一次
     * @param accessToken 有效期,2个小时
     * @return
     */
    public static DdResult getPersistentCode(String code, String accessToken){
        String requestUrl = "https://oapi.dingtalk.com/sns/get_persistent_code?access_token=" + accessToken;
        HashMap<String, String> params = Maps.newHashMap();
        params.put("tmp_auth_code", code);
        String accessTokenResult = HttpClientUtil.doPostJson(requestUrl, JSON.toJSONString(params));
        log.info("------->> >> -------->> ding ding persistent token result: {}", accessTokenResult);
        return JSON.parseObject(accessTokenResult, DdResult.class);
    }

4.获取用户授权码SNS_TOKEN

  • 根据上一步获取的openid,persistent_code与2步中获取的access_token获取SNS_TOKEN

    /**
     * 获取sns token
     * @param accessToken
     * @param openId
     * @param persistentCode
     * @return
     */
    public static DdResult getSnsToken(String accessToken, String openId, String persistentCode) {
        HashMap<String, String> params = Maps.newHashMap();
        params.put("openid", openId);
        params.put("persistent_code", persistentCode);
        String snsTokenRequestUrl = "https://oapi.dingtalk.com/sns/get_sns_token?access_token=" + accessToken;
        String result = HttpClientUtil.doPostJson(snsTokenRequestUrl, JSON.toJSONString(params));
        log.info("------->> >> -------->> request ding ding sns token result:{}", result);
        return JSON.parseObject(result, new TypeReference<DdResult>(){});
    }

5.获取用户信息

  • 根据上一步获取的SNS_TOKEN获取用户信息。

    public static DdResult getUserInfo(String snsToken) {
        String userInfoRequestUrl = "https://oapi.dingtalk.com/sns/getuserinfo?sns_token=" + snsToken;
        String result = HttpClientUtil.doGet(userInfoRequestUrl);
        log.info("------->> >> -------->> >> request ding ding sns token result:{}", result);
        if (StringUtils.isBlank(result)) {
            return null;
        }
        return JSON.parseObject(result, new TypeReference<DdResult>() {});
    }

?拿到用户的信息就可以去做登录操作了。

钉钉扫码登录web网站

标签:过期   pen   http   doc   result   ram   persist   inf   art   

原文地址:https://www.cnblogs.com/chaos-x/p/9415665.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!