胖蒜

分享有价值的资源

钉钉群自定义机器人签名问题修复记录

今天有用户反馈,钉钉群机器人使用有问题,我去看看果然,问题出在鉴权上面。钉钉默认的鉴权方式三种,分别是关键词,签名和 IP 白名单;关键词没有做多考虑放弃了,IP 白名单比较简单,但考虑到我这个是提供给大家用的,每个人都要输入我的IP,太麻烦了,所以还是觉得加签或许好一点。
钉钉群机器人加签
在设置自定义机器人的时候,选择加签,然后在胖蒜网的个人中心,设置钉钉的Webhook地址和加签密钥,最后在上面选择推送方式为钉钉即可进行消息推送。
既然选择加签,我们来说一下加签方式,跟其它不一样,是这样的。
钉钉机器人加签

具体代码如下,先写个Curl函数:

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

然后来传数据试试:

/**
* 签名实现
*/
$ding_webhook = "Webhook地址";
list($s1, $s2) = explode(' ', microtime());
$timestamp = (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
$secret = "加签密钥";
$sdata = $timestamp . "\n" . $secret;
$signStr = base64_encode(hash_hmac('sha256', $sdata, $secret,true));
$signStr = utf8_encode(urlencode($signStr));

$webhook = "{$ding_webhook}&timestamp={$timestamp}&sign={$signStr}";
//$message="我就是我, 是不一样的烟火";
$data = array ('msgtype' => 'text','text' => array ('content' => $message));
$data_string = json_encode($data);
$res_send_msg = request_by_curl($webhook, $data_string);  

参考地址

https://open.dingtalk.com/document/robots/custom-robot-access

本文属原创,转载请注明原文:https://pangsuan.com/p/dingding_rebot_fixed.html

感觉很棒,欢迎点赞 OR 打赏~

分享到:

评论 (0)

立即登录评论
马上咨询 在线工单