zoukankan      html  css  js  c++  java
  • 微信公众号开发之消息发送

    一、前言

       学习微信公众号开发错误姿势——文档从头到尾先看一遍,正确姿势——直接进入开始开发,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;
        }
        

    代码未优化,只供参考。

  • 相关阅读:
    Git 常用命令大全-转载
    Powershell重命名文件夹
    C#使用qq邮箱发送邮件
    iOS开发-YUV颜色格式
    iOS开发小记(十一)
    iOS开发-AFNetworking
    iOS开发-NSURLSession
    iOS开发-类的加载load函数和initialize函数
    iOS开发-调试(debug)
    iOS开发-graphics
  • 原文地址:https://www.cnblogs.com/yy95/p/5892710.html
Copyright © 2011-2022 走看看