1、采用下面的代码来获取微信发送的xml字符串
$postArr = file_get_contents("php://input");
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
2、写模板的时候不要加任何空格,如下:
$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
全部代码
/*接受事件推送并回复*/
public function responseMsg()
{
//1. 当有用户关注我们的公众号时,微信会发送过来一个xml形式的数据,我们来获取
// 2.处理消息类型,并设置回复类型和内容
$postArr = file_get_contents("php://input");
libxml_disable_entity_loader(true);
// 将良好的xml字符串转换为SimpleXMLElement对象,转化之后的类型如下图(键值对)
$postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
// 判断该数据包是否是订阅的时间推送
if(strtolower($postObj->MsgType) == 'event'){
// 如果是关注subscribe事件
if(strtolower($postObj->Event) == 'subscribe'){
// 回复用户信息
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$Msgtype = 'text';
$Content = '相信自己,你的选择是对的。哈哈哈~~~';
$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
$info = sprintf($template,$toUser,$fromUser,$time,$Msgtype,$Content);//后面的值将会按顺序填到$template里面的%s
echo $info;
}
}
}