Una

接下来的日子,陆续把未总结的问题补充起来......

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、前言

   学习微信公众号开发错误姿势——文档从头到尾先看一遍,正确姿势——直接进入开始开发,demo撸起来。

   

 

二、消息回复

    + 在粉丝给公众号发消息的过程中,微信服务器会将post消息的xml数据包到开发者填写的服务器URL上, 可以通过查看微信开发文档中的消息管理中的接受消息部分,来了解粉丝发送的不同的消息类型对应的不同的xml数据格式。

    知道微信服务器发送的xml格式是什么样的,我们就知道发送过来的xml包含了哪些数据。在给粉丝回复消息之前就可以先判断再做相应的回复。

 

 + 粉丝收到公众号的回复这个过程,服务器返回给微信服务器的同样也是一个xml数据,查看发送消息-被动回复消息部分就可以查看到具体的不同类型消息对应的不同的xml数据

 

消息回复代码(回复消息类型:文本、图片、图文、音乐):

 //3.依据接口文档实现业务逻辑
    public function responseMsg()
    {
        //获取微信推送过来的post数据(xml数据)
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (!empty($postStr)){
            //simplexml_load_string() 函数把XML字符串载入对象中。
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $picUrl = $postObj->PicUrl;
            $msgId = $postObj->MsgId;
            $mediaId = $postObj->MediaId;
            $event = strtolower($postObj->MsgType);
            $msgType = "text";
            $msgType2 = "image"; 
            $msgType3 = "music";
            $msgType4 = "news";
            $time = time();
            //返回给用户文本类型数据
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <Event><![CDATA[subscribe]]></Event>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            //返回给用户图片类型数据
            $textTp2 = "<xml>                     
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Image>
                        <MediaId><![CDATA[%s]]></MediaId>
                        </Image>
                        </xml> ";
            
             //给用户发送音乐
            $arrMusic = array(
                array(
                    'title'=>'约定',
                    'description'=>'陈奕迅',
                    'musicurl'=>'http://odnc53sha.bkt.clouddn.com/yueding.mp3',
                    'hqmusicurl'=>'http://odnc53sha.bkt.clouddn.com/yueding.mp3'
                ),
                array(
                    'title'=>'沙龙',
                    'description'=>'陈奕迅',
                    'musicurl'=>'http://odnc53sha.bkt.clouddn.com/shalong.mp3',
                    'hqmusicurl'=>'http://odnc53sha.bkt.clouddn.com/shalong.mp3'
                ),
            );
           
            $textTp3 ="<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Music>
                        <Title><![CDATA[%s]]></Title>
                        <Description><![CDATA[%s]]></Description>
                        <MusicUrl><![CDATA[%s]]></MusicUrl>
                        <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                        </Music>
                       <FuncFlag>0</FuncFlag>
                        </xml> ";
            
            
            //发送图文消息
            $arr = array(
                array(
                   'title'=>'13级精英班',
                    'description'=>'13级',
                    'picurl'=>'http://odnc53sha.bkt.clouddn.com/jy.jpg',
                    'url'=>'http://www.imooc.com',
                ),           
                
            );
           
            $textTp4 = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <ArticleCount>".count($arr)."</ArticleCount>
                        <Articles>";
            
            foreach($arr as $k=>$v) {
           
                           $textTp4 .= "<item>
                                <Title><![CDATA[".$v['title']."]]></Title>
                                <Description><![CDATA[".$v['description']."]]></Description>
                                <PicUrl><![CDATA[".$v['picurl']."]]></PicUrl>
                                <Url><![CDATA[".$v['url']."]]></Url>
                                </item>";
                      
             }
            
             $textTp4 .= " </Articles>   
                           </xml>";
            
            
            $arr2 = array(
                array(
                   'title'=>'2016年3月新闻发布系统项目答辩',
                    'description'=>'2015年寒假新闻发布系统项目答辩',
                    'picurl'=>'',
                    'url'=>'http://www.imooc.com',
                ),
                array(
                   'title'=>'13级精英班2016年1月第一次聚餐',
                    'description'=>'',
                    'picurl'=>'',
                    'url'=>'http://www.imooc.com',
                ),
                  array(
                   'title'=>'2016年3月第一批同学出校实习第二次聚餐',
                    'description'=>'',
                    'picurl'=>'',
                    'url'=>'http://www.imooc.com',
                ),
                 
                
                
            );
           
            $textTp5 .= "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <ArticleCount>".count($arr2)."</ArticleCount>
                        <Articles>";
            
            foreach($arr2 as $k=>$v) {
           
                           $textTp5 .= "<item>
                                <Title><![CDATA[".$v['title']."]]></Title>
                                <Description><![CDATA[".$v['description']."]]></Description>
                                <PicUrl><![CDATA[".$v['picurl']."]]></PicUrl>
                                <Url><![CDATA[".$v['url']."]]></Url>
                                </item>";
                      
             }
             $textTp5 .= " </Articles>   
                           </xml>";
            
            
            //事件推送,粉丝关注时推送的消息 sprintf函数是用来制定模板类型,即指定按照哪个xml格式来传数据
            if($event == "event") {
                 $contentStr = "欢迎关注";    
                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                 echo $resultStr;
            }
            //粉丝发送的文本信息      
            if($event == "text") {
                 if($keyword == "约定"|| $keyword == "沙龙")
                 {
                     foreach($arrMusic as $k=>$v) {
                         if($v['title'] == $keyword) {
                             //    $resultStr2 = sprintf($textTp3, $fromUsername, $toUsername, $time, $msgType3);
                             $resultStr2 = sprintf($textTp3, $fromUsername, $toUsername, $time, $msgType3, $v['title'], $v['description'], $v['musicurl'], $v['hqmusicurl']);
                            echo $resultStr2; 
                             break;
                         }
                     }
                  
                 } 
                 if($keyword == "精英班")
                 {     
                     $this->responseTuWen($textTp4, $fromUsername, $toUsername, $time, $msgType4, $keyword); 
                  
                 } 
                if($keyword == "精英班日常") 
                {
                    $this->responseTuWen($textTp5, $fromUsername, $toUsername, $time, $msgType4, $keyword); 
                  
                }
                
                else 
                {
                $this->responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr, $keyword);
                }
            }      
              //发送和粉丝一样的图片
             else if($event == "image") {
                 $this->responseImage($textTp2, $fromUsername, $toUsername, $time, $msgType2, $mediaId);
                 
             }  
        }else{
            echo "";
            exit;
        }
    }
    
    //给粉丝发送文本信息
    public function responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr,$keyword) {
         
        switch($keyword) {
            case '三围' :
            $contentStr ="我木有三围,你有吗?";
            break;
            
            case '帅哥' :
            $contentStr ="我是萌妹子,好伐";
            break;
            
            case '多高':
            $contentStr = "比你高~";
            break;
            
            case '女神':
            $contentStr = "你也长的很好看啊~";
            break;
            
            case 'i love you':
            $contentStr = "I love you too 么么~";
            break;
            
            case '这是什么':
            $contentStr = "这是我的个人公众号啊~和其他公众号类似";
            break;
            
            case '?' :
            $contentStr = '送你一串时间:'.date("Y-m-d H:i:s",time());  
            break;
            
            default :
            $contentStr = $keyword;
            break;
            
        }
        
             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
             echo $resultStr;
           
    }
    
    //给粉丝发送图片信息
    public function responseImage($textTp2, $fromUsername, $toUsername, $time, $msgType2, $mediaId) {
         $resultStr2 = sprintf($textTp2, $fromUsername, $toUsername, $time, $msgType2, $mediaId);
         echo $resultStr2;
    }
    
    //给粉丝发送图文消息
    public function responseTuWen($textTp4, $fromUsername, $toUsername, $time, $msgType4, $keyword) {
       
         $resultStr2 = sprintf($textTp4, $fromUsername, $toUsername, $time, $msgType4, $keyword);
         echo $resultStr2;
    }
    

 

代码未优化,只供参考。

posted on 2016-09-21 15:12  youyi2016  阅读(679)  评论(0编辑  收藏  举报