MarketingController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Models\Marketing;
  4. use GuzzleHttp\Client;
  5. use GuzzleHttp\Psr7;
  6. use GuzzleHttp\Exception\RequestException;
  7. use Illuminate\Http\Request;
  8. use Response;
  9. use Log;
  10. use DB;
  11. class MarketingController extends Controller
  12. {
  13. protected static $config;
  14. function __construct()
  15. {
  16. self::$config = $this->systemConfig();
  17. }
  18. // 邮件群发消息列表
  19. public function emailList(Request $request)
  20. {
  21. $view['list'] = Marketing::query()->where('type', 1)->paginate(15);
  22. return Response::view('marketing/emailList', $view);
  23. }
  24. // 消息通道群发列表
  25. public function pushList(Request $request)
  26. {
  27. $status = $request->get('status');
  28. $query = Marketing::query()->where('type', 2);
  29. if ($status != '') {
  30. $query->where('status', $status);
  31. }
  32. $view['list'] = $query->paginate(15);
  33. return Response::view('marketing/pushList', $view);
  34. }
  35. // 添加推送消息
  36. public function addPushMarketing(Request $request)
  37. {
  38. $title = trim($request->get('title'));
  39. $content = $request->get('content');
  40. if (!self::$config['is_push_bear']) {
  41. return Response::json(['status' => 'fail', 'data' => '', 'message' => '推送失败:请先启用并配置PushBear']);
  42. }
  43. DB::beginTransaction();
  44. try {
  45. $client = new Client();
  46. $response = $client->request('GET', 'https://pushbear.ftqq.com/sub', [
  47. 'query' => [
  48. 'sendkey' => self::$config['push_bear_send_key'],
  49. 'text' => $title,
  50. 'desp' => $content
  51. ]
  52. ]);
  53. $result = json_decode($response->getBody());
  54. if ($result->code) { // 失败
  55. $this->addMarketing(2, $title, $content, -1, $result->message);
  56. throw new \Exception($result->message);
  57. }
  58. $this->addMarketing(2, $title, $content, 1);
  59. DB::commit();
  60. return Response::json(['status' => 'success', 'data' => '', 'message' => '推送成功']);
  61. } catch (\Exception $e) {
  62. Log::info('PushBear消息推送失败:' . $e->getMessage());
  63. DB::rollBack();
  64. return Response::json(['status' => 'fail', 'data' => '', 'message' => '推送失败:' . $e->getMessage()]);
  65. }
  66. }
  67. private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = '')
  68. {
  69. $marketing = new Marketing();
  70. $marketing->type = $type;
  71. $marketing->receiver = $receiver;
  72. $marketing->title = $title;
  73. $marketing->content = $content;
  74. $marketing->error = $error;
  75. $marketing->status = $status;
  76. return $marketing->save();
  77. }
  78. }