钉钉微应用通过钉钉接口API获取用户信息
应用开发流程
注册企业: 进入OA管理后台,通过一系列流程,完成企业注册。
创建微应用: 进入钉钉管理后台后可以进入 “企业应用-应用管理” 页面创建微应用。
需要填写应用Logo、应用名称、功能介绍、首页地址等必填信息。
完成后,可在钉钉App的“工作”Tab下找到企业,可以查看到微应用入口。
免登流程
大致分四步:
1、前端获取钉钉免登授权码code;
2、后端获取access_token;
3、使用授权码code和access_token换取用户userid;
4、通过access_token和userid换去用户详情userinfo。
第一步:获取授权码code。
<script src="//g.alicdn.com/dingding/dingtalk-jsapi/2.0.57/dingtalk.open.js"></script>
<script type="text/javascript">
dd.ready(function() {
dd.runtime.permission.requestAuthCode({
corpId: "XXXXXXXXXXXXXXXXXXXXXXXXXXX", //你们企业钉钉的CORPID
onSuccess: function(result) {
{
var code = result.code;
// alert(code);
var url = '/ttttt/?c=dd&code='+code; //把code传给后端
window.location.href = url;
}
},
onFail : function(err) {
alert('出错了, ' + JSON.stringify(err));
}
});
});
</script>
第二步:后台获取access_token
$access_token = getToken();
//后台获取access_token
function getToken(){
$AppKey = 'XXXXXXXXXXXXXXXXXXXX';
$AppSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
//判断token是否存在
// if(!Redis::exists('access_token_rep')){
//根据code 获取access_token
// echo 'eeee';exit;
$getTokenUrl = 'https://oapi.dingtalk.com/gettoken?appkey='.$AppKey.'&appsecret='.$AppSecret;
$result = (geturl($getTokenUrl)); //发送get请求
// var_dump($result);
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
$userinfo = getUserInfo($access_token,$code);
//换取userId加获取userinfo
function getUserInfo($access_token,$code){
//获取token
// $access_token = $this->getToken();
//获取用户的userId
$getUserIdUrl = 'https://oapi.dingtalk.com/user/getuserinfo?access_token='.$access_token.'&code='.$code;
// echo $getUserIdUrl.'<br>';
$userIdResult = geturl($getUserIdUrl);
// var_dump($userIdResult);
if($userIdResult['errcode'] == 0){
$userid = $userIdResult['userid'];
// echo $userid.'<br>';
//获取用户详细信息
$getInfoUrl = 'https://oapi.dingtalk.com/user/get?access_token='.$access_token.'&userid='.$userid;
$getInfoReslt = geturl($getInfoUrl);
//获取用户信息成功
// var_dump($getInfoReslt);
$email = $getInfoReslt['email'];
$name = $getInfoReslt['name'];
if($email != '' && $name != '')
return array($email,$name);
}
}
function geturl($url){
$headerArray =array("Content-type:application/json;","Accept:application/json");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output,true);
return $output;
}