下面是tp3.2实现的代码:
reponseMsg();
}
}
public function reponseMsg(){
//1.获取到微信推送过来post数据(xml格式)
$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
//2.处理消息类型,并设置回复类型和内容
/*
123456789
*/
$postObj = simplexml_load_string( $postArr );
//$postObj->ToUserName = '';
//$postObj->FromUserName = '';
//$postObj->CreateTime = '';
//$postObj->MsgType = '';
//$postObj->Event = '';
// gh_e79a177814ed
//判断该数据包是否是订阅的事件推送
if( strtolower( $postObj->MsgType) == 'event'){
//如果是关注 subscribe 事件
if( strtolower($postObj->Event == 'subscribe') ){
//回复用户消息(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
$content = '欢迎关注我们的微信公众账号'.'公众账号:::::'.$postObj->FromUserName.'用户id:::::'.$postObj->ToUserName;
$template = "
%s
";
$info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
echo $info;
/*
12345678
*/
}
}
}
}
2、进行了token验证之后系统跳转到reponseMsg(),这个方法中
3、因为微信是通过xml数据传输的,所以我们要把信息转化为对象之后才能对其操作,一般我们php 是用$_POST接收传递过来的数据的, 但是xml 不能通过这个方法实现, 用的是
$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
这个方法得到微信传递过来的值,传过来的是一个xml 的格式, 所以世界上最好的语言php 能把直接转化为对象, 为我们所用。
$postObj = simplexml_load_string( $postArr );
这样就能把xml 的格式转化为对象, 直接可以调用数据,比如 $postObj->FromUserName 就直接调用到了是哪一个用户触发的这个事件。
if( strtolower( $postObj->MsgType) == 'event'){
php中的strtolower()的函数是转化为小写的功能。
如果这个消息是事件(event) ,然后再判断, 这个具体是什么事件, 事件包括很多事件:比如 关注事件, 取消关注事件, 还有消息推送事件,等等。
if( strtolower($postObj->Event == 'subscribe') ){
如果是关注(subscribe)事件,那么就按照这个程序走下去, 一般我们可以做:判断该用户以前有没有关注过我们, 如果没有关注我们我们可以把数据存储到数据库, 如果更细心一点的可以为该用户生成一个二维码之类的扩展运用。
**因为微信是通过xml 的方式去传递消息过来的, 所以我们也应该传递消息过去也是通过xml 的格式传递过去。传递过去我们当然是要知道传递给谁吧,所以我们通过
postObj->得到你想要的。
这边新学习一个新东西, 以前在开发路由器OpenWrt 的时候有接触:模板
先定义一个模板:
$template = "
%s
";
通过php 的函数分别把刚刚得到postObj的值代进去。
$info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
最后再echo $info 给微信的服务器, 通过微信的服务器再传递给用户。