微信公众号开发实例详解

05 实例讲解微信公众号开发-消息处理框架

2016-12-31  本文已影响188人  yanndy

消息处理框架

微信公众号接口认证部分介绍了认证消息简单处理函数,在原来的基础上在wechatTest类中增加一个消息处理函数。

public function responseMsg()
{
//get post data, May be due to the different environments
if(!isset($GLOBALS['HTTP_RAW_POST_DATA']){
$GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents('php://input', 'r');
}
//extract post data
$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)) {
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ 
//libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
switch ($RX_TYPE) {
/* 处理文本消息 */
case "text":
$resultStr = $this->receiveText($postObj);
break;
/* 处理事件消息 */
case "event":
$resultStr = $this->receiveEvent($postObj);
break;
default: $resultStr = "";
break;
}
if ($resultStr != null)
{
echo $resultStr;
}
} else {
echo "";
exit();
}
}

简单处理文本消息的函数receiveText(),在收到的消息前面加上发送的消息回复给公众号。

private function receiveText($object) {
$funcFlag = 0;
$contentStr = "发送的消息是" . $object->Content;
$resultStr = $this->transmitText($object, $contentStr, $funcFlag);
return $resultStr;
}

消息处理后使用transmitText函数组装成接口规范要求的格式返回给微信公众号。

private function transmitText($object, $content, $funcFlag = 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, $funcFlag);
return $resultStr;
}

事件处理函数暂时留空,下一节再处理。

private function receiveEvent($object) {
pass;
}

修改valid函数内容。

public function valid(){
if(!isset($_GET["echostr"])){
$this->responseMsg();
}
//认证消息
else if ($this->checkSignature()) {
echo $_GET["echostr"];
exit;
} else {
$this->responseMsg();
}
}

增加这些代码后,公众号就能够响应公众号用户发送的文字消息了。

注意:如果修改后从手机上的微信测试公众号看不到效果,需要取消关注,然后再重新关注。
textmsg.jpeg
上一篇下一篇

猜你喜欢

热点阅读