微信回复汇总
wx_sample.php
......
public function responseMsg(){
//get post data,May be due to the different environments
$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 */
//安全防御用的
//对于PHP,由于simplexml_load_string 函数的XML解析问题出现在libxml库上
libxml_disable_entity_loader(true);
//是PHP中一个解析XML的函数,参数SimpleXMLElement为新对象的类
//LIBXML_NOCDATA表示将CDATA设置为文本节点,CDATA标签中的文本XML不进行解析
//返回类 SimpleXMLElement 的一个对象,该对象的属性包含 XML 文档中的数据。如果失败,则返回 false。
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
//将微信用户端的用户名(OpenID)赋予变量$fromUsername
$fromUsername = $postObj->FromUserName;
//将你的微信公众号ID赋予变量$toUsername
$toUsername = $postObj->ToUserName;
//参数ToUserName,FromUserName,CreateTime,MsgType,Event,EventKey
$type = $postObj->MsgType;
//事件类型,subscribe订阅,unsubscribe取消订阅,CLICK自定义菜单点击事件
$customevent = $postObj->Event;
//纬度
$latitude = $postObj->Location_X;
//经度
$longitude = $postObj->Location_Y;
//将用户微信发来的文本内容去掉空格后赋予变量$keyword
$keyword = trim($postObj->Content);
//将系统时间赋予变量$time
$time = time();
//构建XML格式的文本赋予变量$textTpl
//注意::XML中的格式为微信内容固定格式
$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>";
//音乐回复
$musicTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Music>
<Title><![CDATA[梁祝]]></Title>
<Description><![CDATA[交响乐]]></Description>
<MusicUrl><![CDATA[http://weixin1234.duapp.com/1.mp3]]></MusicUrl>
<HQMusicUrl><![CDATA[http://weixin1234.duapp.com/1.mp3]]></HQMusicUrl>
</Music>
<FuncFlag>0</FuncFlag>
</xml>";//构建音乐消息
//图文回复
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[保险法司法解释二出台]]</Title>
<Description><![CDATA[对保险公司更加有利]]</Description>
<PicUrl><![CDATA[http://weixin1234.duapp.com/1.jpg]]></PicUrl>
<Url><![CDATA[http://www.chinacourt.org/article/detail/2013/06/id/1014893.shtml]]></Url>
</item>
<item>
<Title><![CDATA[保险法全文]]</Title>
<Description><![CDATA[对保险公司更加有利]]</Description>
<PicUrl><![CDATA[http://weixin1234.duapp.com/1.jpg]]></PicUrl>
<Url><![CDATA[http://www.chinacourt.org/article/detail/2013/06/id/1014893.shtml]]></Url>
</item>
<FuncFlag>0</FuncFlag>
</xml>";
switch ($type) {//参数类型
//事件类型,subscribe订阅,unsubscribe取消订阅,CLICK自定义菜单点击事件
case 'event':
if($customevent == "subscribe"){
$contentStr = "感谢您的关注\n回复1查看联系方式
\n回复2查看最新资讯\n回复3查看法律文书";
}
break;
//图片
case 'image':
$contentStr = "图片很棒!";
break;
//地理信息
case 'location':
$contentStr = "你的纬度是{$latitude},经度是".$longitude;
break;
//链接//Title,Description,Url
case 'link':
$contentStr = "一个链接";
break;
//文本
case 'text':
//关键字分类
switch ($keyword) {
case '1':
$contentStr = "联系方式";
break;
case '2':
$contentStr = "最新资讯";
break;
case '3':
$contentStr = "31离婚协议\n32租房合同\n33交通事故协议书";
break;
default:
$contentStr = "hi";
}
break;
//其余类型
default:
$contentStr = "此功能尚未开发";
}
//回复文本信息类型为text型,即文本
$msgType = "text";
//将XML格式中的变量分别赋值
// //sprintf()字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
// //将textTpl后面的参数信息写入这个xml字符串中
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
//回复音乐信息类型为music
$msgType = "music";
$resultStr = sprintf($musicTpl,$fromUsername,$toUsername,$time,$msgType);
//图文回复
$msgType = "news";
$resultStr = sprintf($newsTpl,$fromUsername,$toUsername,$time,$msgType);
//输出回复信息,即发送微信
echo $resultStr;
}else{//如果用户端发来的文本内容为空
echo "";
exit;
}
}
......