>[info] 目前菜單欄點擊相關菜單僅做了click以及view的事件,其他事件可以參考[Easywechat](https://www.easywechat.com/4.x/official-account/server.html)相關章節
>[warning] 以下代碼完全復制了當前項目的代碼,主要是實現了菜單欄的點擊的時候的各種響應事件的處理,可以邊對著在線演示的功能邊看下面的代碼邏輯,這樣會更清晰

#### 構造函數
##### 這個是安裝了微信插件后直接調用拉取插件的配置,也就是前面代碼中反復出現的`$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;
}
~~~