当前位置: 首页 > news >正文

钉钉 - 机器人消息推送(签名版)

前言

在日常生活中,我们可能会遇到某些异常发生后需要紧急通知到群里,让相关人员看到紧急处理的事件触发机制。 消息群我采用的是钉钉推送,本文介绍了如何用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.="&timestamp={$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("我是消息通知");

很简单吧,内容封装好了,直接拿下来使用即可

http://www.dtcms.com/a/232372.html

相关文章:

  • IDEA 打开文件乱码
  • 红花基因组2-文献精读141
  • 【Qt】之【Get√】【Bug】通过值捕获(或 const 引用捕获)传进 lambda,会默认复制成 const
  • ​减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
  • (30)课48: 联合查询 SELECT 列名 FROM 表A UNION [ ALL ] SELECT 列名 FROM 表B...;*补充范围 in 关键字的语法 in (“A“, ‘B‘) 即可
  • IDEA:配置 Git 需要完成 Git 路径设置、账号认证以及仓库关联三个主要步骤
  • VisDrone无人机视觉挑战赛观察解析2025.6.5
  • 【bug】Error: /undefinedfilename in (/tmp/ocrmypdf.io.9xfn1e3b/origin.pdf)
  • 基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置
  • ArcGIS Pro 3.4 二次开发 - 公共设施网络
  • 3ds Max 渲染技术突破:一键解锁照片级真实感!
  • GC1809:高性能音频接收与转换芯片
  • 自动化办公集成工具:一站式解决文档处理难题
  • Django之表格上传
  • 浅谈 Linux 防火墙:从原理到实践
  • Neovim - 常用插件,提升体验(三)
  • 【虚拟机版本号】如果忘记了版本号,这样查找版本号
  • 【Linux】网络--数据链路层--以太网
  • 空间利用率提升90%!小程序侧边导航设计与高级交互实现
  • MPNet:旋转机械轻量化故障诊断模型详解python代码复现
  • 第二十四章 流程控制_ if分支
  • React 样式方案与状态方案初探
  • LeetCode 1356.根据数字二进制下1的数目排序
  • 重磅更新! 基于Gemini 2.5 Pro打造的AI智能体PlantUML-X上线!
  • VSCode主题定制:CSS个性化你的编程世界
  • 服务器CPU被WMI Provider Host系统进程占用过高,导致系统偶尔卡顿的排查处理方案
  • PostgreSQL 的扩展pg_prewarm
  • 高防服务器能够抵御哪些网络攻击呢?
  • 【Python 算法零基础 4.排序 ⑨ 堆排序】
  • 代码随想录算法训练营第九天| 151.翻转字符串里的单词、55.右旋转字符串 、字符串总结