Ejemplo n.º 1
0
 public function start()
 {
     global $_W;
     if (empty($this->token)) {
         exit('Access Denied');
     }
     if (!WeUtility::checkSign($this->token)) {
         exit('Access Denied');
     }
     if (strtolower($_SERVER['REQUEST_METHOD']) == 'get') {
         ob_clean();
         ob_start();
         exit($_GET['echostr']);
     }
     if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
         $this->message = WeUtility::parse($postStr);
         if (empty($this->message)) {
             WeUtility::logging('waring', 'Request Failed');
             exit('Request Failed');
         }
         $sessionid = md5($this->message['from'] . $this->message['to'] . $_W['weid']);
         session_id($sessionid);
         WeSession::$weid = $_W['weid'];
         WeSession::$from = $this->message['from'];
         WeSession::$expire = 3600;
         WeSession::start();
         WeUtility::logging('trace', $this->message);
         $pars = $this->matcher();
         $pars[] = array('module' => 'default', 'rule' => '-1');
         foreach ($pars as $par) {
             if (empty($par['module'])) {
                 continue;
             }
             $this->params = $par;
             $this->response = $this->process();
             if (is_array($this->response) && ($this->response['type'] == 'text' && !empty($this->response['content']) || $this->response['type'] == 'news' && !empty($this->response['items']) || !in_array($this->type, array('text', 'news')))) {
                 if (!empty($par['keyword'])) {
                     $this->keyword = $par['keyword'];
                 }
                 break;
             }
         }
         WeUtility::logging('params', $this->params);
         WeUtility::logging('response', $this->response);
         $resp = WeUtility::response($this->response);
         $mapping = array('[from]' => $this->message['from'], '[to]' => $this->message['to'], '[rule]' => $this->params['rule']);
         echo str_replace(array_keys($mapping), array_values($mapping), $resp);
         $subscribes = array();
         foreach ($_W['account']['modules'] as $m) {
             if (in_array($m['name'], $this->modules) && is_array($m['subscribes']) && !empty($m['subscribes'])) {
                 $subscribes[] = $m;
             }
         }
         if (!empty($subscribes)) {
             $this->subscribe($subscribes);
         }
         exit;
     }
     WeUtility::logging('waring', 'Request Failed');
     exit('Request Failed');
 }