>[info] 目前菜单栏点击相关菜单仅做了click以及view的事件,其他事件可以参考[Easywechat](https://www.easywechat.com/4.x/official-account/server.html)相关章节 >[warning] 以下代码完全复制了当前项目的代码,主要是实现了菜单栏的点击的时候的各种响应事件的处理,可以边对着在线演示的功能边看下面的代码逻辑,这样会更清晰 ![](https://img.kancloud.cn/33/94/33949018e1eb34dfebdca11ede909008_861x654.png) #### 构造函数 ##### 这个是安装了微信插件后直接调用拉取插件的配置,也就是前面代码中反复出现的`$this->app` ~~~ public function _initialize() { parent::_initialize(); $this->app = Factory::officialAccount(Config::load()); } ~~~ #### 核心代码 ~~~ /** * 入口文件 * /api/Easycenter/index */ public function index() { $app = $this->app; //$message返回值 /*[ log ] ************************************* [ log ] array ( 'ToUserName' => 'gh_4f212d728919', 'FromUserName' => 'oYr-IjpFjg4U0Ukfp1xsYXiD8kFM', 'CreateTime' => '1638513465', 'MsgType' => 'text', 'Content' => '55555555', 'MsgId' => '23457872284094365', ) [ log ] **************************************/ $app->server->push(function ($message) use ($app) { if ($message["MsgType"] == "event") { if ($message["Event"] == "subscribe") { /*关注*/ $ck = \app\admin\model\User::where(["openid" => $message["FromUserName"]])->find(); if (!$ck) { // $userinfo = $app->user->get($message["FromUserName"]); $user = new \app\admin\model\User(); $user->data([ // "username" => isset($userinfo["nickname"]) ? $userinfo["nickname"] : '未获取到', // "nickname" => isset($userinfo["nickname"]) ? $userinfo["nickname"] : '未获取到', "openid" => $message["FromUserName"], // "avatar" => isset($userinfo["headimgurl"]) ? $userinfo["headimgurl"] : '', "status" => "normal", // "status" => "hidden", ]); $user->save(); } else { if ($ck["subscribe"] == 0) { $ck->subscribe = 1; $ck->save(); } } return "欢迎关注老吴线报\n做线报我是认真的\n记得每日来签到打卡查看线报"; } else if ($message["Event"] == "unsubscribe") { /*取消关注-直接删除*/ \app\admin\model\User::where(["openid" => $message["FromUserName"]])->delete(); // $ck = \app\admin\model\User::where(["openid" => $message["FromUserName"]])->find(); // if (!$ck) { //// $userinfo = $app->user->get($message['FromUserName']); // $user = new \app\admin\model\User(); // $user->data([ //// "username" => isset($userinfo["nickname"]) ? $userinfo["nickname"] : '未获取到', //// "nickname" => isset($userinfo["nickname"]) ? $userinfo["nickname"] : '未获取到', // "openid" => $message["FromUserName"], //// "avatar" => isset($userinfo["headimgurl"]) ? $userinfo["headimgurl"] : '', // "subscribe" => 0, // "status" => "hidden" // ]); // $user->save(); // } else { // $ck->subscribe = 0; // $ck->save(); // } // return '期待您再次来到老吴订单监控平台'; } else if ($message["Event"] == "CLICK") { $userinfo = \app\admin\model\User::where(['openid' => $message['FromUserName']])->find(); if ($message['EventKey'] == 'GetMsg') { // 接收 if ($userinfo['status'] == 'normal') { return "您当前正是接收的状态,请自重\n当前状态:接收线报\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } else { $userinfo->status = 'normal'; $userinfo->save(); return "状态切换成功,每天看线报的人都是努力的人\n当前状态:接收线报\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } } else if ($message['EventKey'] == 'RefuseMsg') { // 拒收 if ($userinfo['status'] == 'hidden') { return "您当前正是拒收的状态,接点单子不好吗?赶紧点开接收,做一个努力的人\n当前状态:拒收线报\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } else { $userinfo->status = 'hidden'; $userinfo->save(); return "状态切换成功,每天看线报的人都是努力的人,你都不接收线报了,跟咸鱼有什么分别\n当前状态:拒收线报\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } } else if ($message['EventKey'] == 'Line1') { // 线路一 if ($userinfo['status'] == 'hidden') { $userinfo->status = 'normal'; $userinfo->save(); return "线路一状态切换成功,每天看线报的人都是努力的人\n\n当前状态:线路一接收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } else { $userinfo->status = 'hidden'; $userinfo->save(); return "线路一状态切换成功,每天看线报的人都是努力的人,你都不接收线报了,跟咸鱼有什么分别\n\n当前状态:线路一拒收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } } else if ($message['EventKey'] == 'Line2') { // 线路二 if ($userinfo['status2'] == 'hidden') { $userinfo->status2 = 'normal'; $userinfo->save(); return "线路二状态切换成功,每天看线报的人都是努力的人\n\n当前状态:线路二接收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } else { $userinfo->status2 = 'hidden'; $userinfo->save(); return "线路二状态切换成功,每天看线报的人都是努力的人,你都不接收线报了,跟咸鱼有什么分别\n\n当前状态:线路二拒收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } } else if ($message['EventKey'] == 'Line3') { // 线路三 if ($userinfo['status3'] == 'hidden') { $userinfo->status3 = 'normal'; $userinfo->save(); return "线路三状态切换成功,每天看线报的人都是努力的人\n\n当前状态:线路三接收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } else { $userinfo->status3 = 'hidden'; $userinfo->save(); return "线路三状态切换成功,每天看线报的人都是努力的人,你都不接收线报了,跟咸鱼有什么分别\n\n当前状态:线路三拒收线报\n\n当前为及时通知助手,上限为100人,关注左边永久订阅公众号,可获取最新及时通知助手二维码。\n做线报,老吴是认真的"; } } else if ($message['EventKey'] == 'MyCode') { // 查看当前二维码 $mediaId = 'vu-KeNy27oe_xOdrmuJre5c1HO1hIxUdShtKbBK1-Us'; $image = new Image($mediaId); return $image; } else if ($message['EventKey'] == 'MyCodeForever') { // 查看永久二维码 $mediaId = 'vu-KeNy27oe_xOdrmuJre3_FoKMEl05pGlDMKaPjwFc'; $image = new Image($mediaId); return $image; } else if ($message['EventKey'] == 'SendNum') { $dat1 = 'sen1d' . date('Ymd'); $dat2 = 'sen2d' . date('Ymd'); $dat3 = 'sen3d' . date('Ymd'); $redis = new Redis(); $num1 = 0; $num2 = 0; $num3 = 0; if ($redis->has($dat1)) { $num1 = $redis->get($dat1); } else { $redis->set($dat1, 0); } if ($redis->has($dat2)) { $num2 = $redis->get($dat2); } else { $redis->set($dat2, 0); } if ($redis->has($dat3)) { $num3 = $redis->get($dat3); } else { $redis->set($dat3, 0); } // $redis->set($dat1, rand(1, 5)); // $redis->set($dat2, rand(1, 5)); // $redis->set($dat3, rand(1, 5)); $msg = "早上8:30开始到" . date("H: i:s") . "\n线路一发送" . $num1 . "条\n线路二发送" . $num2 . "条\n线路三发送" . $num3 . "条\n"; return $msg; } // * $dat = 'sen1d' . date('Ymd'); // * SendNum } } else if ($message["MsgType"] == "text") { $text = $message["Content"]; if ($text == '绑定手机号码') { return '请输入您的手机号'; } $ret = Http::get('http://api.qingyunke.com/api.php?key=free&appid=0&msg=' . $text); $ret = json_decode($ret, true); if ($ret) { if ($ret['result'] == 0) { $ret = str_replace("{ br}", "\n", $ret['content']); return $ret; } else { return '对话达到了上限了,请10分钟后再跟我聊天,么么哒。' . $text; } } else { return "您说话太快了,慢点说" . $text; } } else { return '对话功能还在开发当中!敬请期待'; } }); $response = $app->server->serve(); // 将响应输出 $response->send(); exit; // Laravel 里请使用:return $response; } ~~~