当前位置: 首页 > 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.lqws.cn/news/150481.html

相关文章:

  • Python Rio 【图像处理】库简介
  • ECB(电子密码本,Electronic Codebook) 和 CBC(密码分组链接,Cipher Block Chaining)区分于用途
  • EXCEL如何快速批量给两字姓名中间加空格
  • Python使用总结之Mac安装docker并配置wechaty
  • Ntfs!ReadIndexBuffer函数分析之nt!CcGetVirtualAddress函数之nt!CcGetVacbMiss
  • Prompt Tuning:生成的模型文件有什么构成
  • NoSQL——Redis配置与优化
  • 拆解实战案例:电商ERP管理系统从需求到原型全流程设计
  • vue2中使用jspdf插件实现页面自定义块pdf下载
  • 深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
  • ML Kit与YOLO:移动AI与实时检测终极对决
  • 数据分析实战2(Tableau)
  • 【DAY40】训练和测试的规范写法
  • AI系统负载均衡与动态路由
  • 联邦学习架构深度分析:支持多家医院协作训练AI模型方案分析
  • gc2053驱动学习笔记
  • 微服务架构下的服务注册与发现:Eureka 深度解析
  • 4.3 HarmonyOS NEXT AI驱动的交互创新:智能助手、实时语音与AR/MR开发实战
  • redis分布式锁的实际业务使用和底层基本原理 对比 lock trylock
  • Linux环境-通过命令查看zookeeper注册的服务
  • DisplayPort 2.0协议介绍(1)
  • x86 汇编中的【条件跳转指令】:从基础到扩展的全面解析(查表版)
  • 新建网站部署流程
  • 力扣面试150题--被围绕的区域
  • ArcGIS Pro 3.4 二次开发 - 公共设施网络
  • 实时数据仓库是什么?数据仓库设计怎么做?
  • Neovim - 常用插件,提升体验(三)
  • [论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路
  • flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
  • 深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析