怎样进行钉钉钉钉如何进行企业认证证,钉钉钉钉如何进行企业认证证流程

13980人阅读
钉钉开发系列(1)
(一)基本概述:
钉钉中实现免登陆的核心思想就是通过corpId和corpSecret这两个参数来获得免登陆码Code,继而通过Code来获取用户信息,并在后台数据库中比对该用户信息是否存在,如果比对成功就免登陆成功。具体实现的流程图如下:
(二)过程详解:
1.注册企业用户和创建微应用:
这个过程比较简单,略过。
2.获取corpId,corpSecret,agentId:
可以登录钉钉企业用户账号直接获得,可以存储在本地文件中,便于后面存取,本人存储在本地的properties文件中。略过。
3.获取access_token:
在中有获取access_token的方法介绍,通过get方式向https://oapi.dingtalk.com/gettokencorpid=id&corpsecret=secrect请求access_token数据,其中需要两个参数,分别是corpId和corpSecret,网页响应值就是access_token,具体java实现如下:
定义一个get请求的方法:
public class HttpHelper {
url:需要Get请求的网址
返回请求时网页相应的数据,用json存储
public static JSONObject httpGet(String url){
//创建httpClient
CloseableHttpClient httpClient=HttpClients.createDefault();
HttpGet httpGet=new HttpGet(url);
//生成一个请求
RequestConfig requestConfig = RequestConfig.custom().
//配置请求的一些属性
setSocketTimeout(2000).setConnectTimeout(2000).build();
httpGet.setConfig(requestConfig);
//为请求设置属性
CloseableHttpResponse response=
response=httpClient.execute(httpGet);
//如果返回结果的code不等于200,说明出错了
if (response.getStatusLine().getStatusCode() != 200) {
System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()+ ", url=" + url);
HttpEntity entity = response.getEntity();
//reponse返回的数据在entity中
if(entity!=null){
String resultStr=EntityUtils.toString(entity,"utf-8");//将数据转化为string格式
JSONObject result=JSONObject.parseObject(resultStr);
//将结果转化为json格式
if(result.getInteger("errcode")==0){
//如果返回值得errcode值为0,则成功
//移除一些没用的元素
result.remove("errcode");
result.remove("errmsg");
//返回有用的信息
//返回结果出错了,则打印出来
System.out.println("request url=" + url + ",return value=");
System.out.println(resultStr);
int errCode = result.getInteger("errcode");
String errMsg = result.getString("errmsg");
throw new Exception("ErrorCode:"+errCode+"ErrorMsg"+errMsg);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
e.printStackTrace();
} finally {
if (response != null) try {
response.close();
} catch (IOException e) {
e.printStackTrace();
然后是调用httpGet方法获得access_token的代码实现:
public static String getAccess_Token(String corpid,String corpsecret){
String url="https://oapi.dingtalk.com/gettoken?"+"corpid="+corpid+"&corpsecret="+
JSONObject res=HttpHelper.httpGet(url);
//将httpGet方法封装在HttpHelper类中
String access_token="";
if(res!=null){
access_token=res.getString("access_token");
new Exception("Cannot resolve field access_token from oapi resonpse");
return access_
4.获取ticket:
钉钉有关于ticket获取的介绍,通过get方式向https://oapi.dingtalk.com/get_jsapi_ticket?access_token=ACCESS_TOKE请求ticket数据,请求时需要携带一个参数access_token,也就是在步骤3中获得的access。具体java代码实现如下:
* 向网页请求ticket值,用Get方式请求网页
access_token:上面得到的access_token值
返回值是ticket
public static String getTicket(String access_token){
String url="https://oapi.dingtalk.com/get_jsapi_ticket?"+
"access_token="+access_
JSONObject res=HttpHelper.httpGet(url);
//步骤3中有httpGet的定义,只是封装在HttpHelper类中
String ticket="";
if(res!=null){
ticket=res.getString("ticket");
new Exception("Cannot resolve field ticket from oapi resonpse");
5.获取签名signatrue:
钉钉中有关于获取签名的介绍,并且给出了使用的算法,参数说明。所以我们只需要调用它使用的算法,并且做一些格式的调整即可。具体java代码实现如下:
* 生成签名的函数
ticket:签名数据
nonceStr:签名用的随机字符串,从properties文件中读取
timeStamp:生成签名用的时间戳
url:当前请求的URL地址
public static String getSign(String ticket, String nonceStr, long timeStamp, String url) throws Exception {
String plain = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + String.valueOf(timeStamp)
+ "&url=" +
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
//安全hash算法
sha1.reset();
sha1.update(plain.getBytes("UTF-8"));
//根据参数产生hash值
return bytesToHex(sha1.digest());
} catch (NoSuchAlgorithmException e) {
throw new Exception(e.getMessage());
} catch (UnsupportedEncodingException e) {
throw new Exception(e.getMessage());
//将bytes类型的数据转化为16进制类型
private static String bytesToHex(byte[] hash) {
//将字符串转化为16进制的数据
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
String result = formatter.toString();
formatter.close();
6.封装好所有需要的参数,并且传递到企业应用网址的前端H5中。
需要的参数有corpId,agentId,ticket,signature,nonceStr,timeStamp,url。其中nonceStr,timeStamp,url用来在服务器后台生成signatrue签名,然后将ticket,nonceStr,timeStamp和signatrue传送到前台,前台网页就会调用jsapi的dd.config函数重新生成signatrue,和传进的signatrue进行比较,来实现验证过程。java实现如下:
6.封装好所有需要的参数,并且传递到企业应用网址的前端H5中。需要的参数有corpId,agentId,ticket,signature,nonceStr,timeStamp,url.
其中nonceStr,timeStamp,url用来在服务器后台生成signatrue签名,然后将ticket,nonceStr,timeStamp和signatrue传送到前台,前台网页就会
调用jsapi的dd.config函数重新生成signatrue,和传进的signatrue进行比较,来实现验证过程。
* 将所有需要传送到前端的参数进行打包,在前端会调用jsapi提供的dd.config接口进行签名的验证
* request:在钉钉中点击微应用图标跳转的url地址
* 将需要的参数打包好,按json格式打包
public static String getConfig(HttpServletRequest request){
*以http://localhost/test.do?a=b&c=d为例
*request.getRequestURL的结果是http://localhost/test.do
*request.getQueryString的返回值是a=b&c=d
String urlString = request.getRequestURL().toString();
String queryString = request.getQueryString();
String url=
if(queryString!=null){
url=urlString+queryS
String corpId=PropertiesHelp.getValue("corpid");
//一些比较重要的不变得参数本人存储在properties文件中
String corpSecret=PropertiesHelp.getValue("corpsecret");
String nonceStr=PropertiesHelp.getValue("noncestr");
String agentId =PropertiesHelp.getValue("agentid");
//agentid参数
long timeStamp = System.currentTimeMillis() / 1000;
//时间戳参数
String signedUrl =
//请求链接的参数,这个链接主要用来生成signatrue,并不需要传到前端
String accessToken =
//token参数
String ticket =
//ticket参数
String signature =
//签名参数
accessToken=getAccess_Token(corpId,corpSecret);
ticket=getTicket(accessToken);
signature=getSign(ticket,nonceStr,timeStamp,signedUrl);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "{jsticket:'" + ticket + "',signature:'" + signature + "',nonceStr:'" + nonceStr + "',timeStamp:'"
+ timeStamp + "',corpId:'" + corpId + "',agentId:'" + agentId+ "'}";
7.前台对传进来的参数进行验证,并且生成code值,并且将code值传送给后台服务器程序。
验证过程需要调用jsapi的一些借口,所以我们要在前台网页中引入相应的js文件,引入的方法就是直接在前台网页中包含jsapi的js文件,引入代码如下:&script type="text/javascript" src="http://g.alicdn.com/ilw/ding/0.7.3/scripts/dingtalk.js"&
&/script&引入了jsapi之后,我们就需要自己编写js文件对它的相应的接口进行调用,从而获得code,如下的代码是本人根据实际应用编写的js代码,具有详细的注解:
/***************************开始****************************/
* _config 这个参数是在前台的H5文件中我定义的,它的值是通过调用步骤6中封装好的参数来获得的
我们需要明白的一点是,所有的这些文件都是放在企业应用的服务器后台,和钉钉网站没有半毛钱的关系
并且钉钉的jsapi中唯一的作用就是提供了对config的验证和获得code值
对于其他值得获取,如access_token,ticket,sign,username,userid都是自己在后台写java代码通过get或者post方式向
钉钉开发平台请求得来的,并不是从jsapi中的接口得来的
dd.config({
//dd.config方法会对参数进行验证
agentId : _config.agentid,
corpId : _config.corpId,
timeStamp : _config.timeStamp,
nonceStr : _config.nonceStr,
signature : _config.signature,
jsApiList : [
//需要调用的借口列表
'runtime.info',
'biz.contact.choose',
//选择用户接口
'device.notification.confirm',
//confirm,alert,prompt都是弹出小窗口的接口
'device.notification.alert',
'device.notification.prompt',
'biz.util.openLink' ]
*在dd.config()验证通过的情况下,就会执行ready()函数,
*dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在
*该回调函数触发后调用,否则无效,所以你会发现所有对jsapi接口的调用都会在
*ready的回调函数里面
dd.ready(function() {
*获取容器信息,返回值为ability:版本号,也就是返回容器版本
*用来表示这个版本的jsapi的能力,来决定是否使用jsapi
dd.runtime.info({
onSuccess : function(info) {
logger.e('runtime info: ' + JSON.stringify(info));
onFail : function(err) {
logger.e('fail: ' + JSON.stringify(err));
*获得免登授权码,需要的参数为corpid,也就是企业的ID
*成功调用时返回onSuccess,返回值在function的参数info中,具体操作可以在function中实现
*返回失败时调用onFail
dd.runtime.permission.requestAuthCode({
corpId : _config.corpId,
onSuccess : function(info) {
//成功获得code值,code值在info中
alert('authcode: ' + info.code);
*$.ajax的是用来使得当前js页面和后台服务器交互的方法
*参数url:是需要交互的后台服务器处理代码,这里的userinfo对应WEB-INF -& classes文件中的UserInfoServlet处理程序
*参数type:指定和后台交互的方法,因为后台servlet代码中处理Get和post的doGet和doPost
*原本需要传输的参数可以用data来存储的,格式为data:{"code":info.code,"corpid":_config.corpid}
*其中success方法和error方法是回调函数,分别表示成功交互后和交互失败情况下处理的方法
url : 'userinfo?code=' + info.code + '&corpid='
//userinfo为本企业应用服务器后台处理程序
+ _config.corpId,
type : 'GET',
*ajax中的success为请求得到相应后的回调函数,function(response,status,xhr)
*response为响应的数据,status为请求状态,xhr包含XMLHttpRequest对象
success : function(data, status, xhr) {
var info = JSON.parse(data);
alert("用户"+info.name+"登录成功");
error : function(xhr, errorType, error) {
logger.e("yinyien:" + _config.corpId);
alert(errorType + ', ' + error);
onFail : function(err) {
//获得code值失败
alert('fail: ' + JSON.stringify(err));
*在dd.config函数验证没有通过下执行这个函数
dd.error(function(err) {
alert('dd error: ' + JSON.stringify(err));
dd中借口的约定:
所有接口都为异步
接受一个object类型的参数,function在js中也是一个object
成功回调 onSuccess(某些异步接口的成功回调,将在事件触发时被调用,具体详情请查看相关onSuccess回调时机,未做描述的即为同步接口)
失败回调 onFail
模板如下:
dd.命名空间.功能.方法({
参数1: '',
参数2: '',
onSuccess: function(result) {
//成功回调
//所有返回信息都输出在这里
onFail: function(){
//失败回调
/**************************************结束********************************/
我们编写的这个js文件也需要引入到企业前台的h5中,具体的引入方法和引入jsapi方式是一样的。&script type="text/javascript" src="javascripts/opt.js"&
&/script&只不过上面是从链接中引入,这里是从本地写好的资源中引入。
8.在后台编写userinfoServlet来获取前台传入的code值,并且通过code值获取用户信息,然后在后台数据库中比对用户信息实现登录。
通过code值获取用户信息的方法在钉钉中有详细的解答,通过get请求方式向
https://oapi.dingtalk.com/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
发送请求,需要携带两个参数,access_token和code值,返回值就是用户的信息。
具体代码由于和后台交互不便透露,但原理已经很清晰,对于获取用户信息可以参考前面的获取access_token的方法,
对于后台用户数据的比对只需要一些简单的数据库知识。
9.至此所有的步骤都已完成,便可以实现免登陆。
(三)运作流程阐述:
首先,公司成员在钉钉客户端点击了公司创建的微应用,然后微应用会根据定向URL地址跳转到公司应用的网站首页,在网站首页的HTML源码(也可能还包含其他前端语言)中定义了_config变量,这个变量通过后台代码的getConfig(request)函数对值进行了初始化,网站首页的源码由上往下的执行,就会执行到我们自己写的那个免登的js代码,在这个代码中完成了和_config值的验证,然后就会从钉钉开放平台获取code值,获得code值后,便会向服务器后台的相应的servlet文件发送code,该servlet文件收到code后就会换取用户信息,并和后台数据库中的用户信息比对,如果存在,就向前台返回登录成功,并跳转到登录成功后的页面。
(四):结束
最好再次强调一下,这些操作都是在你的企业应用的前端和后台进行操作的,和钉钉没有半毛钱关系,我们只是调用了钉钉的一些接口,这些文件也都是放在企业应用对应的网站的源码中,并不是放到钉钉那里。钉钉企业认证申请公函_文档库
文档库最新最全的文档下载
当前位置: & 钉钉企业认证申请公函
钉钉企业认证申请公函
钉钉认证申请公函
本企业(机构)同意授权申请人 (姓名)作为本企业(机构) 账号运营者(身份证号 )代表,在钉钉官网注册管理员 账号 和进行认证, 并对申请和认证的企业钉钉及成员进行维护和运营, 包括但不限于维护基本资料、 上传通信录、 增加、 删除和管理通信录人员, 以及申请服务等。
申请人承诺:
1、 企业管理员账号的使用和维护遵照国家法律法规、政策、钉钉服务协议及规则规范等, 且不侵犯第三人的合法权益。如违反上述承诺,责任自行承担;
2、 提交所有材料真实、准确和有效,如材料不实或不完整,钉钉有权拒绝或随时收回账号 和停止服务,因此产生的一切责任由本企业(机构)承担;
3、 本企业(机构)对该账号的一切行为及该账号运营下的成员行为和后果承担责任;
4、 本企业(机构)保证其通信录成员均为企业(机构)内部人员,保证不对钉钉服务任何 部分或服务的使用或获得,进行复制、拷贝、出售、转售或用于包括但不限于广告及任 何其它商业目的。
账号运营者签字:
Word文档免费下载:
钉钉认证申请公函2016_表格类模板_表格/模板_实用文档。钉钉认证申请公函本组织授权的组织管理员姓名为: , 本组 织承若遵守钉钉服务协议和钉钉公约,保证填写信息...钉钉认证申请公函 申请人授权同意(姓名)(身份证号码)作为账号营运者代表申请人向钉钉申请 认证,同时负责对申请人的帐号进行管理 ,包括但不限于管理通讯录人员、...钉钉认证申请公函申请人授权并同意 (姓名) (身份证号)作为账号 运营者, 代表申请人向钉钉申请认证,同时负责对申请人的账号进行管理,包括但不限于 管理通信录...钉钉企业认证申请公函_2016最新版_表格类模板_表格/模板_实用文档。钉钉企业认证申请公函,2016最新版 钉钉认证申请公函 申请人授权并同意(姓名) (身份证号)作为...钉钉认证申请公函 本企业(机构)同意并授权申请人 (身份证号 ) 作为本企业的账号运营者, 代表申请人向钉钉申请认证,同时负责对申请人的账号进行管 理,包括但不...钉钉企业认证申请公函(事业单位)_合同协议_表格/模板_实用文档。钉钉企业认证申请公函(事业单位) 钉钉认证申请公函 申请人授权并同意 (姓名) ___(身份证号)作为...钉钉认证申请公函 申请人授权并同意 (姓名) (身份证号)作为账号运营者,代 表申请人向钉钉申请认证, 同时负责对申请人的帐号进行管理, 包括但不限于维管理通信...钉钉认证申请公函(2017版) - 钉钉认证申请公函 本企业授权的企业管理员姓名为: , 本企业承诺遵守钉钉服务协议和钉钉公约,保证填写信息真实有效并授权企业管理 员...钉钉认证申请公函 本企业 (机构) 同意并授权申请人 构)的账号运营者(身份证号 (姓名) 作为本企业 (机) ,在钉 钉官网完成对本企业(机构)的注册及认证(注册...钉钉认证公函 - 钉钉认证申请公函 本企业(机构)同意并授权申请人(姓名) 作为本企业(机构)的账号运营者(身份 证号) ,在钉钉官网完成对本企业(机构)的注册及...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
钉钉使用流程.docx 22页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
钉钉为企业量身打造统一办公通讯免费平台。在云和移动时代,钉钉成为一个工作方式高效沟通DING、企业群、电话会议、澡堂聊天、办公协同、企业通讯录、工作应用、钉邮、钉盘让企业进入高效移动办公时代,多端同步,无缝沟通,随时随地,省时省心钉钉正在帮助开创未来的中国企业及组织,提升沟通协同效率,让工作更简单、高效、安全数据加密,客户端、服务端 ,数据加密存储澡堂模式,保障高端用户沟通安全锁屏密码,后台唤醒,查看内容 ,密码验证保障隐私可信设备,用户登录判断可信设备 保障账号安全通信安全,多端信息内容,全程加密传输保障信息安全第三方加密,数据双重加密,任何第三方包括钉钉都不能解密http://weibo.com/dingdingtalk?spm=0.0.0.0.LCQaNX&sudaref=www.dingtalk.com企业沟通功能视频电话会议[21]?http://baike.baidu.com/pic/%E9%92%89%E9%92%89//83025aafa40f4bfbaf78f0f6361880?fr=lemma&ct=single1.高清稳定的画面2.随时随地高效沟通3.支持3到5人同时加入商务电话[3]?http://baike.baidu.com/pic/%E9%92%89%E9%92%89//72f082025aafa40fdfada30daef2?fr=lemma&ct=single1.一键发起商务电话,让团队内部沟通变得简单便捷,简易高效的电话会议体验,支持2~9人同时加入。2.商务电话免费,降低沟通成本。3.新颖的电话面板控制方式,实时显示参会者在线状态和通话质量;4.快速发起会议,实时增加、删除成员,控制静音,面板皆可实现。5.高清电话会议语音,底层采用业界顶尖语音编解码引擎和运营商级语音线路。DING功能[3]?http://baike.baidu.com/pic/%E9%92%89%E9%92%89//0bd162d9f2dc8fc3fb?fr=lemma&ct=single1.钉钉发出的DING消息将会以免费电话OR免费短信信OR应用内消息的方式通知到对方。2.无论接收手机有无安装钉钉APP,是否开启网络流量,均可收到DING消息,实现无障碍的信息必达。3.当接受人收到DING消息提醒电话时,号码显示为发送方的电话号码,接收方接听电话听到发送方的语音信息后,如果是文字信息,系统会将文字播报给收听方,接收方即可直接进行语音回复,发送方便可及时收到回复。 消息已读未读http://baike.baidu.com/pic/%E9%92%89%E9%92%89//beca2397dda04483fe?fr=lemma&ct=single1.无论是一对一聊天,还是一对多的群消息,钉钉让用户都能知道发出的消息对方是否阅读,哪些人已阅,哪些人未读。2.用户发送信息后,消息旁显示“n人未读”,尤其是在群里发布信息(钉钉支持1500人大群),点击“n人未读”可查看未读人和已读人的详细列表,并能够对未读人发送DING消息。团队组建功能[5]?http://baike.baidu.com/pic/%E9%92%89%E9%92%89//eac4b12e42f78f82b?fr=lemma&ct=single钉钉推出了所有用户新建团队OR企业功能,任意一个企业、组织或者个人,无论你是企业内的部门、企业内的兴趣团体、企业内的虚拟项目组等待,甚至是社团、班级及其他社会组织···你都可以快速创建你的团队,并且享受大量免费权益。澡堂模式[23]?1.澡堂模式是基于消息分层理念的升级,在普通聊天窗点击聊页面点击右上角的墨镜图标开启澡堂对话。 http://baike.baidu.com/pic/%E9%92%89%E9%92%89//37d12f2ebdde6116e7f?fr=lemma&ct=single2.在此模式下,信息不能被复制,用户不用担心被录音,姓名、头像都会被打马赛克。3.聊天内容在已读后30秒内消失,不留痕迹。如同在澡堂一般,只能“看在眼里、烂在心里”,保证重要信息沟通隐私安全。4.针对安全诉求更高的用户,钉钉可以在设置中开启隐藏澡堂对话功能,让信息真正安全!http://baike.baidu.com/pic/%E9%92%89%
正在加载中,请稍后...
20页18页23页13页26页11页59页12页11页389页钉钉怎么认证 钉钉企业版注册教程详细介绍
  钉钉怎么认证?这个是很多网友都想知道的吧,下面小编给大家介绍一下钉钉企业版注册教程,感兴趣的赶紧来看看吧。  钉钉企业版注册教程:  首先请打开钉钉的官方网站  在页面中点击&企业注册&按钮继续。  接着请继续在页面中点击&立即企业注册&按钮,如图所示  随后会进入详细的注册页面,这里分部分介绍:  先输入企业团队的名称,所在的省市,行业类型;接着还需要输入管理员账号,如图所示  接着输入联系人的姓名,手机号码,以及获取到的短信验证码,最后勾选服务协议以后,点击&注册&按钮继续。  当注册成功以后,会提示我们当前已经创建成功,不过由于未认证,所以只限于体验。  如果要继续认证企业的话,此时请点击页面顶部的&未认证&选项。  接下来请根据页面提示,填写并上传企业的相关信息与资料,然后提交并等待审核。 
最新资讯离线随时看
聊天吐槽赢奖品
相关软件:
大小:1.95MB
授权:免费
大小:11.82 MB
授权:免费

我要回帖

更多关于 钉钉企业认证收费吗 的文章

 

随机推荐