### responseMsg()
* * * * *
先把responseMsg()补充完整
~~~
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$this->logger("R ".$postStr);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
if (($postObj->MsgType == "event") && ($postObj->Event == "subscribe" || $postObj->Event == "unsubscribe" || $postObj->Event == "TEMPLATESENDJOBFINISH")){
//过滤关注和取消关注事件
}else{
//更新互动记录
Db::name('user')->where('openid',strval($postObj->FromUserName))->setField('heartbeat', time());
}
//消息类型分离
switch ($RX_TYPE)
{
case "event":
$result = $this->receiveEvent($postObj);
break;
case "text":
$result = $this->receiveText($postObj);
break;
case "image":
$result = $this->receiveImage($postObj);
break;
case "location":
$result = $this->receiveLocation($postObj);
break;
case "voice":
$result = $this->receiveVoice($postObj);
break;
case "video":
$result = $this->receiveVideo($postObj);
break;
case "link":
$result = $this->receiveLink($postObj);
break;
default:
$result = "unknown msg type: ".$RX_TYPE;
break;
}
$this->logger("T ".$result);
echo $result;
}else {
echo "";
exit;
}
}
~~~
### 测试文本消息
* * * * *
接收文本消息
~~~
private function receiveText($object)
{
$keyword = trim($object->Content);
$openid = strval($object->FromUserName);
if (strstr($keyword, "文本")){
$content = "这是个文本消息\n".$openid;
$this->logger("正确收到消息: ".$keyword);
}else{
$content = "你刚刚发的是:".$keyword;
}
$result = $this->transmitText($object, $content);
$this->logger("QQ ".$keyword);
return $result;
}
~~~
回复文本消息
~~~
private function transmitText($object, $content)
{
if (!isset($content) || empty($content)){
return "";
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
return $result;
}
~~~
日志记录
方便我们调错,加入了日志记录方法,直接生成在public下。
如果测试时遇到问题,不清楚怎么回事,加入logger方法可以清晰找出问题点。比如:
`$this->logger("当前执行内容 ".$postStr);`
~~~
private function logger($log_content)
{
if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
sae_set_display_errors(false);
sae_debug($log_content);
sae_set_display_errors(true);
}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.2"){ //LOCAL
$max_size = 1000000;
$log_filename = "log.xml";
if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);
}
}
~~~
测试,成功!程序正确接收到用户发送的内容,并回复指定关键词。对于自定义菜单的触发,也是同样逻辑。
由于,我们需要返回给用户推广海报,返回的便不是文本消息,而是我们生成之后的海报图片。
~~~
if (strstr($keyword, "文本")){
$content = "这是个文本消息\n".$openid;
//$this->logger("文本回复 ".$keyword);
}
~~~
- 序言
- 联系方式,可一对一咨询
- 准备
- 安装twothink
- 第一章 公众号推广海报(已完成17.10.10)
- 0 整体思路
- 1.1 公众号接口绑定
- 1.2 引入微信SDK
- 1.3 响应文本请求
- 1.4 响应菜单请求
- 1.5 获取用户的信息
- 1.6 生成参数二维码
- 1.7 扫描参数二维码
- 1.8 建立数据表
- 1.9 处理关注事件
- 1.10 完整海报
- 1.11 推送海报
- 第二章 企业网站搭建
- 第三章 Excel表格处理(已完成17.12.04)
- 1.1 导入phpExcel
- 1.2 读取表单上传的excel表格
- 1.3 导出内容到表格
- 第四章 简易商城
- 1.1 梳理逻辑
- 1.2 商品上传
- 第五章 基于公号的任务系统
- 0 把逻辑理清楚
- 1.1 后台新建分类
- 1.2 完善tdetail方法
- 1.3 完善share方法
- 1.4 任务列表
- 第六章 前端使用mdui
- 1 基础页面
- 第七章 前端使用element(未来更新)
- 第八章 使用QueryList采集目标页面