前言
在日常生活中,我们可能会遇到某些异常发生后需要紧急通知到群里,让相关人员看到紧急处理的事件触发机制。 消息群我采用的是钉钉推送,本文介绍了如何用php 推送钉钉机器人消息。
源码封装
<?php
/**
* 钉钉通知 - 签名版
*/
class DingDingNoticeSign
{
/**
* 钉钉access_token 创建机器人时获得
*
* @var string
*/
protected $accessToken;
/**
* 钉钉签名 类型为签名内容可获取
*
* @var string
*/
protected $sign;
public function __construct($accessToken,$sign)
{
$this->accessToken = $accessToken;
$this->sign = $sign;
}
public function sendMsg($msg)
{
$this->sendDingMessage($this->structApiUrl(),$this->sign,$msg);
}
protected function generateSign($timestamp, $secret) {
return urlencode(base64_encode(hash_hmac('sha256', $timestamp . "\n" . $secret, $secret, true)));
}
protected function sendDingMessage($webhookUrl, $secret, $message) {
$timestamp = time() * 1000; // 当前时间戳
$sign = $this->generateSign($timestamp, $secret); // 生成签名
$headers = [
'Content-Type: application/json;charset=utf-8;'
];
$body = json_encode([
'msgtype' => 'text', // 消息类型,例如 text, markdown 等
'text' => [
'content' => $message // 消息内容
]
]);
$webhookUrl.="×tamp={$timestamp}&sign={$sign}";
// dd($webhookUrl);
$options = [
CURLOPT_URL => $webhookUrl,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false, // 注意:实际使用中应设置为 true 以增强安全性,此处为示例简化设置
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => $headers
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
// if ($response === false) {
echo 'Curl error: ' . curl_error($ch);
// } else {
echo 'Response: ' . $response;
// }
curl_close($ch);
}
protected function structApiUrl()
{
$url = "https://oapi.dingtalk.com/robot/send";
$query = [
'access_token' => $this->accessToken
];
$url = "{$url}?".http_build_query($query);
return $url;
}
}
如何使用?(见下文)
//钉钉消息通知
$accessToken = "xxxxxxxxxxxxxx";//access_token 创建机器人时获得的参数 get param中的access_token
$sign = "xxxxxxxxxxxxx";//sign 选择为签名时获得的参数
$dingdingService = new DingDingNoticeSign($accessToken,$sign);
$dingdingService->sendMsg("我是消息通知");
很简单吧,内容封装好了,直接拿下来使用即可