🔓 Ultimate Webshell - Penetration Testing Tool

📖 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;
    }
}