EventHandle.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Wechat\Official;
  3. use App\Services\Auth\AuthService;
  4. use App\Services\Common\WechatService;
  5. use EasyWeChat\Kernel\Contracts\EventHandlerInterface;
  6. class EventHandle implements EventHandlerInterface
  7. {
  8. /**
  9. * @var AuthService
  10. */
  11. private $authService;
  12. /**
  13. * @var WechatService
  14. */
  15. private $wechatService;
  16. /**
  17. * EventHandle constructor.
  18. */
  19. public function __construct()
  20. {
  21. $this->authService=app('App\Services\Auth\AuthService');
  22. $this->wechatService=app('App\Services\Common\WechatService');
  23. }
  24. /**
  25. * @param mixed $payload
  26. * @return string
  27. * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
  28. */
  29. public function handle($payload = null)
  30. {
  31. switch ($payload['Event']) {
  32. case 'subscribe':
  33. //关注公众号事件
  34. return $this->wakeUp("App\\Wechat\\Official\\Event\\", "SubscribeEvent", $payload);
  35. break;
  36. case 'SCAN':
  37. //用户扫公众号生成的二维码事件
  38. return $this->wakeUp("App\\Wechat\\Official\\Event\\Scan\\", $payload['EventKey'], $payload);
  39. break;
  40. case 'CLICK':
  41. //点击菜单拉取消息时的事件推送
  42. return $this->wakeUp("App\\Wechat\\Official\\Event\\Click\\", $payload['EventKey'], $payload);
  43. break;
  44. case 'VIEW':
  45. //点击菜单跳转链接时的事件推送
  46. // return $this->wakeUp("App\\Wechat\\Official\\Event\\View\\", $payload['EventKey'], $payload);
  47. break;
  48. case 'scancode_push':
  49. //菜单 扫码推事件的事件推送
  50. return $this->wakeUp("App\\Wechat\\Official\\Event\\ScanCodePush\\", $payload['EventKey'], $payload);
  51. break;
  52. case 'scancode_waitmsg':
  53. //菜单 扫码推事件且弹出“消息接收中”提示框的事件推送
  54. return $this->wakeUp("App\\Wechat\\Official\\Event\\ScanCodeWaitmsg\\", $payload['EventKey'], $payload);
  55. break;
  56. case 'pic_sysphoto':
  57. //菜单 弹出系统拍照发图的事件推送
  58. return $this->wakeUp("App\\Wechat\\Official\\Event\\PicSysPhoto\\", $payload['EventKey'], $payload);
  59. break;
  60. case 'pic_photo_or_album':
  61. //菜单 弹出拍照或者相册发图的事件推送
  62. return $this->wakeUp("App\\Wechat\\Official\\Event\\PicPhotoOrAlbum\\", $payload['EventKey'], $payload);
  63. break;
  64. case 'pic_weixin':
  65. //菜单 弹出微信相册发图器的事件推送
  66. return $this->wakeUp("App\\Wechat\\Official\\Event\\PicWeixin\\", $payload['EventKey'], $payload);
  67. break;
  68. case 'location_select':
  69. //菜单 弹出地理位置选择器的事件推送
  70. return $this->wakeUp("App\\Wechat\\Official\\Event\\LocationSelect\\", $payload['EventKey'], $payload);
  71. break;
  72. case 'view_miniprogram':
  73. //菜单 点击菜单跳转小程序的事件推送
  74. // return $this->wakeUp("App\\Wechat\\Official\\Event\\ViewMiniProgram\\", $payload['EventKey'], $payload);
  75. break;
  76. }
  77. }
  78. private function wakeUp($namespace, $classname, $payload)
  79. {
  80. $official=$this->wechatService->getOfficialAccount();
  81. $wechatUser=$official->user->get($payload['FromUserName']);
  82. $user=$this->authService->wechatCheck($wechatUser);
  83. $class =$namespace.$classname;
  84. if (!class_exists($class)) {
  85. return "";
  86. }
  87. $class =app($class);
  88. return $class->handle($wechatUser, $user, $payload);
  89. }
  90. }