resource = xml2array($xml); try { switch ($this->resource['MsgType']) { case 'text': return $this->text(); break; case 'image': return $this->image(); break; case 'voice': return $this->voice(); break; case 'video': return $this->video(); break; case 'shortvideo': return $this->shortVideo(); break; case 'event': switch ($this->resource['Event']) { case 'subscribe': return $this->subscribe(); break; case 'unsubscribe': return $this->unSubscribe(); break; case 'SCAN': return $this->scan(); break; case "CLICK": return $this->click(); } break; } } catch (\Exception $e) { throw new WeChatException(); } } } private function text() { $resource = $this->resource; switch ($this->resource['Content']) { case "开启每日推送": SubscribeModel::updateOrCreate( ['openid' => $resource['FromUserName'], 'public_id' => $resource['ToUserName']], ['subscribe' => 1] ); $resource['Content'] = "已成功开启「时遇记」每日推送\n\n每晚 10:00 不见不散\n时光微妙,遇见你真好~\n\n如需关闭请回复“关闭每日推送”"; return $this->returnText($resource); break; case "关闭每日推送": $resource = $this->resource; $resource['Content'] = "正在关闭「每日推送」消息提醒\n\n关闭后,你将无法收到小遇文章推送,每晚10:00小遇就不能陪你啦~\n\n确认关闭,请【点此】~"; return $this->returnText($resource); break; case '确认关闭每日推送': SubscribeModel::updateOrCreate( ['openid' => $resource['FromUserName'], 'public_id' => $resource['ToUserName']], ['subscribe' => 0] ); $resource['Content'] = "已成功关闭「每日推送」\n\n每晚 10:00 ,小遇就不能准时给你报时啦~\n不过无论什么时候你想小遇了,或者说遇到什么心事了,随时记得来找小遇哦,小遇一直都在~\n\n重新开启请【点此】"; return $this->returnText($resource); break; case '今日文章': $article = DailyPushModel::where('date', '<=', date('Y-m-d'))->orderBy('date', 'desc')->first(); $content = $article->reply_content . "\n\n点此查看文章~"; // $page = "pages/starter/starter?launch_type=free&url=".urlencode("/pages/article-redirect/article-redirect?url=".urlencode($article->article_url)); // $content = $article->reply_content."\n\n点此查看文章~"; $resource['Content'] = $content; return $this->returnText($resource); break; } } private function image() { } private function voice() { } private function video() { } private function shortVideo() { } private function subscribe() { $resource = $this->resource; try { $openid = $resource['FromUserName']; $public_id = $resource['ToUserName']; $userinfo = \WeChat::Fans($public_id)->info($openid); $unionid = $userinfo['unionid']; $auth = AuthKey::where('auth_key', $unionid)->first(); if (!collect($auth)->isEmpty()) { $uid = $auth->uid; $response = Curl::to("http://api.deep.fenpeiduixiang.com/api/analytic/check/new/scan?uid={$uid}")->asJsonResponse(false)->get(); $isexsts = Redis::Sismember("log:bevip:page:tag", $uid); if ((isset($response->isScan) && 1 == $response->isScan) || $isexsts) { $ps = new ProfileService(); $ps->beVip($uid, true); } AuthKey::updateOrCreate( ['auth_key' => $openid, 'auth_type' => $public_id], ['uid' => $uid, 'login_at' => time()] ); } } catch (\Exception $exception) { } $articles = [ [ 'Title' => '分配对象啦!让我们谈一场72小时的恋爱好吗?', 'Description' => '点击查看活动详情,内含快捷报名通道', 'PicUrl' => 'http://mmbiz.qpic.cn/mmbiz_png/8a2FAXRUa7wjyhEBiberqMn6cicHlc9OY1kOPC5XibibAKXEPeWdhpqp8RZRiawyXZ6Z2cXz2UFGlhGlyjakbibDYjIQ/0?wx_fmt=png', 'Url' => 'https://mp.weixin.qq.com/s/8QRAKfxZgJ6LS1gKMRHqyw', ] ]; return $this->returnNews($resource, $articles); } private function unSubscribe() { $resource = $this->resource; try { $openid = $resource['FromUserName']; Openid::where('openid', $openid)->update(['subscribe' => 0]); $openData = User::getUidByOpenid($openid); $profs = new ProfileService(); $profs->beVip($openData['uid'], false); } catch (\Exception $exception) { throw new WeChatException(); } } private function scan() { } private function click() { $resource = $this->resource; switch ($this->resource['EventKey']) { case 'menu_36850': SubscribeModel::updateOrCreate( ['openid' => $resource['FromUserName'], 'public_id' => $resource['ToUserName']], ['subscribe' => 1] ); $resource['Content'] = "已成功开启「时遇记」每日推送\n\n每晚 10:00 不见不散\n时光微妙,遇见你真好~\n\n如需关闭请回复“关闭每日推送”"; return $this->returnText($resource); break; } } /** * 发送文本消息 * @param object $object * @return string */ public function returnText($resuorce) { $template = ' %d 0 '; return sprintf( $template, $resuorce['FromUserName'], $resuorce['ToUserName'], $resuorce['CreateTime'], $resuorce['Content'] ); } public function returnImage($resource) { $template = ' %d '; return sprintf( $template, $resource['FromUserName'], $resource['ToUserName'], $resource['CreateTime'], $resource['MediaId'] ); } public function returnNews($resource, array $array) { $template = ' <![CDATA[%s]]> '; $item = null; foreach ($array as $value) { $item .= sprintf($template, @$value['Title'], @$value['Description'], @$value['PicUrl'], @$value['Url']); } $template = ' %d %d %s '; return sprintf( $template, $resource['FromUserName'], $resource['ToUserName'], $resource['CreateTime'], count($array), $item ); } }