php对接飞书自定义机器人发送消息功能

今天收到一个需求,需要定时去监控业务是否正常稳定,并将错误信息发送到飞书,之前接入过钉钉机器人都比较顺利,但是今天接入飞书居然卡了半天,特此分享给大家,避免踩坑

1,首先创建飞书机器人

在这里插入图片描述

在这里插入图片描述

2.创建完成之后,获取机器人对应的 webhook 地址 格式如下:

https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx

3.下面提供了三种接入方式

在这里插入图片描述

4.一般都选签名校验,安全性高

在这里插入图片描述
重点来了,这一步之后获取到秘钥,等下签名需要用到,但是官方文档是这样写的

设置签名校验后,向 webhook 发送请求需要签名校验来保障来源可信。所校验的签名需要通过时间戳与秘钥进行算法
加密,即将timestamp + "\n" + 密钥当做签名字符串,使用 HmacSHA256 算法计算签名,再进行 Base64 编码。其中,
timestamp是指距当前时间不超过 1 小时(3600 秒)的时间戳,时间单位:s。例如,1599360473。

按照他的要求,写好代码之后调试,一直报错:{“code”:19021,“data”:{},“msg”:“sign match fail or
timestamp is not within one hour from current time”},官方文档提示错误原因,可能是
1》所使用的时间戳距离发送请求的时间已间隔 1 小时以上,签名已过期。
2》服务器时间与标准时间有较大偏差,导致签名过期。请注意检查、校准你的服务器时间。
3》签名不匹配导致的校验不通过,将返回以下信息。
1和2原因是我打印之后百分百排除了,那么问题一定是签名不一致,后来发现是因为这一句
在这里插入图片描述
因为下面示例代码只有java,go,python,大致一看,以为和钉钉机器人接入方式一样,可能有些同学会跟我一样遇到这个问题,直接将最终代码贴出来:

		这是钉钉机器人代码:
 		$times = time() * 1000;
        $sign_key = self::Sign_key;
        $sign = urlencode(base64_encode(hash_hmac('sha256', $times . "\n" . $sign_key, $sign_key, true)));
        $webhook_url = self::Web_hook . "&timestamp={$times}&sign={$sign}";
        $data = array('msgtype' => 'text', 'text' => array('content' => $msg));
        $data_string = json_encode($data);
        $result = self::posturl($webhook_url, $data_string);

		飞书机器人代码:
		$timestamp = time();
        $stringToSign = $timestamp . "\n" . self::api_key;
        $sign = base64_encode(hash_hmac('sha256', '', $stringToSign, true));
        $client = new Client();

        $data = array(
            'sign' => $sign,
            'timestamp' => $timestamp,
            'msg_type' => 'text',
            'content' => array('text' => "<at user_id=\"all\">所有人</at>{$msg}")
        );
        $response = $client->request('POST', self::api_url, [
            'headers' => [
                'Content-Type' => 'application/json'
            ],
            'json' => $data,
        ]);
        $result = json_decode($response->getBody()->getContents(), true);
看到区别了吗,就是hash_hmac的加密的时候,第二个参数为空
最后终结原因,没理解清楚官方文档的说法,第二对php hash_hmac 函数的用法模糊不清,这里特此记录一下,
希望同样能对你有所帮助。
  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大力水手z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值