前言
第一次在掘金写文章,而且在PHP领域我也是一个学习者、小菜鸡。
如果文章中那里写的有问题、不合理的地方欢迎在评论区指出,看到后我会尽快完善。
钉钉的自定义机器人在我们公司项目中的业务通知部分属于很重要的一个功能
前段时间为了增加钉钉机器人的安全性,钉钉官方增加了一套验证方式,关键词
、IP白名单
、加签
关键词和IP白名单就不多说了,主要我们搞一下加签
这个安全方式
可能是因为加签这个东西刚出来不久的原因吧,我当时写的时候没有找到那篇文章有提到php版本的加签方式。官方的例子也只有Java
、Python
的,那就只能自己写了,前前后后踩了一些坑用了一些时间写了出来。
代码部分
<?php
$token='xxxxx'; // 机器人的token
$secret='xxxxx'; // 钉钉给出的密钥
// 获取微秒数时间戳
$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.='×tamp='.$msectime // 拼接时间戳
$url.='&sign='.$sign // 拼接加密签名
第一次写文章,不太会一些描述的东西,只能是把代码直接搬上来,然后每一步注释写详细一些大概加密过程就是这样了