| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | <?phpnamespace App\Wechat\Official;use App\Services\Auth\AuthService;use App\Services\Common\WechatService;use EasyWeChat\Kernel\Contracts\EventHandlerInterface;class EventHandle implements EventHandlerInterface{    /**     * @var AuthService     */    private $authService;    /**     * @var WechatService     */    private $wechatService;    /**     * EventHandle constructor.     */    public function __construct()    {        $this->authService=app('App\Services\Auth\AuthService');        $this->wechatService=app('App\Services\Common\WechatService');    }    /**     * @param mixed $payload     * @return string     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException     */    public function handle($payload = null)    {        switch ($payload['Event']) {            case 'subscribe':                //关注公众号事件                return $this->wakeUp("App\\Wechat\\Official\\Event\\", "SubscribeEvent", $payload);                break;            case 'SCAN':                //用户扫公众号生成的二维码事件                return $this->wakeUp("App\\Wechat\\Official\\Event\\Scan\\", $payload['EventKey'], $payload);                break;            case 'CLICK':                //点击菜单拉取消息时的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\Click\\", $payload['EventKey'], $payload);                break;            case 'VIEW':                //点击菜单跳转链接时的事件推送               // return $this->wakeUp("App\\Wechat\\Official\\Event\\View\\", $payload['EventKey'], $payload);                break;            case 'scancode_push':                //菜单 扫码推事件的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\ScanCodePush\\", $payload['EventKey'], $payload);                break;            case 'scancode_waitmsg':                //菜单 扫码推事件且弹出“消息接收中”提示框的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\ScanCodeWaitmsg\\", $payload['EventKey'], $payload);                break;            case 'pic_sysphoto':                //菜单 弹出系统拍照发图的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\PicSysPhoto\\", $payload['EventKey'], $payload);                break;            case 'pic_photo_or_album':                //菜单 弹出拍照或者相册发图的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\PicPhotoOrAlbum\\", $payload['EventKey'], $payload);                break;            case 'pic_weixin':                //菜单 弹出微信相册发图器的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\PicWeixin\\", $payload['EventKey'], $payload);                break;            case 'location_select':                //菜单 弹出地理位置选择器的事件推送                return $this->wakeUp("App\\Wechat\\Official\\Event\\LocationSelect\\", $payload['EventKey'], $payload);                break;            case 'view_miniprogram':                //菜单 点击菜单跳转小程序的事件推送               // return $this->wakeUp("App\\Wechat\\Official\\Event\\ViewMiniProgram\\", $payload['EventKey'], $payload);                break;        }    }    private function wakeUp($namespace, $classname, $payload)    {        $official=$this->wechatService->getOfficialAccount();        $wechatUser=$official->user->get($payload['FromUserName']);        $user=$this->authService->wechatCheck($wechatUser);        $class =$namespace.$classname;        if (!class_exists($class)) {            return "";        }        $class =app($class);        return $class->handle($wechatUser, $user, $payload);    }}
 |