Exemple #1
0
	public function start() {
		if(empty($this->token)) {
			exit('Access Denied');
		}
		if(!WeUtility::checkSign($this->token)) {;
			exit('Access Denied');
		}
		if(strtolower($_SERVER['REQUEST_METHOD']) == 'get') {
			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');
			}
			WeUtility::logging('trace', $this->message);
			$this->before();
			$this->response = $this->matcher();
			$this->response['content'] = $this->process();
			if(empty($this->response['content']) || ($this->response['content']['type'] == 'text' && empty($this->response['content']['content'])) || ($this->response['content']['type'] == 'news' && empty($this->response['content']['items']))) {
				$this->response['module'] = 'default';
				$this->response['content'] = $this->process();
			}
			$this->after();
			WeUtility::logging('response', $this->response);
			exit(WeUtility::response($this->response['content']));
		}
		WeUtility::logging('waring', 'Request Failed');
		exit('Request Failed');
	}
Exemple #2
0
 public function hookBefore()
 {
     global $_W, $engine;
     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
     $message = WeUtility::parse($postStr);
     if (!in_array($message['msgtype'], array('text', 'image'))) {
         return false;
     }
     $member = pdo_fetch("SELECT id, lastupdate, rid, nickname, isjoin, isblacklist FROM " . tablename('wxwall_members') . " WHERE from_user = '******'from']}' LIMIT 1");
     if (empty($member) || empty($member['isjoin'])) {
         return false;
     }
     $wall = pdo_fetch("SELECT * FROM " . tablename('wxwall_reply') . " WHERE rid = '{$member['rid']}' LIMIT 1");
     if (!empty($wall['timeout']) && $wall['timeout'] > 0 && TIMESTAMP - $member['lastupdate'] >= $wall['timeout']) {
         pdo_update('wxwall_members', array('isjoin' => 0, 'lastupdate' => TIMESTAMP), array('from_user' => $message['from']));
         return false;
     }
     if (empty($wall['quit_command']) && $message['content'] == '退出' || !empty($wall['quit_command']) && $message['content'] == $wall['quit_command']) {
         pdo_update('wxwall_members', array('isjoin' => 0, 'lastupdate' => TIMESTAMP), array('from_user' => $message['from']));
         $response = array();
         $response['FromUserName'] = $message['to'];
         $response['ToUserName'] = $message['from'];
         $response['MsgType'] = 'text';
         $response['Content'] = $wall['quit_tips'];
         exit(WeUtility::response($response));
     }
     if (empty($member['nickname'])) {
         $response = array();
         $response['FromUserName'] = $message['to'];
         $response['ToUserName'] = $message['from'];
         $response['MsgType'] = 'text';
         $response['Content'] = '发表话题前请<a target="_blank" href="' . $_W['siteroot'] . create_url('index/module', array('name' => 'wxwall', 'do' => 'register', 'from' => $message['from'])) . '">登记</a>您的信息。';
         exit(WeUtility::response($response));
     }
     $data = array('rid' => $member['rid'], 'from_user' => $message['from'], 'type' => $message['type'], 'createtime' => TIMESTAMP);
     if (empty($wall['isshow']) && empty($member['isblacklist'])) {
         $data['isshow'] = 1;
     } else {
         $data['isshow'] = 0;
     }
     if ($message['type'] == 'text') {
         $data['content'] = $message['content'];
     }
     if ($message['type'] == 'image') {
         $image = ihttp_request($message['picurl']);
         $filename = 'wxwall/' . $member['rid'] . '/' . random(30) . '.jpg';
         file_write($filename, $image['content']);
         $data['content'] = $filename;
     }
     if ($message['type'] == 'link') {
         $data['content'] = iserializer(array('title' => $message['title'], 'description' => $message['description'], 'link' => $message['link']));
     }
     pdo_insert('wxwall_message', $data);
     pdo_update('wxwall_members', array('lastupdate' => TIMESTAMP), array(from_user => $message['from']));
     $engine->response = array('module' => 'wxwall', 'rule' => $member['rid']);
     $engine->stat();
     $response = array();
     $response['FromUserName'] = $message['to'];
     $response['ToUserName'] = $message['from'];
     $response['MsgType'] = 'text';
     $response['Content'] = htmlspecialchars_decode($wall['send_tips']);
     if (!empty($member['isblacklist'])) {
         $response['Content'] .= '你已被列入黑名单,发送的消息需要管理员审核!';
     }
     exit(WeUtility::response($response));
 }
Exemple #3
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');
 }