1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 钉钉微应用获取用户信息

钉钉微应用获取用户信息

时间:2021-04-07 19:34:47

相关推荐

钉钉微应用获取用户信息

前言

最近有个需求,要把之前做的一套H5应用放在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去H5系统直接登陆。就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所以自己记录一下。

应用开发流程

注册企业: 进入OA管理后台,通过一系列流程,完成企业注册。创建微应用: 进入钉钉管理后台后可以进入 “企业应用-应用管理” 页面创建微应用。需要填写应用Logo、应用名称、功能介绍、首页地址等必填信息。完成后,可在钉钉App的“工作”Tab下找到企业,可以查看到微应用入口。

注意:首页URL必须真实,否则无法正常访问 创建微应用后会生成一个AgentID,方便后续开发使用。AgentID可用于免登鉴权、发送企业会话消息等场景。(后面会用到)

1

注意:企业内部应用是不需要钉钉审核的。如果是开发商,需要创建第三方应用,这个是需要钉钉审核的。内部应用创建完成后就会得到AgentId、AppKey和AppSecret。进入应用权限管理中社情对应的权限,默认开通的基础权限,如果需要审批、代办等权限需要在下面权限列表里面单独申请,不过还在不需要钉钉审核,即开即用。

免登流程

大致分四步:

1、前端获取钉钉免登授权码code;

2、后端获取access_token;

3、使用授权码code和access_token换取用户userid;

4、通过access_token和userid换去用户详情userinfo。

第一步:获取授权码code。

首先页面引入JSAPI。<script src="///dingding/dingtalk-jsapi/2.0.57/dingtalk.open.js"></script><script type="text/javascript">dd.ready(function() {dd.runtime.permission.requestAuthCode({corpId: "CORPID", //你们企业钉钉的CORPIDonSuccess: function(result) {{var code = result.code;var url = `/wework?code=${code}`; //把code传给后端window.location.href = url;}},onFail : function(err) {alert('出错了, ' + JSON.stringify(err));}});});

第二步:后台获取access_token

public function getToken(){//判断token是否存在if(!Redis::exists('access_token_rep')){//根据code 获取access_token$getTokenUrl = '/gettoken?appkey='.env('DINGDING_APPKEY').'&appsecret='.env('DINGDING_APPSECRET');$result = FormatUtil::httpGet($getTokenUrl); //发送get请求if($result->errcode == 0){$access_token = $result->access_token;//将token保存到reids中Redis::setex('access_token_rep', 3600*2, $access_token);}else{return false;}}else{$access_token = Redis::get('access_token_rep');}return $access_token;}

第三步、第四步:换取userId加获取userinfo

public function getUserInfo(){//获取token$access_token = $this->getToken();//获取用户的userId$getUserIdUrl = '/user/getuserinfo?access_token='.$access_token.'&code='.$code;$userIdResult = FormatUtil::httpGet($getUserIdUrl);if($userIdResult->errcode == 0){//获取用户详细信息$getInfoUrl = '/user/get?access_token='.$access_token.'&userid='.$userIdResult->userid;$getInfoReslt = FormatUtil::httpGet($getInfoUrl);//获取用户信息成功if($getInfoReslt->errcode == 0){用户信息}}}

备注

授权码code是每次请求都不一样,单次请求的数据5分钟有效,所以没必要缓存,建议直接用一次调一次。access_token有效期7200秒,自动续期。建议使用缓存。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。