当前位置:网站首页>浙政钉扫码登录
浙政钉扫码登录
2022-04-22 09:28:00 【WXF_Sir】
专有钉钉扫码登录
参考专有钉钉开发文档,链接:https://openplatform-portal.dg-work.cn/portal/#/helpdoc?docKey=kfzn&slug=engk1k
一、官方流程

二、具体实现
1.准备工作,下载官方sdk
新文档对应sdk: zwdd-sdk-java-1.2.0.jar
旧文档对应sdk:zwdd-sdk-java-1.1.9.jar
zwdd-sdk-php.php
zwdd-sdk-python.py
注:
遇到 org.joda.time.ReadableInstant 报错,请在 pom.xml 中添加如下内容
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10</version>
</dependency>
如遇到 fastjson 相关报错,请在 pom.xml 中添加如下内容
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
2.准备工作,获取appKey和appSecrect
查看应用详情
登录开发者后台,点击“应用管理”-找到应用并点击详情,可以查看 AppKey 和 AppSecret 。

权限管理
申请API授
在我的应用页面,点击左侧接口权限,进入权限管理页面,开启应用功能所需要的权限。请仅仅选择需要的权限进行授权。

3.获取access_token
这里的ExecutableClient和GetClient,都是依赖第一步的sdk(mvn仓库也没有,协同开发时记得带上)
//调用dingding api
//private JSONObject getMsgByApi(String apiMethod,Map paramMap){
private JSONObject getMsgByApi(){
ExecutableClient executableClient =ExecutableClient.getInstance();
executableClient.setAccessKey(appKey); //appKey<1>
executableClient.setSecretKey(appSecret); //appSecret<2>
executableClient.setDomainName(domainName); //domainName<3>
executableClient.setProtocal("https");
executableClient.init();
//executableClient要单例,并且使用前要初始化,只需要初始化一次
String api = "/gettoken.json";
GetClient getClient = executableClient.newGetClient(api);
//设置参数
getClient.addParameter("appkey", appkey); //appKey<1>
getClient.addParameter("appsecret", appsecret); //appSecret<2>
//调用API
String apiResult = getClient.get();
JSONObject map = JSON.parseObject(apiResult);
System.out.println(apiResult);
return map;
}
其中<1>、<2>参数都是来自第二步,而<3>参照下表填入对应接口环境域名
| 环境 | 开放平台域名(调接口使用) | 登录域名(构造登录页面) |
|---|---|---|
| Saas | openplatform.dg-work.cn | login.dg-work.cn |
| 浙政钉 | openplatform-pro.ding.zj.gov.cn(域名对应政务外网IP:59.202.52.1) | login-pro.ding.zj.gov.cn(域名对应政务外网IP:59.202.52.68) |
完整接口地址:https://环境域名/+接口名 例如:https://openplatform.dg-work.cn/gettoken.json
返回的apiResult结果
{
"success":true,
"content":{
"data":{
"accessToken":"c139fe44362f41b6b84862ec82ab84d9", //这就是咱们要的
"expiresIn":"7200"
},
"requestId":"df04428415724925400701038d663a",
"responseMessage":"OK",
"responseCode":"0",
"success": true
}
}
4.获取免登授权码(若是前后端分离,可以交给前端来做)
Web系统可以通过两种方式实现政务钉钉扫码登录。
在企业Web系统里,用户点击使用钉钉扫码登录,第三方Web系统跳转到如下地址:
https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=应用标识&redirect_uri=回调地址&scope=get_user_info&authType=QRCODE
URL中的client_id和redirect_uri两个参数的值填入第三方web系统的应用标识和回调地址。政务钉钉用户扫码登录并确认后,会302到你指定的redirect_uri,并向url参数中追加临时授权码code(此code非authcode)及state两个参数。
注意事项:
参数"redirect_uri=回调地址"涉及的域名,需和创建扫码登录应用授权时填写的回调域名一致,否则会提示无权限访问。
生成二维码大小固定为200*200px,不支持修改。
步骤1:在****页面中通过iframe嵌入页面
通过方式一构造的地址增加embedMode=true的参数
https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=应用标识&redirect_uri=回调地址&scope=get_user_info&authType=QRCODE&embedMode=true
步骤2:扫码成功后需要在页面中监听扫码结果
<script type="application/javascript">
window.addEventListener('message', function(event) {
// 这里的event.data 就是登录成功的信息
// 数据格式:{ "code": "aaaa", "state": "bbbb" }
alert(JSON.stringify(event.data));
});
</script>
注意:生成二维码大小固定为200*200px,不支持修改。

@Override
public void toALiDingDing(HttpServletResponse response) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=")
.append(appID)
.append("&scope=get_user_info&authType=QRCODE")
.append("&redirect_uri=")
.append(redirectUrl);
try {
response.sendRedirect(stringBuilder.toString());
} catch (IOException e1) {
}
}
5.获取用户详情
通过前面几个步骤,我们已经拿到了最关键的两个东西access_token调�9�2接�9�1凭证、code免登授权码
因此,同理,我们在调用接口如下:
//调用dingding api
//private JSONObject getMsgByApi(String apiMethod,Map paramMap){
private JSONObject getMsgByApi(){
ExecutableClient executableClient =ExecutableClient.getInstance();
executableClient.setAccessKey(appKey);
executableClient.setSecretKey(appSecret);
executableClient.setDomainName(domainName);
executableClient.setProtocal("https");
executableClient.init();
//executableClient要单例,并且使用前要初始化,只需要初始化一次
String api = "/rpc/oauth2/dingtalk_app_user.json";
GetClient getClient = executableClient.newGetClient(api);
//设置参数
getClient.addParameter("access_token", "xxxxx");
getClient.addParameter("code", "xxxxx");
//调用API
String apiResult = getClient.get();
JSONObject map = JSON.parseObject(apiResult);
System.out.println(apiResult);
return map;
}
返回apiResult如下(以实际返回为主):
{
"success":true,
"content":{
"data":{
"accountId":100135,
"lastName":"俊锋",
"clientId":"mozi-buc-sso",
"realmId":12371,
"tenantName":"租户2",
"realmName":"租户2",
"namespace":"local",
"tenantId":12371,
"nickNameCn":"俊锋",
"tenantUserId":"12371$100135",
"account":"admin2"
},
"success":true,
"responseMessage":"成功",
"responseCode":"0"
}
}
| responseCode | responseMessage |
|---|---|
| 240111 | code失效或不存在 |
| 240133 | 应用accessToken失效或不存在 |
6.走自己的登录业务吧
版权声明
本文为[WXF_Sir]所创,转载请带上原文链接,感谢
https://blog.csdn.net/WXF_Sir/article/details/124325342
边栏推荐
猜你喜欢
随机推荐
Numpy notes (vstack, random.permutation, empty_like, empty, diff, random.choice, random.random, ISIN)
云数引领下,桑达股份2021年营收427.04亿元,同比增长33.21%
Open3D点云处理
一文MOS管串联并联驱动应用解析-KIA MOS管
sqlserver 数据传输到 mysql
Stream API 优化代码
PHP & Laravel & 掌握 api 生成 token 的几种方式以及一些注意事项(坑)
一文学会text-justify,orientation,combine文本属性
经典场效应管如何快速关断技巧-KIA MOS管
How to add mailbox email in MySQL data table
微搭低代码零基础入门课(第二课)
ERP 集成对公司系统完善的重要性
电脑拆机清灰及机械硬盘安装记录
jsp页面嵌套
MySQL-on duplicate key upate/case when语法使用
【谈思生物直播课】——湖景生物王子元博士关于基因治疗乙肝的探索
C 标准库 - <time.h>
Oracle 18C RAC installation grid execution script root SH error, prcr-1013: unable to start resource ora ons
好用的记笔记软件
openlayer中,svg图片无width如何修改大小










