PushNotification.php 1.9 KB

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