

关于向钉钉群自动发消息的机器人
1. 开启机器人及自动发消息的方法:
https://open.dingtalk.com/document/robots/custom-robot-access#title-nfv-794-g71
2. 在PHP下测试通过,在Delphi7下测试没通过,一提交代码就提示:IOhandler value is not valid错误。
原因是不支持https协议的网址,说是要添加IdHTTP和TIdSSLIOHandlerSocket控件(),但后面这个控件找不到。还需要把libeay32.dll和ssleay32.dll放在程序目录
两个Dll文件下载地址:https://indy.fulgan.com/SSL/Archive/,
可能delphi7的indy9没有TIdSSLIOHandlerSocket控件,可能要更高版本的indy9才有这个控件
3. 主要遇到的错误1
复制官方demo测试的PHP代码,发现发英文可以,发中文提示错误{"errcode":40035,"errmsg":"缺少参数 json"}
原因是不要用Notepad++编辑PHP代码,而要用VScode,因为而把网上的代码复制到notepad++看着没有问题,但用VScode打开Notepad++保存的PHP文件中文都是乱码,用VScode把那些乱码改好后再测试就成功了
3.1 不成功时,中文提示乱码,要加上下面这句
echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
4.不成功原因2
在添加群机器人的时候在那个安全设置那里要把公司的公网地址IP地址添加进去,而且公网地址每次变了都要改。还有种方法就是自定义关键词,发送到群的消息中要包含这些关键词,否则也发送不成功
详见:https://open.dingtalk.com/document/robots/custom-robot-access
5. PHP成功的代码示例
<?php
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); //必须要有这句和下面一句否则不成功
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$webhook = "https://oapi.dingtalk.com/robot/send?access_token=4b957a4377a07b4de617b1942b70c31df6483c2dbc3cc0bf00e5748e75a8c000";
$message="我就是我, 是不一样的烟火";
$data = array ('msgtype' => 'text','text' => array ('content' => $message));
$data_string = json_encode($data);
$result = request_by_curl($webhook, $data_string);
echo $result;
?>