发送加签名的钉钉消息通知

2020-04-11  墨池 

之前发送钉钉群消息通知,设置的安全策略都是“自定义关键字”,而且貌似钉钉接口也并不 care 发送的内容中是否包含关键字的,一直都运行的好好的,过了一个周末,竟然失效了,消息发不出去了。于是又重新阅读了一遍钉钉接口文档,写了个带签名的方法如下,为了方面拿去即用就放在一个 function 中了。

  1. /**
  2.  * 发送带签名的钉钉消息通知
  3.  * 钉钉接口文档地址 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  4.  * @param $access_token , 机器人的 Webhook 地址后面的 access_token
  5.  * @param $secret , 密钥,机器人安全设置页面,加签一栏下面显示的 SEC 开头的字符串
  6.  * @param $content ,需要发送的 string
  7.  */
  8. public static function curlHttpPOSTToDingTalk($access_token, $secret, $content)
  9. {
  10.     $url = 'https://oapi.dingtalk.com/robot/send?';
  11.     $body = array(
  12.         "msgtype" => "text",
  13.         "text" => array("content" => $content),
  14.         "at" => array(
  15.             "isAtAll" => true
  16.         )
  17.     );
  18.     $timeStamp = floor(microtime(true) * 1000);//毫秒时间戳
  19.     $stringToSign = $timeStamp . "\n" . $secret;//需要签名的字符串
  20.     // 进行加密操作 并输出二进制数据
  21.     $signature = hash_hmac('sha256', $stringToSign, $secret, true);
  22.     $query = array(
  23.         'access_token' => $access_token,
  24.         'timestamp' => $timeStamp,
  25.         'sign' => base64_encode($signature)
  26.     );
  27.     $absURL = $url . http_build_query($query);
  28.     $handles = curl_init();//初始化CURL句柄
  29.     curl_setopt($handles, CURLOPT_RETURNTRANSFER, 1);//设为TRUE把curl_exec()结果转化为字串,而不是直接输出
  30.     curl_setopt($handles, CURLOPT_URL, $absURL);//设置请求的URL
  31.     curl_setopt($handles, CURLOPT_POST, 1);
  32.     curl_setopt($handles, CURLOPT_HTTPHEADER, array('Content-type: application/json;charset=UTF-8')); //设置头信息
  33.     curl_setopt($handles, CURLOPT_POSTFIELDS, json_encode($body));
  34.     $response = curl_exec($handles);//运行curl
  35.     $info = null;
  36.     if (!curl_errno($handles)) {
  37.         $info = curl_getinfo($handles);
  38.         print_r("Took " . $info['total_time'] . " seconds to send a request to " . $info['url'] . " and http code is " . $info['http_code'] . "\n");
  39.     } else {
  40.         print_r("Curl error: " . curl_error($handles) . "\n");
  41.     }
  42.     curl_close($handles);
  43.     print_r($response . "\n");
  44. }
  45.  

  1.  
373°/3730 人阅读/0 条评论 发表评论

登录 后发表评论