釘釘掃碼登陸web網站

釘釘掃碼登陸網站

  • 前言
     因爲本公司先後臺分離,這裏主要講述後臺的實現邏輯與過程,前端相關的一略而過。前端咱們採用的是把二維碼內嵌到咱們的網頁中。

流程以下:
前端

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>() {});
    }

 拿到用戶的信息就能夠去作登陸操做了。api

相關文章
相關標籤/搜索