钉钉api 获取 accesstoken_Thinkphp5.X异常接管后通过钉钉机器人推送通知

大多团队在生产环境下都会关闭app_debug,所以相对应的错误信息就不能实时查看到。以下分享一个目前团队项目正在用的生产环境下相关技术人员能第一时间获取通知的方法:

先上效果图:

773e6013426bfe4c769750ca3e2bc03a.png

以上通知是在钉钉中显示!

下面介绍开发步骤:

1:Thinkphp版本需在5.X或以上,在config/app.php中接管异常处理

(个人案例中调用方式,具体命名依照对应项目建立)

'exception_handle' => 'appCommonControllerException',

具体操作可以参考官方文档:https://www.kancloud.cn/manual/thinkphp5_1/354092

2:在异常接管方法中实现以下代码

<?php /* * 异常接管 */namespace appCommonController;use Exception;use thinkexceptionHandle;use thinkexceptionHttpException;use thinkexceptionValidateException;class Exception extends Handle { public function render(Exception $e) { if (method_exists($e, 'getStatusCode')) { // 参数验证错误 if ($e instanceof ValidateException) { return json($e->getError(), 422); } // 请求异常 if ($e instanceof HttpException && request()->isAjax()) { return response($e->getMessage(), $e->getStatusCode()); } if ($e->getStatusCode() == 404) { $module = hinkfacadeRequest::module(); !$module and $module = 'index'; return view($module . '@public/404'); } if ($e->getStatusCode() == 500) { return parent::render($e); } } else { $file = $e->getFile(); $line = $e->getLine(); $code = parent::getCode($e); $message = parent::getMessage($e); $error_message = '[' . $code . '] ErrorException in ' . $file . ' line ' . $line . PHP_EOL . $message; // 此处为钉钉server  $server = new appServerDingdingServer(); $data = [ 'text' => ['content' => $error_message] ]; $server->robotSend($data); } // 其他错误交给系统处理 return parent::render($e); }}

3:钉钉Server的创建

<?php /** * 钉钉开放API * https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq */namespace appServer;class DingdingServer { private $API_URL = "https://oapi.dingtalk.com/robot/send?access_token=xxxxx"; public function __construct() {  } /** *  * @param array $data  * @param string $msgtype text link markdown actionCard  * @return boolean */ public function robotSend($data = [], $msgtype = 'text') { if (empty($data)) { return false; } $final_data = $data + ['msgtype' => $msgtype]; $data_string = json_encode($final_data); $webhook = $this->API_URL; $result = $this->request_by_curl($webhook, $data_string); return $result; } protected function request_by_curl($remote_server, $post_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset = utf-8')); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码 // curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);  // curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); $data = curl_exec($ch); curl_close($ch); return $data; }}

此处钉钉接口需要一个access_token参数,具体操作步骤参考:

1:先下载PC版钉钉

2:发起群聊,添加至少2人创建群聊

3:点击群聊界面右上角三个点中的 群机器人,选择 添加机器人,选择最后一个 自定义

2a00f696dcb30f73ea594200c3b3c7f2.png
62cf3550740b3b3acaacc3440cf067f8.png
08f617d4096288f0ff77ce1c4557ea01.png

4:钉钉API地址就在webhook中

d0d7ed45d3ea01626f9e19504982734b.png

到这里,生产环境下即使关闭了app_debug,我们也能第一时间收到异常记录了!特别提醒,钉钉貌似每分钟只能发送20条推送。

关于钉钉的API,代码中默认调用text文本形式,其实还有很多,例如 link markdown actionCard 方式,小伙伴们可以自行研究~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中将有层级关系的一维数据转换为父子级关系的二维数据、菜单权限三级层级数据实现(树形结构数据)

很久没有发文了&#xff0c;今天发点不一样的&#xff0c;如下&#xff1a; <script>// 一维数据&#xff1a;let arrData[{ r_id: 1, role_name: 开发商, n_id: 1, txt: 主页 },{ r_id: 1, role_name: 开发商, n_id: 2, txt: 项目 },{ r_id: 1, role_name: 开发商, n_id…

修改器内置脚本编写_Node.js 中实践 Redis Lua 脚本

对别人的意见要表示尊重。千万别说&#xff1a;"你错了。"——卡耐基Lua 是一种轻量小巧的脚本语言&#xff0c;用标准 C 语言编写并以源代码形式开放&#xff0c;其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。由于 Lua 语言…

项目上线,部署到服务器(腾讯服务器),http协议及https协议(微信小程序必须https协议才可发布)

一、准备服务器&#xff1a; 1.选择自己的服务器&#xff0c;这里有很多服务器比如&#xff0c;阿里服务器&#xff0c;腾讯服务器等&#xff0c;这里我选择腾讯服务器做测试&#xff0c;其官网&#xff1a;https://cloud.tencent.com/&#xff0c;微信扫码登录后如下进入首页…

队列的基本操作_算法与数据结构(五) 栈和队列

? 工欲善其事&#xff0c;必先利其器。栈和队列 - Stack And Queue栈如何理解栈呢&#xff1f;后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的 "栈" 结构。04_栈和队列-栈结构从栈的操作特性上来看&#xff0c;栈是一种“操作受限”的线性表&#xff0c…

八邻域轮廓跟踪算法_结合mRMR选择和IFCM聚类的遥感影像分类算法

随着遥感成像技术的发展&#xff0c;高分遥感影像空间分辨率逐年提高&#xff0c;已经成为获取地物信息的主要数据来源之一。高分影像分类作为遥感影像处理的重要任务之一&#xff0c;在地理国情普查与监测、数字城市建设、城市规划等领域具有广阔的应用前景。高分影像具有纹理…

node.js中net模块、node实现tcp通信

node.js中net 一、net模块感知&#xff1a; net模块用于创建基于TCP&#xff08;或IPC&#xff09;通信的服务器或客户端&#xff0c;它是nodejs内置模块&#xff0c;直接使用require(‘net’)的方式引入&#xff0c;类似http模块。 二、创建一个tcp服务器&#xff1a; //1…

struts2--文件上传大小

struts2--文件上传大小 Struts2文件上传的大小限制问题 问题&#xff1a;上传大文件报错……解决&#xff1a;修改struts.xml文件中的参数如下<constant name"struts.multipart.maxSize" value"55000000"/><action name"UploadFile" cl…

element-plus中导航高亮不自动刷新问题

解决使用element-plus el-submenu时页面被this.$router.push(“xxx”)跳转后&#xff0c;导航菜单高亮不能自动刷新问题&#xff0c;需要注意以下几点&#xff1a; 在el-menu加上routerindex必须绑定路由的path,参考上面的例子&#xff0c;/不能少default-active设为当前路由&…

计算机二级考试python怎么报名_计算机二级报名流程和条件

对于第一次参加全国计算机二级考试的考生来说&#xff0c;他们对于计算机二级报名流程和条件不是清楚&#xff0c;小编这就来给大家梳理一下。计算机二级报名流程 一、报名 分为网上报名和现场报名。 网上报名&#xff1a;考生在规定时间内登录本省计算机资格网站&#xff0c;按…

操作对象_DOM进阶——HTML属性操作(对象属性)

上一节我们在“DOM基础”学习了对元素节点的操作&#xff0c;这两节介绍对属性节点的操作。属性节点操作有两种方式&#xff0c;一种是使用“对象属性”&#xff0c;另一种是“对象方法”。本节主要介绍“对象属性”的方式。对属性节点的操作涉及两种操作&#xff0c;分别是获取…

三级菜单数据实现,实现嵌套三级菜单数据

//将数据库中通过关联&#xff08;inner join&#xff09;查询多张表没有嵌套但有嵌套关系的数据进行处理&#xff0c;得到具有嵌套层级且嵌套的父级二级属性不可重复出现&#xff0c;具体实现如下&#xff1a;// 通过关联查询到数据库的数据&#xff08;格式&#xff09;&…

sap相关性不能被编译_经典综述编译丨生物硝化抑制丨NAT PLANTS:现代农业中的氮转化和生物硝化抑制作用...

点击蓝字↑↑↑“农作未来(FarmingFuture)”&#xff0c;轻松关注&#xff0c;农作制度研究与您同行&#xff01;编译&#xff1a;贾蓉 排版&#xff1a;王上原创微文&#xff0c;欢迎转发转载。文章信息原名&#xff1a;Nitrogen transformations in modern agriculture and …

Hadoop学习笔记(一)从官网下载安装包

Hadoop是一个分布式系统基础架构&#xff0c;由Apache基金会所开发。用户能够在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行快速运算和存储。要学习Hadoop从下载安装包開始打开Hadoop的官方站点&#xff0c;点击Download Hadoop或点击“G…

版本之间如何兼容_Spring Boot 2.4 版本的系统运行要求

名字Servlet 版本Tomcat 9.04.0Jetty 9.43.1Undertow 2.04.0Spring Boot 2.4.2-SNAPSHOT 版本要求至少 Java 8 及其以上版本&#xff0c;目前最高能够支持到 Java 15 &#xff08;包含 15&#xff09;的版本。 Spring 框架&#xff08;Framework&#xff09; 5.3.2 的版本或者以…

JavaScript异步处理问题,循环处理异步任务,并拿到数据,Nodejs循环异步任务接口处理

一、问题描述及解答&#xff1a; 在Promise(异步事件)中&#xff0c;通过遍历的方式处理数据&#xff0c;最后将带有数据的Promise通过return返回&#xff0c;在async/await处理机制中的到的数据是一个空数据组[]或不完整的数据&#xff0c;如下&#xff1a; 使用定时器后数据…

tomcat lifecyclelistener_大公司程序员带你死磕Tomcat系列(五)——容器

死磕Tomcat系列(5)——容器回顾在死磕Tomcat系列(1)——整体架构中我们简单介绍了容器的概念&#xff0c;并且说了在容器中所有子容器的父接口是Container。在死磕Tomcat系列(2)——EndPoint源码解析中&#xff0c;我们知道了连接器将请求过来的数据解析成Tomcat需要的ServletR…

获取当前周一日期_Excel工作表中最全的时间和日期函数,效率、办公必备

在Excel工作表中&#xff0c;函数也可以分为好几类&#xff0c;今天&#xff0c;小编带大家学习时间和日期函数。一、Excel工作表日期函数&#xff1a;Date。功能&#xff1a;返回特定日期的序列号。语法结构&#xff1a;Date(年,月,日)。目的&#xff1a;将制定的“年”、“月…

这样就算会了PHP么?-11

PHP中关于类的基本内容练习&#xff1a; <?phpclass SportObject{public $name;public $height;public $avirdupois;public function __construct($name, $height,$avirdupois) {$this->name $name;$this->height $height;$this->avirdupois $avirdupois;}func…

一个黑色全屏的计时器_我入手了一个1000多的智能手环,值吗?|Fitbit Charge 4测评...

入手Fitbit Charge 4了。作为一个喜欢晚上做运动的Boy&#xff0c;每次运动带着手机确实有够累赘&#xff0c;比如跑步的时候&#xff0c;掏手机看真的很麻烦&#xff0c;但手环只需抬手即可看时间、心率、步数这些&#xff0c;确实很方便。而且&#xff0c;有了手环之后&#…

python没有用_你可能没有在Python3中使用但却应该使用的东西

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 由于Python EOL的发布&#xff0c;许多人开始将他们的Python版本从2切换到3。不幸的是&#xff0c;我发现大多数Python3看起来仍然像Python2&#xff0c;但是要加括号(尽管在我之前的文章…