一、简介
微信公众平台可以根据用户发送的信息进行判断,然后给出对应的回复,具有良好的交互性。下文将模拟简单的回复功能,根据这个案例,开发者也可以基本理解微信交互的原理,进行更深层次的开发。
二、思路分析
用户发送过来的文本信息,我们可以提取关键字,通过简单的 if...elseif...else... 实现。
关键代码如下:
view sourceprint?1.if($keyword=="你好"){
2. $contentStr = "hello";
3.}elseif($keyword=="苏州"){
4. $contentStr = "上有天堂,下有苏杭";
5.}else{
6. $contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
7.}
如果用户发送"你好",则回复"hello",如果用户发送"苏州",则回复"上有天堂,下有苏杭",其他信息,则回复你的欢迎词。
三、完整代码
view sourceprint?001.一、简介
002.
003.微信公众平台可以根据用户发送的信息进行判断,然后给出对应的回复,具有良好的交互性。下文将模拟简单的回复功能,根据这个案例,开发者也可以基本理解微信交互的原理,进行更深层次的开发。
004.
005.二、思路分析
006.
007.用户发送过来的文本信息,我们可以提取关键字,通过简单的 if...elseif...else... 实现。
008.
009.关键代码如下:
010.
011.
012.if($keyword=="你好"){
013. $contentStr = "hello";
014.}elseif($keyword=="苏州"){
015. $contentStr = "上有天堂,下有苏杭";
016.}else{
017. $contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
018.}
019.
020.如果用户发送"你好",则回复"hello",如果用户发送"苏州",则回复"上有天堂,下有苏杭",其他信息,则回复你的欢迎词。
021.
022.三、完整代码
023.
024.
025.<!--?php
026./**
027.* wechat php test
028.*/
029.
030.//define your token
031.define("TOKEN", "zhuojin");
032.$wechatObj = new wechatCallbackapiTest();
033.$wechatObj--->responseMsg();
034.//$wechatObj->valid();
035.
036.class wechatCallbackapiTest
037.{
038./*public function valid()
039.{
040.$echoStr = $_GET["echostr"];
041.
042.//valid signature , option
043.if($this->checkSignature()){
044.echo $echoStr;
045.exit;
046.}
047.}*/
048.
049.public function responseMsg()
050.{
051.//get post data, May be due to the different environments
052.$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
053.
054.//extract post data
055.if (!emptyempty($postStr)){
056.
057.$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
058.$RX_TYPE = trim($postObj->MsgType);
059.
060.switch($RX_TYPE)
061.{
062.case "text":
063.$resultStr = $this->handleText($postObj);
064.break;
065.case "event":
066.$resultStr = $this->handleEvent($postObj);
067.break;
068.default:
069.$resultStr = "Unknow msg type: ".$RX_TYPE;
070.break;
071.}
072.echo $resultStr;
073.}else {
074.echo "";
075.exit;
076.}
077.}
078.
079.public function handleText($postObj)
080.{
081.$fromUsername = $postObj->FromUserName;
082.$toUsername = $postObj->ToUserName;
083.$keyword = trim($postObj->Content);
084.$time = time();
085.$textTpl = "<xml>
086.<tousername><!--[CDATA[%s]]--></tousername>
087.<fromusername><!--[CDATA[%s]]--></fromusername>
088.<createtime>%s</createtime>
089.<msgtype><!--[CDATA[%s]]--></msgtype>
090.<content><!--[CDATA[%s]]--></content>
091.<funcflag>0</funcflag>
092.</xml>";
093.if(!emptyempty( $keyword ))
094.{
095.$msgType = "text";
096.
097.if($keyword=="你好"){
098.$contentStr = "hello";
099.}elseif($keyword=="苏州"){
100.$contentStr = "上有天堂,下有苏杭";
101.}else{
102.$contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
103.}
104.$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time,$msgType, $contentStr);
105.echo $resultStr;
106.}else{
107.echo "Input something...";
108.}
109.}
110.
111.public function handleEvent($object)
112.{
113.$contentStr = "";
114.switch ($object->Event)
115.{
116.case "subscribe":
117.$contentStr = "感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
118.break;
119.default :
120.$contentStr = "Unknow Event: ".$object->Event;
121.break;
122.}
123.$resultStr = $this->responseText($object, $contentStr);
124.return $resultStr;
125.}
126.
127.public function responseText($object, $content, $flag=0)
128.{
129.$textTpl = "<xml>
130.<tousername><!--[CDATA[%s]]--></tousername>
131.<fromusername><!--[CDATA[%s]]--></fromusername>
132.<createtime>%s</createtime>
133.<msgtype><!--[CDATA[text]]--></msgtype>
134.<content><!--[CDATA[%s]]--></content>
135.<funcflag>%d</funcflag>
136.</xml>";
137.$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
138.return $resultStr;
139.}
140.
141.
142.private function checkSignature()
143.{
144.$signature = $_GET["signature"];
145.$timestamp = $_GET["timestamp"];
146.$nonce = $_GET["nonce"];
147.
148.$token = TOKEN;
149.$tmpArr = array($token, $timestamp, $nonce);
150.sort($tmpArr);
151.$tmpStr = implode( $tmpArr );
152.$tmpStr = sha1( $tmpStr );
153.
154.if( $tmpStr == $signature ){
155.return true;
156.}else{
157.return false;
158.}
159.}
160.}
161.
162.?>
163.
164.四、测试
165.
166.
167.
168.五、关注
四、测试