分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

钉钉扫码登录web网站

发布时间:2023-09-06 02:08责任编辑:白小东关键词:暂无标签

钉钉扫码登录网站

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

流程如下:

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

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

  • 参考:
       1. https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.n3ywjK&treeId=168&articleId=104882&docType=1
       2. https://blog.csdn.net/u012888052/article/details/76681381

钉钉扫码登录web网站

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved