设为首页 加入收藏

TOP

用java实现“钉钉微应用,免登进入某H5系统首页“功能”(一)
2019-10-08 11:16:05 】 浏览:40
Tags:java 实现 应用 进入 系统 首页 功能

一、前言

哈哈,这是我的第一篇博客。

先说一下这个小功能的具体场景:

用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首页,否则显示“您无权限”。

补充:又加了一个小需求,就是免登成功,会给该用户发条消息

我是参考钉钉开发文档实现的这个小功能,文档地址:https://ding-doc.dingtalk.com/doc#/serverapi2/clotub

二、准备工作

 需要创建一个微应用:https://open-dev.dingtalk.com

 

1.是在企业内部开发中创建H5微应用,不是第三方企业应用中

企业内部开发:企业内部开发是指“开发企业内部应用”供企业内部的人员使用。企业可以选择由企业内部的开发者进行开发,或者由企业授权定制服务商进行开发。

第三方企业应用:第三方企业应用开发,是指开发者以钉钉、企业之外的第三方身份,基于钉钉的开放能力开发应用,并提供给钉钉上的其他组织使用。(哈哈,这个区别我是直接copy文档中的)

2.H5工程中,创建的一个前端页面ddNoLogin.html(哈哈,这个起名有点中文式英语,因为我没有找到合适的英文单词):

该页面是用来获取免登授权码,然后把该code传递给后台接口的。

3.填写公司服务器的公网IP

可以敲命令查看该ip:curl ifconfig.me

 4.微应用创建好,会生成三个参数,

agentId、appKey、appSecret

外加一个corpId(钉钉开发者平台的首页中有显示),这四个参数值是固定的,后续开发需用

5.接口权限

高级权限-企业通讯录中的接口都需要给开通

6.最后发布应用

三、功能开发

哈哈,要开始敲代码了

1.获取免登授权码code

这里调用的是钉钉JS-API中的方法,本功能调用的方法是不需要鉴权的,如果需要鉴权,则还需先dd.config。

关于功能方法是否需要鉴权,可以去查看JSAPI总览

ddNoLogin.html:

<!DOCTYPE html>
<html>
<head>
    <title>微应用登陆</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1 user-scalable=0" />
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/java script" src="http://g.alicdn.com/dingding/open-develop/1.9.0/dingtalk.js"></script>
</head>
<body>
<div id="ddNoLogin"></div>
<script type="text/java script">
        dd.ready(function() {
		//1.获取免登授权码code
		dd.runtime.permission.requestAuthCode({
			corpId : corpId ,  //企业id
			onSuccess : function(result) {
				var code = result.code;
				getUserInfo(code);   //通过该code可以获取用户身份
			},
			onFail : function(err) {
				alert('出错了, ' + err);
			}
		});
	});
        function getUserInfo(code) {
		$.ajax({
			type : "GET",
			url : "/xxx/noLogin?code=" + code,
			async : false,
			dataType : 'json',
			contentType : "application/json;charset=utf-8",
			success : (function(res) {
				if(res.code == "0000"){					   				 
			           window.location.href = '/#/xxxxx';
                                }else{
                                   $('#ddNoLogin').html(res.msg);
                                }
			}),
		});
	}
</script>
</body>
</html>

获取code的实现是需要用前端JS去写的

2.获取access_token

钉钉提供了开放的api后台接口,这里通过appkey和appsecret获取token,请求路径:https://oapi.dingtalk.com/gettoken?appkey=key&appsecret=secret

该token有效期是2个小时,有效期内重复获取,会返回相同结果,并自动续期,

故这里我的实现是:定时刷新token,每隔1小时50分钟去获取钉钉的token,并缓存到redis中(我把钉钉的相关配置都放入到application.yml中了)

DdTokenTask.java:

/**
 * 定时获取钉钉的token
 */
@Component
@EnableScheduling
public class DdTokenTask {

    @Autowired
    private JedisClient jedisClient;

    public static final long cacheTime = 1000 * 60 * 55 * 2;//1小时50分钟
    @Value("${dtalk.tokenUrl}")
    private String tokenUrl;
    @Value("${dtalk.app.key}")
    private String appKey;
    @Value("${dtalk.app.secret}")
    private String appSecret;
    @Value("${dtalk.redisTokenKey}")
    private String tokenKey;
    @Value("${dtalk.taskRun}")
    private String taskRun;


    /**
     * 每隔1小时50分钟获取
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java代码执行过程概述 下一篇建议收藏-电脑重装后,开发软件Id..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目