php微信公众平台开发(三)订阅事件处理
一、简介
新用户关注微信公众平台,将产生一个订阅事件,即subscribe事件,默认代码中没有对这一事件进行相应回复处理。
在新用户关注公众平台后,可能想知道该平台提供了哪些功能,以及怎样使用该平台,通俗一点讲就是该平台的“使用说明书”。
本文将详细讲述对subscribe事件的处理过程,回复相应信息提升交互性。
二、思路分析
微信目前提供了五种消息类型,分别为:
- 文本消息(text);
- 图片消息(image);
- 地理位置消息(location);
- 链接消息(link);
- 事件推送(event);
接收到消息后,首先需要对消息类型做出判断,然后再针对不同类型的消息做出处理。在事件推送中,事件类型又分为三种,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件),还需要再加一次判断;判断为subscribe事件后,根据设定好的欢迎消息,回复给用户。
三、判断消息类型
$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$RX_TYPE=trim($postObj->MsgType);
switch($RX_TYPE)
{
case"text":
$resultStr=$this->handleText($postObj);
break;
case"event":
$resultStr=$this->handleEvent($postObj);
break;
default:
$resultStr="Unknowmsgtype:".$RX_TYPE;
break;
}
说明:
$RX_TYPE=trim($postObj->MsgType); 得到消息类型; case"text": $resultStr=$this->handleText($postObj); 使用handleText()函数处理文本消息; case"event": $resultStr=$this->handleEvent($postObj); 使用handleEvent()函数处理事件推送;
四、判断事件类型
switch($object->Event)
{
case"subscribe":
$contentStr="感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】查天气,如输入:苏州天气"."\n"."【2】查公交,如输入:苏州公交178"."\n"."【3】翻译,如输入:翻译Iloveyou"."\n"."【4】苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
break;
default:
$contentStr="UnknowEvent:".$object->Event;
break;
}
说明:
如果是subscribe事件,设定回复内容为“感谢您关注【卓锦苏州】...”;
五、完整代码
<?php
/**
*wechatphptest
*/
//defineyourtoken
define("TOKEN","zhuojin");
$wechatObj=newwechatCallbackapiTest();
$wechatObj->responseMsg();
//$wechatObj->valid();
classwechatCallbackapiTest
{
/*publicfunctionvalid()
{
$echoStr=$_GET["echostr"];
//validsignature,option
if($this->checkSignature()){
echo$echoStr;
exit;
}
}*/
publicfunctionresponseMsg()
{
//getpostdata,Maybeduetothedifferentenvironments
$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];
//extractpostdata
if(!empty($postStr)){
$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$RX_TYPE=trim($postObj->MsgType);
switch($RX_TYPE)
{
case"text":
$resultStr=$this->handleText($postObj);
break;
case"event":
$resultStr=$this->handleEvent($postObj);
break;
default:
$resultStr="Unknowmsgtype:".$RX_TYPE;
break;
}
echo$resultStr;
}else{
echo"";
exit;
}
}
publicfunctionhandleText($postObj)
{
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$keyword=trim($postObj->Content);
$time=time();
$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(!empty($keyword))
{
$msgType="text";
$contentStr="Welcometowechatworld!";
$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
echo$resultStr;
}else{
echo"Inputsomething...";
}
}
publicfunctionhandleEvent($object)
{
$contentStr="";
switch($object->Event)
{
case"subscribe":
$contentStr="感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】查天气,如输入:苏州天气"."\n"."【2】查公交,如输入:苏州公交178"."\n"."【3】翻译,如输入:翻译Iloveyou"."\n"."【4】苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
break;
default:
$contentStr="UnknowEvent:".$object->Event;
break;
}
$resultStr=$this->responseText($object,$contentStr);
return$resultStr;
}
publicfunctionresponseText($object,$content,$flag=0)
{
$textTpl="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr=sprintf($textTpl,$object->FromUserName,$object->ToUserName,time(),$content,$flag);
return$resultStr;
}
privatefunctioncheckSignature()
{
$signature=$_GET["signature"];
$timestamp=$_GET["timestamp"];
$nonce=$_GET["nonce"];
$token=TOKEN;
$tmpArr=array($token,$timestamp,$nonce);
sort($tmpArr);
$tmpStr=implode($tmpArr);
$tmpStr=sha1($tmpStr);
if($tmpStr==$signature){
returntrue;
}else{
returnfalse;
}
}
}
?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。