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

先上效果图:

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

下面介绍开发步骤:

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:点击群聊界面右上角三个点中的 群机器人,选择 添加机器人,选择最后一个 自定义

4:钉钉API地址就在webhook中

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

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

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

  1. 钉钉机器人推送表格图片

    需求:要做一个钉钉机器人推送表格信息,10分钟一次 难点:1钉钉机器人不支持推送excel,2钉钉推送的图片不是动态的,需要自己写一个方法,变成获取新生成的图片 技术方案: 第一种:可以用图片服务器l ...

  2. 钉钉机器人(1)创建钉钉群机器人推送消息

    创建钉钉群机器人发送消息 钉钉群机器人是一个高级扩展功能,只要有一个钉钉账号,就可以使用它.它可以将第三方信息聚合到钉钉群中,实现信息自动同步.支持Webhook协议的自定义接入,通过发明者量化机器人 ...

  3. java消息推送怎么实现_调用钉钉接口实现机器人推送消息

    一.摘要 现实交易中为了能及时了解发明者量化机器人交易状态,有时候我们需要将机器人所执行的交易结果发送到微信.邮箱.短信等等.但每天上百条各种各样的信息,使得对这些信息已经不敏感,导致重要的信息不能及 ...

  4. 从钉钉后台API获取企业通讯录以后,获取每个人的钉钉运动步数

    企业提倡一起运动,用钉钉计步方式督促大家积极锻炼,需要对大家的步数做统计,而钉钉后台只能保存近期一个月的运动数据,所以需要调用钉钉提供的开放API获取运动数据并保存在自己的服务器. //获取部门列表 ...

  5. Python之钉钉机器人推送天气预报

    通过Python脚本结合钉钉机器人,定时向钉钉群推送天气预报 #!/usr/bin/python # -*- coding: utf-8 -*- # Author: aiker@gdedu.ml # ...

  6. python发钉钉消息_Python调用钉钉机器人推送消息

    1.创建钉钉机器人 群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步: 进入一个钉钉群,点击右上角的"群设置"进入群设置页面: 选择 ...

  7. dingtalk 推送手机号信息 golang_Python学习第九十六天:Python调用钉钉机器人推送消息...

    1.创建钉钉机器人 群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步: 进入一个钉钉群,点击右上角的"群设置"进入群设置页面: 选择 ...

  8. jenkins配置钉钉机器人推送job构建信息

    文章目录 一.注册钉钉,创建群聊 二.创建钉钉机器人,获取webhook 三.jenkins安装DingTalk插件 四.jenkins系统配置-配置钉钉 1.找到钉钉配置项,继续配置 五.jenki ...

  9. 钉钉群添加机器人推送消息

    第一步:添加机器人 打开"群设置" 点击"智能群助手" 添加机器人 根据自己需求添加对应机器人,我们选择自定义机器人 设置机器人名字和关键字 ,只有发送消息包含 ...

最新文章

  1. perl 如何更新_Perl 进度条模块
  2. Android studio中正确引入so文件的方法
  3. python中webdriver_Linux上部署python+selenium+webdriver常见问题解决方案
  4. 明明白白你的Linux服务器——网络篇
  5. ABAP开发环境语法高亮的那些事儿
  6. 目标检测训练trick超级大礼包—不改模型提升精度,值得拥有
  7. greenplum 替代mysql_转:MySQL到Greenplum迁移分析
  8. js for in遍历对象_JS中轻松遍历对象属性的几种方式
  9. 天津现代职业学院计算机网络技术,天津现代职业技术学院计算机网络技术专业2016年在辽宁理科高考录取最低分数线...
  10. 黑苹果内置硬盘识别成外置硬盘_压倒U盘最后一根稻草?ORICO iMatch移动固态硬盘体验...
  11. MFC 控件清除内存
  12. 【mediasoup 带宽估计】aimd算法1 : AimdRateControl
  13. Word中如何在指定页插入页眉(论文排版详细总结)
  14. 嵌入式网络基础知识——MQTT引入
  15. 百度地图根据经纬度获取实际地理位置Api接口
  16. Android模拟器的安装、连接和操作
  17. 伸展树 自底向上 自顶向下
  18. 在校生创手机维修租赁平台,服务5万学生月流水45万
  19. 《神经科学:探索脑》学习笔记(第3章 静息态的神经元膜)
  20. Arcgis模型导出之一

热门文章

  1. javascript V8引擎垃圾收集机制
  2. mysql srid_mysql8 参考手册--索引优化
  3. SQL语句中,创建标识列、默认值及各种约束的语法介绍
  4. python输出箭头代码_python matplotlib 注释文本箭头简单代码示例
  5. django select option拼接时value中空格后的内容被截断
  6. python logging模块学习
  7. Python测试开发django5.templates模板变量传参
  8. Delphi---TServerSocket和TClientSocket发送和接收大数据包
  9. 一、SQL语法——4-数据库约束
  10. Linux install innotop