moguding-solution icon indicating copy to clipboard operation
moguding-solution copied to clipboard

我写了个钉钉通知的class,我测试可用。作者可以加进去

Open lalblc opened this issue 2 years ago • 0 comments

我也是个小白,边百度边写的。 钉钉可用在不运行钉钉的时候发送离线通知,消息比较及时,感觉可用加一下。

<?php


class Push{
    // 钉钉-加签
    protected static function ding_url($str = ''){
        // 钉钉给出的密钥(加签用的)
        $secret='xxxxxxxxx';  //要自己添加
        // 钉钉给的token
        $token='xxxxxxxxx';  //要自己添加
        

        // 获取微秒数时间戳
        $Temptime = explode(' ', microtime());
        // 转换成毫秒数时间戳
        $msectime = (float)sprintf('%.0f', (floatval($Temptime[0]) + floatval($Temptime[1])) * 1000);
        // 拼装成待加密字符串
        // 格式:毫秒数+"\n"+密钥
        $stringToSign=$msectime."\n".$secret;
        // 进行加密操作 并输出二进制数据
        $sign=hash_hmac('sha256', $stringToSign,$secret,true);
        // 加密后进行base64编码 以及url编码
        $sign=urlencode(base64_encode($sign));
        // 拼接url
        $url='https://oapi.dingtalk.com/robot/send?access_token='.$token;
        $url.='&timestamp='.$msectime; // 拼接时间戳
        $url.='&sign='.$sign;          // 拼接加密签名
        return $url;
    }


    //发送post请求
    protected static function post($url,$arr=[]) {    
        $data = json_encode($arr);
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_exec($curl);
        curl_close($curl);
    }

    public static function send_text($text="发送了空白消息"){
        $data = [
            "text"=> [
                "content"=>$text
            ],
            "msgtype" => "text"
        ];
        Push::post(Push::ding_url(),$data);
    }
}

lalblc avatar Dec 28 '22 14:12 lalblc