>[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;
}
~~~