Exemple #1
0
 /**
  * 接收微信消息
  */
 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');
         }
     }
 }