博客列表 >PHP 使用钉钉发送群消息

PHP 使用钉钉发送群消息

Ant.
Ant. 原创
2022年06月01日 09:07:531241浏览

我是分了几个层 , 所以代码需要你们自己整理下

获取access token

    // 获取钉钉的accessToken
    //$accessTokenUrl = 'https://oapi.dingtalk.com/gettoken';
    //$AppKey $AppSecret 这两个不多介绍,钉钉上面有
    public static function getAccessTokenApi()
    {
        return Curl::get(DingTalk::$accessTokenUrl."?appkey=".DingTalk::$AppKey."&appsecret=".DingTalk::$AppSecret);
    }


这里调用的是上面那个获取钉钉access token的方法 存一下redis 存redis的方法就自己写一下

    private function getAccessToken()
    {
        $dingTalkCache = new DingTalkCache();
        // 获取缓存的accessToken , 没有的话重新请求
        if (!$accessToken = $dingTalkCache->getAccessToken()){
            $accessTokenApiResult = DingTalkLogic::getAccessTokenApi();
            if ($accessTokenApiResult->errcode){
                \App\Utils\Logger::error("钉钉获取Access Token 失败。错误码:{$accessTokenApiResult->errcode}。错误信息:{$accessTokenApiResult->errmsg}");
                return false;
            }
            if (!isset($accessTokenApiResult->access_token)){
                \App\Utils\Logger::error("钉钉接口请求参数中没有 access_token");
                return false;
            }
            if (!$dingTalkCache->setAccessToken($accessTokenApiResult->access_token)){
                \App\Utils\Logger::error("钉钉redis保存access_token缓存失败");
                return false;
            }
            return $accessTokenApiResult->access_token;
        }
        return $accessToken;
    }

    发送消息
        /**
     * 发送消息到群组
     * @param string $level 消息等级
     * @param string $class 当前位置 一般__CLASS__来定位
     * @param string $message 错误消息
     * @param string $data 数据
     * @return bool
     * @throws \JsonException
     */
    public function sendMessageToGroup(string $level, string $class, string $message, string $data=""): bool
    {
            // 获取sccesstoken
        $accessToken = $this->getAccessToken(); 
        if (!$accessToken){
            Logger::error("钉钉accessToken 获取失败");
            return false;
        }
        $url = \App\Define\DingTalk::$sendMessageToGroup."?access_token=". $accessToken;
        //这个是自己定义的一个根据错误等级显示不用字体颜色而已,不要也没事
        $color = $this->getLevelColor($level); 
        $result = Curl::post($url, json_encode([
                       /**
                         * 消息群ID , 也就是发送到哪个群的ID
                         * https://wsdebug.dingtalk.com/
                         * 通过这个链接进行扫码查看chatId值
                         */
            'chatid' => \App\Define\DingTalk::$chatId,
            'msg' => [
                'msgtype' => 'markdown',
                'markdown' => [
                    'title' => "{$level}消息",
                    'text' => "##### <font color=#".$color.">等级:".$level."</font>
                                \n  ###### 时间:".date("Y-m-d H:i:s")."
                                \n  ###### 位置:". $class ."
                                \n  ######  消息:**".$message."**
                                \n  ###### 数据:". $data
                ]
            ]
        ], JSON_THROW_ON_ERROR));
        if ($result->errcode){
            Logger::error($result->errmsg);
            return false;
        }
        return true;
    }



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
Ant.2022-10-27 17:17:581楼
https://wsdebug.dingtalk.com/ 链接失效,可以通过https://open-dev.dingtalk.com/apiExplorer?spm=ding_open_doc.document.0.0.afb839b7W85NCP#/jsapi?api=biz.chat.chooseConversationByCorpId 链接获取chatId,具体方法可以百度,或者留言