钉钉扫码登录网站

  • 前言

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

流程如下:

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网站的更多相关文章

  1. 使用Django2.0.4集成钉钉第三方扫码登录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉 ...

  2. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  3. uniapp实现钉钉扫码登录

    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...

  4. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  5. (钉钉)第三方WEB网站扫码登录

    年底在做钉钉和公司的知识库产品的对接,怎么使用钉钉api的如下: 第一步: 登录:https://oa.dingtalk.com/#/welcome 这点可以自己建立一个企业账号进行测试 点击工作台建 ...

  6. 【JavaWeb开发】初步实现网站应用钉钉扫码登录

    http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...

  7. RobotFramework:钉钉扫码登录UI自动化

    背景: 遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先F12抓包看下都有什么数据传输吧. 分析: 先熟悉下钉钉扫码登录的逻辑,参考官文:https://open-doc.ding ...

  8. 二维码生成插件qrious及网站扫码登录的一些理解

    什么是二维码 ​ 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型. ...

  9. 手机端可以和PC端同时在线-java QRCode 实现网站扫码登录(即支持同帐号多设备同时登录)

    微信扫码测试地址:: http://sms.reyo.cn 用户名:aa 密码:123456 扫码登录实现方式很多,比如ajax轮询,http长连接(comet...),websocket,event ...

随机推荐

  1. mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法

    win10很完美,用的也很舒服!当然人无完人,也总有不尽如人意的时候.比如说我们经常用的远程mstsc,就出现了一个坑,既然出现坑了,我们就得把坑解决掉吧!下面就记录一下这个坑的解决方法. 本文地址: ...

  2. 如何用chrome注册版权登记系统

    版权登记系统的网址: http://apply.ccopyright.com.cn/goadatadic/registergetList.do 打开网站,一股古朴的气息扑面而来,嗯,一看就是IE时代的 ...

  3. vscode mysql v0.3插件 连接不了

    环境: centos7.6  x64 python 3.6 插件mysql v0.3 解决办法:回滚插件版本v0.2.3 使用方法注意: https://www.cnblogs.com/-admin- ...

  4. Android--UI之TextView

    前言 开门见山,这一篇博客主要讲一下在Android开发中,UI控件TextView的一些使用方式,并且通过四个例子实现一般项目中需要的效果来讲解TextView的使用.并且在之后的一段时间之内,都会 ...

  5. 扒光IT界江湖骗子巴蜀万明的底裤

    扒光IT界江湖骗子巴蜀万明的底裤 北京IT界出了个江湖骗子,名叫万明,常年在北京IT界乃至中国IT界招摇撞骗.因其姓名太过大众化,容易误伤他人,对搜索引擎也不够友好,所以前缀以其招摇撞骗常用的一家空壳 ...

  6. Java 容器 & 泛型:四、Colletions.sort 和 Arrays.sort 的算法

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 本来准备讲 Map集合 ,还是喜欢学到哪里总结吧.最近面试期准备准备,我是一员,成功被阿里在线笔试秒杀 ...

  7. ZOJ Problem Set - 3713

    题意:给定一个字符串,用字符串ASC2码16进制数输出 ,并在前面输出字符串长度的16进制,输出长度的规则是 先输出长度的二进制数的后七位的十六进制(如果左边还有1 则这在后七位前面加上个1再输出  ...

  8. ③JSP经典回顾

    jsp概述 jsp实际就是一个高级servlet,比servlet容易很多.jsp/servlet在jsp容器中运行.例如,Tomcat就是一个Servlet/jsp容器. 关于tomcat:[传送门 ...

  9. Docker 简述

    转自:https://cloud.tencent.com/developer/article/1354393 虚拟机和 docker 的区别,如下图: Image (镜像) 镜像不包含任何动态数据,其 ...

  10. Win32编程之静态库编写与使用.动态链接库的编写与使用

    Win32编程之静态库编写与使用.动态链接库的编写与使用 一丶什么是静态库.什么是动态链接库. 静态库其实就是解决模块开发的一种解决方案.在以前.我们写代码的时候.每个人都可以独立写一个项目.但是现在 ...