DingTalk.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace common\helpers;
  3. class DingTalk
  4. {
  5. private static $webhook = 'https://oapi.dingtalk.com/robot/send?access_token=';
  6. private static function request_by_curl($post_string)
  7. {
  8. $ch = curl_init();
  9. curl_setopt($ch, CURLOPT_URL, self::$webhook . \Yii::$app->params['DingTalk']['accessToken']);
  10. curl_setopt($ch, CURLOPT_POST, 1);
  11. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  12. curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
  13. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
  14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  15. // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
  16. curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
  17. curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
  18. $data = curl_exec($ch);
  19. curl_close($ch);
  20. return json_decode($data, true);
  21. }
  22. public static function sendNotice($message)
  23. {
  24. $message['serverIP'] = $_SERVER['HTTP_HOST'];
  25. $data = [
  26. 'msgtype' => 'text',
  27. 'text' => ['content' => $message],
  28. "at" => [
  29. 'atMobiles' => \Yii::$app->params['DingTalk']['atMobiles'],
  30. 'atUserIds' => \Yii::$app->params['DingTalk']['atUserIds'],
  31. 'isAtAll' => false,
  32. ]
  33. ];
  34. // 正式环境才发送
  35. if (in_array($_SERVER['HTTP_HOST'], ['fapi.ekhkad.com', 'bapi.ekhkad.com'])) {
  36. $data['serverAddr'] = $_SERVER['SERVER_ADDR'];
  37. $data['serverName'] = $_SERVER['SERVER_NAME'];
  38. $result = self::request_by_curl(json_encode($data));
  39. if ($result['errcode'] > 0) {
  40. // 重新推送一次,如果失败,写错误日志
  41. $result = self::request_by_curl(json_encode($data));
  42. if (!$result['errcode']) {
  43. LoggerTool::error([$result, $message]);
  44. }
  45. }
  46. }
  47. }
  48. }