武大微淘是我最近一直在做的项目,关于这个项目是干嘛的,下学期会详细介绍。放假这几天以来,我把全部心思都花在这个项目的开发上,目前已经做好了网页版的大部门功能及主要界面的美工,APP也已经做好,现在要做的就是尽快把微信版也做好,然后就可以安心回家过年了(还有四天)。关注互联网的人应该知道,未来几年,微信作为一个超级APP,将会在很大程度上改变我们的生活,而2013年很火的O2O模式也会在未来的日子里广泛流行。所以微信开发是一个热衷于IT行业的码农不可或缺的一项技能,也是想搞互联网创业的人不可忽视的一个领域。 闲话不多说,上一段今天写的代码,主要实现了用户关注回复图文消息、查询网站数据库返回店铺信息到微信、关键词回复等功能。采用昨天刚学的thinkphp框架开发,比起一个月前写的面向过程查询数据库,在代码结构方面要简洁很多。大部分功能有待完善...

扫描关注该微信号

<?php
//实例化微信控制器类
$weixinObj = new WeixinAction();
//调用微信回复方法
$weixinObj->responseMsg();
//定义微信控制器类
class WeixinAction extends Action
{
	//定义微信回复主函数
    public function responseMsg()
    {
		//获取微信发送数据
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

      	//返回微信回复数据
		if (!empty($postStr)){
                //解析数据
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
				//发送消息方ID
                $fromUsername = $postObj->FromUserName;
				//接收消息方ID
                $toUsername = $postObj->ToUserName;
				//获取用户发送消息
                $keyword = trim($postObj->Content);
				//截取用户发送消息前两个汉字,GBsubstr为自定义字符串截取函数
				$keyword1=$this->GBsubstr($keyword,0,6);
				//截取用户发送消息除前两个汉字外的剩余汉字
				$keyword2=$this->GBsubstr($keyword,6);
				//用户发送消息的时间
                $time = time();
				//消息类型
				$form_MsgType=$postObj->MsgType;
				//文本消息回复模板
				$textTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[%s]]></MsgType>
							<Content><![CDATA[%s]]></Content>
							<FuncFlag>0</FuncFlag>
							</xml>"; 
				//事件消息
				if($form_MsgType=="event"){
					$form_Event=$postObj->Event;
					//用户订阅事件
					if($form_Event=="subscribe"){
						//回复欢迎消息
						$this->responseWelcome($fromUsername,$toUsername,$time);
					}
				}
				//文本消息
				if($form_MsgType=="text"){
					//用户发送消息为“help”或者“帮助”时
					if($keyword=="help" || $keyword=="帮助"){
						//回复文本消息,测试中,待完善
                		$this->responseText($fromUsername,$toUsername,$keyword,$time,$textTpl);
					}
					//用户发送消息前两个汉字为“逛逛时”
					if($keyword1=="逛逛"){
						//回复文本消息,测试中,待完善
                		$this->responseText($fromUsername,$toUsername,$keyword2,$time,$textTpl);
					}
					//默认回复消息
					$this->responseWelcome($fromUsername,$toUsername,$time);
				}

        }else {
        	echo "";
        	exit;
        }
    }
	//自定义函数,回复欢迎消息
	public function responseWelcome($fromUsername,$toUsername,$time){
			  $resultStr="<xml>\n
              <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>\n
              <FromUserName><![CDATA[".$toUsername."]]></FromUserName>\n
              <CreateTime>".$time."</CreateTime>\n
              <MsgType><![CDATA[news]]></MsgType>\n
              <ArticleCount>5</ArticleCount>\n
              <Articles>\n";

              //添加封面图文消息
              $resultStr.="<item>\n
              <Title><![CDATA[武大微淘——让O2O成为一种流行]]></Title> \n
              <Description><![CDATA[]]></Description>\n
              <PicUrl><![CDATA[http://weitao.bestwhu.com/webcss/default/images/logo.png]]></PicUrl>\n
              <Url><![CDATA[http://weitao.bestwhu.com/]]></Url>\n
              </item>\n";
			  //查询店铺信息
			  $Data = M('meal_shop');
			  $data1 = $Data->select();
              foreach($data1 as $item){
              //回复四个店铺信息
              $resultStr.="<item>\n
              <Title><![CDATA[【".$item[shop_name]."】\n店铺地址:".$item[shop_address]."\n订购电话:".$item[shop_tel]."\n点击进入网站购买]]></Title> \n
              <Description><![CDATA[]]></Description>\n
              <PicUrl><![CDATA[http://weitao.bestwhu.com/".$item[shop_pic]."]]></PicUrl>\n
              <Url><![CDATA[http://weitao.bestwhu.com/?app_act=shop&id=$item[shop_id]]]></Url>\n
              </item>\n";
			  }

              $resultStr.="</Articles>\n
              <FuncFlag>0</FuncFlag>\n
              </xml>";

              echo $resultStr;
              exit;
	}
	//自定义函数,回复文字消息
	public function responseText($fromUsername,$toUsername,$keyword,$time,$textTpl){
				if(!empty( $keyword ))
                {
              		$msgType = "text";
					$contentStr = $keyword;
					$Data = M('meal_shop'); 
        			$data1 = $Data->select();
					foreach($data1 as $item){
					$contentStr.=$item['shop_name']."
";
					}

                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }
	}
	//自定义函数,截取字符串(gbk编码下,一个汉字占两个字符;utf8编码下,一个汉字占三个字符。为避免乱码,自定义该函数截取字符串)
	public function GBsubstr($string, $start, $length) {  
				if(empty($length)){
					$length=strlen($string)-$start;
				}
				if(strlen($string)>$length){  
					$str=null;  
					$len=$start+$length;  
					for($i=$start;$i<$len;$i++){  
						if(ord(substr($string,$i,1))>0xa0){  
							$str.=substr($string,$i,2);  
							$i++;  
						}else{  
							$str.=substr($string,$i,1);  
						}  
					}  
					return $str;  
				}else{  
					return $string;  
				}  
	}  

}

?>