走进微信公众号实现关注之后推送一条服务器自定义的消息给用户


下面是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
                
                
                */
            }
        }

    }
 
}

1、token是必须的,如果对服务器信息不熟的可以看往期的文章

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 给微信的服务器, 通过微信的服务器再传递给用户。


你可能感兴趣的:(php,thinkphp)