微信公众平台开发(四) 简单回复功能开发
[导读] 一、简介微信公众平台可以根据用户发送的信息进行判断,然后给出对应的回复,具有良好的交互性。下文将模拟简单的回复功能,根据这个案例,开发者也可以基本理解微信交互的原理,进行更深层次的开发。二、思路分
一、简介
微信公众平台可以根据用户发送的信息进行判断,然后给出对应的回复,具有良好的交互性。下文将模拟简单的回复功能,根据这个案例,开发者也可以基本理解微信交互的原理,进行更深层次的开发。
二、思路分析
用户发送过来的文本信息,我们可以提取关键字,通过简单的 if...elseif...else... 实现。
关键代码如下:
1.
if($keyword=="你好"){
2.
$contentStr = "hello";
3.
}elseif($keyword=="苏州"){
4.
$contentStr = "上有天堂,下有苏杭";
5.
}else{
6.
$contentStr = "感谢您关注【卓锦苏州】 微信号:zhuojinsz";
7.
}
如果用户发送"你好",则回复"hello",如果用户发送"苏州",则回复"上有天堂,下有苏杭",其他信息,则回复你的欢迎词。
三、完整代码
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
(!
empty
empty
(
$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
(!
empty
empty
(
$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.
五、关注
四、测试