我做了个网站,需要接入到公司的钉钉上,作为企业内部应用,员工然后通过钉钉可以进行免登录访问,但是获取AccessToken后再获取员工的个人信息一直提示“[code] => Forbidden.AccessDenied.AccessTokenPermissionDenied [requestid] => 1739246D-94EA-7310-A5F0-7B52E8F038B7 [message] => 没有调用该接口的权限,接口权限申请参考:https://open.dingtalk.com/document/orgapp-server/add-api-permission [accessdenieddetail] => Array ( [requiredScopes] => Array ( [0] => Contact.User.Read ) )“
大家帮忙看看什么问题?
调用的代码:
// 第二步:处理回调获取access_token
function getAccessToken($config) {
$tokenUrl = "https://api.dingtalk.com/v1.0/oauth2/userAccessToken";
$headers = [
'Content-Type: application/json',
'Accept: application/json'
];
$data = [
'clientId' => $config['appKey'],
'clientSecret' => $config['appSecret'],
'code' => $_GET['code'],
'grantType' => 'authorization_code'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $tokenUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 获取用户信息
function getUserInfo111($accessToken) {
$url = "https://api.dingtalk.com/v1.0/contact/users/me";
$headers = [
'x-acs-dingtalk-access-token: ' . $accessToken
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 第三步:获取用户信息
function getUserInfo($accessToken) {echo $accessToken;
$userUrl = "https://api.dingtalk.com/v1.0/contact/users/me";
$headers = [
'Content-Type: application/json',
'Accept: application/json',
'x-acs-dingtalk-access-token: ' . $accessToken
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $userUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 主流程
try {
$tokenData = getAccessToken($config);
if (isset($tokenData['accessToken'])) {
$userInfo = getUserInfo($tokenData['accessToken']);
print_r($userInfo);
// 处理用户登录逻辑
session_start();
$_SESSION['dingtalk_user'] = $userInfo;
exit;
// 跳转到登录成功页面
header("Location: welcome.php");
exit;
} else {
throw new Exception("获取access_token失败: " . json_encode($tokenData));
}
} catch (Exception $e) {
die("钉钉登录失败: " . $e->getMessage());
}
权限截图:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。