最近在做服务端发送钉钉工作通知消息给钉钉用户,需要先获取钉钉用户的UserID,遇到了钉钉新版旧版sdk版本问题一直无法获取用户的UserID,去查了deepseek返回了几个版本的代码都无法使用,最终通过HTTP POST请求方法去获取。
1.第一步先获取access_token
$url = "https://oapi.dingtalk.com/gettoken?appkey=$appKey&appsecret=$appSecret";
$response = file_get_contents($url);
$result = json_decode($response, true);
if ($result && $result['errcode'] == 0) {
$accessToken = $result['access_token'];
return $accessToken;
} else {
return $this->error("获取AccessToken失败: " . $response);
}
2.第二步通过http post请求
$url = "https://oapi.dingtalk.com/topapi/v2/user/getbymobile";
$data = [
'mobile' => $mobile
];
$params = [
'access_token' => $accessToken
];
$response = $this->httpPost($url, $data, $params);
return $response;
/**
* 通用的HTTP POST请求方法
*/
/**
* HTTP POST请求方法
*/
private function httpPost($url, $data, $params = [])
{
if (!empty($params)) {
$url .= '?' . http_build_query($params);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
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, [
'Content-Type: application/json',
'Accept: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
var_dump($httpCode);
if (curl_errno($ch)) {
throw new Exception('CURL错误: ' . curl_error($ch));
}
curl_close($ch);
$result = json_decode($response, true);
if ($httpCode !== 200) {
throw new Exception('API请求失败: HTTP ' . $httpCode);
}
return $result;
}
备注:中间可能会遇到权限问题就去钉钉开发者的控制台权限配置找到个人手机号信息权限启用一下就行了。