PushNotification.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Components;
  3. use GuzzleHttp\Client;
  4. use Log;
  5. class PushNotification
  6. {
  7. public static function send($title, $content)
  8. {
  9. switch (sysConfig('is_notification')) {
  10. case 'serverChan':
  11. return self::ServerChan($title, $content);
  12. case 'bark':
  13. return self::Bark($title, $content);
  14. default:
  15. return false;
  16. }
  17. }
  18. /**
  19. * ServerChan推送消息
  20. *
  21. * @param string $title 消息标题
  22. * @param string $content 消息内容
  23. *
  24. * @return mixed
  25. */
  26. private static function ServerChan(string $title, string $content)
  27. {
  28. // TODO:一天仅可发送不超过500条
  29. $request = (new Client(['timeout' => 15]))->get(
  30. 'https://sc.ftqq.com/' . sysConfig(
  31. 'server_chan_key'
  32. ) . '.send?text=' . $title . '&desp=' . urlencode($content)
  33. );
  34. $message = json_decode($request->getBody(), true);
  35. // 发送成功
  36. if ($request->getStatusCode() == 200) {
  37. if ( ! $message['errno']) {
  38. Helpers::addNotificationLog($title, $content, 2);
  39. return $message;
  40. }
  41. // 发送失败
  42. Helpers::addNotificationLog(
  43. $title,
  44. $content,
  45. 2,
  46. 'admin',
  47. -1,
  48. $message ? $message['errmsg'] : '未知'
  49. );
  50. return false;
  51. }
  52. // 发送错误
  53. Log::error('ServerChan消息推送异常:' . var_export($request, true));
  54. return false;
  55. }
  56. /**
  57. * Bark推送消息
  58. *
  59. * @param string $title 消息标题
  60. * @param string $content 消息内容
  61. *
  62. * @return mixed
  63. */
  64. private static function Bark(string $title, string $content)
  65. {
  66. $request = (new Client(['timeout' => 15]))->get(
  67. 'https://api.day.app/' . sysConfig(
  68. 'bark_key'
  69. ) . '/' . $title . '/' . $content
  70. );
  71. $message = json_decode($request->getBody(), true);
  72. if ($request->getStatusCode() == 200) {
  73. // 发送成功
  74. if ($message['code'] == 200) {
  75. Helpers::addNotificationLog($title, $content, 3);
  76. return $message;
  77. }
  78. // 发送失败
  79. Helpers::addNotificationLog(
  80. $title,
  81. $content,
  82. 3,
  83. 'admin',
  84. -1,
  85. $message
  86. );
  87. return false;
  88. }
  89. // 发送错误
  90. Log::error('Bark消息推送异常:' . var_export($request, true));
  91. return false;
  92. }
  93. }