| // +------------------------------------------------+ namespace app\mobile\controller; use app\common\model\Member; use app\common\service\Member as MemberService; use app\common\service\Wechat as WechatService; use cjango\Wechat; use cjango\Wechat\Reply; class Weixin { private $request; public function __construct() { WechatService::instance(); // $config = Config::get('wechat'); // $config['access_token'] = Cache::get('wechat_access_token'); // Wechat::instance($config); // if (!$config['access_token']) { // $config['access_token'] = Token::get(); // Cache::set('wechat_access_token', $config['access_token'], 7000); // Wechat::instance($config, true); // } Wechat::valid(); $this->request = Reply::request(); } /** * 事件分发 */ public function index() { switch ($this->request['msgtype']) { case 'text': self::keywords('text'); break; case 'image': case 'voice': case 'video': case 'shortvideo': case 'location': case 'link': self::unknown(); break; case 'event': self::eventRoute(); //转交事件路由处理 break; default: Reply::response('暂时不支持的消息类型'); break; } } /** * 事件处理路由 */ private function eventRoute() { switch (strtolower($this->request['event'])) { case 'subscribe': if (isset($this->request['eventkey']) && !empty($this->request['eventkey'])) { self::subscribe_tui(); } else { self::subscribe(); } break; case 'unsubscribe': self::unsubscribe(); break; case 'scan': self::scan(); break; case 'location': self::unknown(); break; case 'click': self::keywords($this->request['eventkey']); break; case 'view': exit(); // 如果做精细统计,这里可以获取用户点击的菜单连接 。 // eventkey => http://xxxx // menuid => 4565456456 break; } } /** * 用户关注事件 * 将用户信息写入数据库,回复首次关注信息 * 这里也可以确定用户的绑定关系 */ private function subscribe() { $openid = $this->request['fromusername']; $user = Member::where(['openid' => $openid])->find(); if ($user) { Reply::response('尊敬的' . $user->info->nickname . '先生/女士,欢迎您关注“超级服务管家”请点击下方的“推广工具”来开启您的新媒体微营销的“推广之旅”吧!'); } else { $info = Wechat\User::info($openid); if ($info) { $info['pid'] = 0; $result = MemberService::create($info); if ($result === true) { Reply::response('欢迎注册超级服务管家'); } else { Reply::response('用户注册失败'); } } else { Reply::response('获取用户信息失败'); } } } private function subscribe_tui() { $EventKey = explode('_', $this->request['eventkey']); $user = Member::find($EventKey[1]); $openid = $this->request['fromusername']; $member = Member::where(['openid' => $openid])->find(); if ($member) { Reply::response('尊敬的【' . $member->info->nickname . '】先生/女士,欢迎您关注“超级服务管家”请点击下方的“推广工具”来开启您的新媒体微营销的“推广之旅”吧!'); } if ($user) { if ($user->status) { $info = Wechat\User::info($openid); if ($info) { if ($user->info->is_agent == 1 && $user->info->agent_end_time > time()) { $info['pid'] = $EventKey[1]; } else { $info['pid'] = 0; } $result = MemberService::create($info); if ($result === true) { Reply::response('尊敬的【' . $info['nickname'] . '】,您由【' . $user->info->nickname . '】推荐注册,超级服务管家是一款共享营销工具,可以让任意微信文章都有您的广告'); } else { Reply::response('用户注册失败'); } } else { Reply::response('获取用户信息失败'); } } else { Reply::response('用户被禁用'); } } else { Reply::response('用户不存在'); } } /** * 扫描推广二维码,可以在这里确定用户的绑定关系 */ private function scan() { $pid = $this->request['eventkey']; $openid = $this->request['fromusername']; $user = Member::where(['openid' => $openid])->find(); $parent = Member::find($pid); if ($user) { Reply::response('尊敬的【' . $user->info->nickname . '】先生/女士,欢迎您关注“超级服务管家”请点击下方的“推广工具”来开启您的新媒体微营销的“推广之旅”吧!'); } else { $info = Wechat\User::info($openid); if ($info) { $info['pid'] = $pid; $result = MemberService::create($info); $p = empty($parent) ? '自己' : $parent->info->nickname; if ($result === true) { Reply::response('尊敬的【' . $info['nickname'] . '】,您由【' . $p . '】推荐注册,超级服务管家是一款共享营销工具,可以让任意微信文章都有您的广告'); } else { Reply::response('用户注册失败'); } } else { Reply::response('获取用户信息失败'); } } } /** * 取消关注 */ private function unsubscribe() { } /** * 处理关键字事件 */ private function keywords($keyword) { } /** * 首次关注回复 */ private function first() { } /** * 处理未知回复 */ private function unknown() { } }