MarketingController.php 2.7 KB

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