钉钉api 获取 accesstoken_Thinkphp5.X异常接管后通过钉钉机器人推送通知
大多團隊在生產(chǎn)環(huán)境下都會關閉app_debug,所以相對應的錯誤信息就不能實時查看到。以下分享一個目前團隊項目正在用的生產(chǎn)環(huán)境下相關技術人員能第一時間獲取通知的方法:
先上效果圖:
以上通知是在釘釘中顯示!
下面介紹開發(fā)步驟:
1:Thinkphp版本需在5.X或以上,在config/app.php中接管異常處理
(個人案例中調用方式,具體命名依照對應項目建立)
'exception_handle' => 'appCommonControllerException',具體操作可以參考官方文檔:https://www.kancloud.cn/manual/thinkphp5_1/354092
2:在異常接管方法中實現(xiàn)以下代碼
<?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')) { // 參數(shù)驗證錯誤 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); } // 其他錯誤交給系統(tǒng)處理 return parent::render($e); }}3:釘釘Server的創(chuàng)建
<?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); // 線下環(huán)境不用開啟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參數(shù),具體操作步驟參考:
1:先下載PC版釘釘
2:發(fā)起群聊,添加至少2人創(chuàng)建群聊
3:點擊群聊界面右上角三個點中的 群機器人,選擇 添加機器人,選擇最后一個 自定義
4:釘釘API地址就在webhook中
到這里,生產(chǎn)環(huán)境下即使關閉了app_debug,我們也能第一時間收到異常記錄了!特別提醒,釘釘貌似每分鐘只能發(fā)送20條推送。
關于釘釘?shù)腁PI,代碼中默認調用text文本形式,其實還有很多,例如 link markdown actionCard 方式,小伙伴們可以自行研究~
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的钉钉api 获取 accesstoken_Thinkphp5.X异常接管后通过钉钉机器人推送通知的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node中模块系统及核心模块、执行nod
- 下一篇: 去掉 edittext 长按全选_开封消