/** * 接收微信消息 */ function router() { if (!empty($this->get->signature) && !empty($this->get->echostr) && !empty($this->get->timestamp) && !empty($this->get->nonce)) { $token = $this->model('system')->get('token', 'weixin'); if ($this->_wechat->checkSignature($this->get->signature, $this->get->timestamp, $this->get->nonce, $token)) { return $this->get->echostr; } } else { $data = $this->_wechat->getData(); if (empty($data)) { return new json(json::PARAMETER_ERROR, '错误的访问'); } switch (strtolower($data->MsgType)) { case 'event': switch (strtolower($data->Event)) { case 'subscribe': $eventKey = $data->EventKey; list($qrscene, $eventKey) = explode('_', $eventKey); if (strtolower($qrscene) == 'qrscene') { $eventKey = ltrim($eventKey, 0); } else { echo "扫码参数错误"; } break; case 'scan': $eventKey = ltrim($data->EventKey, 0); break; case 'click': switch ($data->EventKey) { case 'myeqcode': $openid = $data->FromUserName; //二维码保存地址 $file = ROOT . '/application/upload/' . md5($data->FromUserName) . '.jpg'; $userModel = $this->model('user'); $user = $userModel->getByOpenid($openid); if (empty($user)) { $uid = $userModel->registerWeiXin($openid); } else { $uid = $user['id']; } $access_token = $this->access_token(); $action = 'upload'; $type = 'image'; file_put_contents($file, $this->eqcode($uid)); $systemModel = $this->model('system'); $dist = $systemModel->fetch('dist'); $dist = $systemModel->toArray($dist, 'dist'); $eqcodebackground = $dist['eqcodebackground']; $eqcodebackground_x = isset($dist['eqcodebackgroundx']) ? $dist['eqcodebackgroundx'] : 0; $eqcodebackground_y = isset($dist['eqcodebackgroundy']) ? $dist['eqcodebackgroundy'] : 0; $eqcodesize = isset($dist['eqcodesize']) ? $dist['eqcodesize'] : 250; if (is_file($eqcodebackground)) { //给二维码增加背景图 $alpha = 100; $image = new image(); $image->water($eqcodebackground, $file, $eqcodebackground_x, $eqcodebackground_y, $alpha, $file, $eqcodesize, $eqcodesize); } $result = $this->_wechat->file($access_token, $action, $file, $type); $result = json_decode($result, true); if (isset($result['media_id'])) { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'image', 'Image' => array('MediaId' => $result['media_id'])), true, false); } else { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => '无法获取二维码')); } break; default: return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => '尚未定义消息事件'), true, false); } break; default: return; } //扫码之后绑定oid和openid 只允许第一次 $openid = $data->FromUserName; $user = $this->model('user')->getByOpenid($openid); if (!empty($user)) { if (empty($user['oid'])) { if ($eventKey === $user['id']) { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => 'Sorry,您不能把自己做为自己的分销商哦')); } $this->model('user')->where('openid=?', array($openid))->update('oid', $eventKey); return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => '恭喜,您已经成功入住,成为TA旗下的一份子了'), true, false); } else { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => '您已经有了上级分销商了'), true, false); } } else { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'text', 'Content' => '尚未注册或绑定账号,请点此注册或登陆' . $this->http->url('mobile', 'login')), true, false); } break; case 'text': $tid = trim($data->Content); $themeModel = $this->model('theme'); $theme = $themeModel->get($tid); if (!empty($theme)) { return new xml(array('ToUserName' => $data->FromUserName, 'FromUserName' => $data->ToUserName, 'CreateTime' => $_SERVER['REQUEST_TIME'], 'MsgType' => 'news', 'ArticleCount' => 1, 'Articles' => array('item' => array('Title' => $theme['name'], 'Description' => $theme['description'], 'PicUrl' => file::realpathToUrl($theme['middlepic']), 'Url' => $this->http->url('mobile', 'themeDetail', array('id' => $tid))))), true, false); } break; default: //处理无法请求的事件 return file_get_contents('http://www.baidu.com'); } } }