📖 File Reader
<?php
namespace app\common;
use app\BaseController;
/*钉钉*/
class Common_dingtalk extends BaseController
{
protected $AgentId = '';//应用AgentId
protected $AppKey = '';//应用Client ID(AppKey)
protected $AppSecret = '';//应用Client Secret(AppSecret)
public function initialize()
{
$this->AgentId = '3342428***';
$this->AppKey = 'dingf4wbcbina3dsu***';
$this->AppSecret = '7AMU9qFDvO-5_-maLDV9rH6eW5OmCRHbcfX0CT9otwBe_dH3buB4BBONA-5J9***';
}
/**
* 通过免登码获取用户信息
* 文档地址:https://open.dingtalk.com/document/orgapp/obtain-the-userid-of-a-user-by-using-the-log-free
* @param string $authCode 小程序免登授权码
* @return void
*/
public function getuserinfo($authCode='')
{
$url = 'https://oapi.dingtalk.com/topapi/v2/user/getuserinfo?access_token='.$this->gettoken();
$data = [
'code'=>$authCode,
];
$data = $this->httpRequest($url,$data,"POST");
$data_arr = json_decode($data,true);
return $data_arr;
}
/**
* 查询用户详情
* 文档地址:https://open.dingtalk.com/document/orgapp/query-user-details
* @param string $userid 用户的userid
* @return void
*/
public function getuserinfodetails($userid='')
{
$url = 'https://oapi.dingtalk.com/topapi/v2/user/get?access_token='.$this->gettoken();
$data = [
'userid'=>$userid,
'language'=>'zh_CN'
];
$data = $this->httpRequest($url,$data,"POST");
$data_arr = json_decode($data,true);
return $data_arr;
}
/**
* 获取部门列表
* 文档地址:https://open.dingtalk.com/document/orgapp/obtain-the-department-list-v2
* @param string $dept_id 父部门ID
* @return void
*/
public function department_list($dept_id='')
{
$url = 'https://oapi.dingtalk.com/topapi/v2/department/listsub?access_token='.$this->gettoken();
$data = [
'dept_id'=>$dept_id,
'language'=>'zh_CN'
];
$data = $this->httpRequest($url,$data,"POST");
$data_arr = json_decode($data,true);
return $data_arr;
}
/**
* 查询部门用户完整信息(获取部门企业帐号用户详情)
* 文档地址:https://open.dingtalk.com/document/isvapp/queries-account-details
* @param string $dept_id 部门id(如果是根部门,该参数传1)
* @param string $cursor 分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。(分页页码)
* @param string $size 分页大小(每页行数)
* @return void
*/
public function user_list($dept_id=1,$cursor=0,$size=100)
{
$url = 'https://oapi.dingtalk.com/topapi/v2/user/list?access_token='.$this->gettoken();
$data = [
'dept_id'=>$dept_id,
'cursor'=>$cursor,
'size'=>$size,
'language'=>'zh_CN',
];
$data = $this->httpRequest($url,$data,"POST");
$data_arr = json_decode($data,true);
return $data_arr;
}
/**
* 查询部门用户完整信息(获取部门企业帐号用户详情)(根据上一步接口自动下翻全部页拉取数据)
* @param string $dept_id 部门id(如果是根部门,该参数传1)
* @param string $cursor 分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。(分页页码)
* @param string $size 分页大小(每页行数)
* @param array $list 定义已获取的数据
* @return void
*/
public function user_list_all($dept_id=1,$cursor=0,$size=100,$list=[])
{
$data = $this->user_list($dept_id,$cursor,$size);
if ($data["errcode"] == 0){
$result = $data["result"];
foreach ($result["list"] as $k => $v){
$list[] = $v;
}
if (!empty($result["next_cursor"])){ //存在下一页继续往下找
$next_cursor = $result["next_cursor"];
$data = $this->user_list_all($dept_id,$next_cursor,$size,$result["list"]);
$list = $data;//重新定义
}
}
return $list;
}
/**
* 发送工作通知
* 文档地址:https://open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages#title-29j-vsr-d3h
* @param array $userid_list 通知的人员id(最多允许100人)
* @param string $describe 通知描述人员
* @return void
*/
public function asyncsend($userid_list=[],$describe='')
{
$userid_list_str = implode(",", $userid_list);
$url = 'https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token='.$this->gettoken();
$data = [
'agent_id'=>$this->AgentId,
'userid_list'=>$userid_list_str,
'msg'=>json_encode([
'msgtype'=>'text',
'text'=>[
'content'=>$describe,
]
],JSON_UNESCAPED_UNICODE),
];
$data = $this->httpRequest($url,$data,"POST");
$data_arr = json_decode($data,true);
return $data_arr;
}
/*获取企业内部应用的access_token*/
public function gettoken()
{
$url = 'https://oapi.dingtalk.com/gettoken?appkey='.$this->AppKey.'&appsecret='.$this->AppSecret;
if (empty(session("access_token")) || session("expires_in") <= time()){
$data = $this->httpRequest($url);
$data = json_decode($data, true);
session("access_token",$data["access_token"]);
session("expires_in",time()+7000);
$access_token = $data["access_token"];
}else{
$access_token = session("access_token");
}
return $access_token;
}
public function httpRequest($url, $data = '', $method = 'GET')
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
if ($method == 'POST') {
curl_setopt($curl, CURLOPT_POST, 1);
if ($data != '') {
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
}
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
}