第二节 消息和事件的接受和回复

//响应消息
//根据用户传过来的消息类型进行不同的响应
public function responseMsg(){  
 //1、接收微信服务器POST过来的数据,XML数据包
    $postData = file_get_contents('php://input');
    if(!$postData)
    {
        echo  "error";
        exit();
    }

//2、解析XML数据包
    libxml_disable_entity_loader(true);
    $object = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);
        //获取消息类型
        $MsgType = $object->MsgType;
        switch ($MsgType) {
            case 'event':
                //接收事件推送
                $this->receiveEvent($object);   
                break;  
            case 'text':
                //接收文本消息
                echo $this->receiveText($object);
                break;
            case 'image':
                    //接收图片消息
                    echo $this->receiveImage($object);  
                break;
            case 'location':
                    //接收地理位置消息
                    echo $this->receiveLocation($object);  
                break;  
            case 'voice':
                //接收语音消息
                echo $this->receiveVoice($object);
                break; 
            case 'video':
                //接收视频消息
                echo $this->receiveVideo($object);
                break;
            case  'link':
                //接收链接消息
                echo $this->receiveLink($object);
                break;
            default:
                break;
        }
    }

    //接收事件推送
    private function receiveEvent($obj){
        switch ($obj->Event) {
            //关注事件
            case 'subscribe':
                //扫描带参数的二维码,用户未关注时,进行关注后的事件
                if(!empty($obj->EventKey)){
                    //做相关处理
                }
                $dataArray = array(
                                array(
                            "Title"=>"欢迎关注京东商城",
                                    "Description"=>"this is a test",
                                    "PicUrl"=>"http://1.zhangjinyu1228.applinzi.com/images/furit.jpg",
                                    "Url"=>"https://www.jd.com"
                                    ),
                                array(
                                    "Title"=>"京东超市",
                                    "Description"=>"this is a test",
                                    "PicUrl"=>"http://1.zhangjinyu1228.applinzi.com/images/1.jpg",
                                    "Url"=>"http://chaoshi.jd.com/"
                                    ),
                                array(
                                    "Title"=>"京东超市",
                                    "Description"=>"this is a test",
                                    "PicUrl"=>"http://1.zhangjinyu1228.applinzi.com/images/2.jpg",
                                    "Url"=>"http://chaoshi.jd.com/"
                                    ),
                                array(
                                    "Title"=>"京东超市",
                                    "Description"=>"this is a test",
                                    "PicUrl"=>"http://1.zhangjinyu1228.applinzi.com/images/3.jpg",
                                    "Url"=>"http://chaoshi.jd.com/"
                                    ),
                                array(
                                    "Title"=>"京东超市",
                                    "Description"=>"this is a test",
                                    "PicUrl"=>"http://1.zhangjinyu1228.applinzi.com/images/4.jpg",
                                    "Url"=>"http://chaoshi.jd.com/"
                                    ),
                                );

                echo $this->replyNews($obj,$dataArray);
                break;
            //取消关注事件
            case 'unsubscribe':
                break;
            //扫描带参数的二维码,用户已关注时,进行关注后的事件
            case 'SCAN':
                //做相关的处理
                break;
        }   
    }

    //接收文本消息
    private function receiveText($obj){
        //获取文本消息的内容
        $content = $obj->Content;
        //发送文本消息
        return $this->replyText($obj,$content);
    }
    //发送文本消息
    private function replyText($obj,$content){
        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    </xml>";
            //返回一个进行xml数据包

        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$content);
            return $resultStr;     
    }


    //接收图片消息
    private function receiveImage($obj)
    {
        //获取图片消息的内容
        $imageArr = array(
            "PicUrl"=>$obj->PicUrl,
            "MediaId"=>$obj->MediaId
            );
        //发送图片消息
        return $this->replyImage($obj,$imageArr);
    }
    //发送图片消息
    private function replyImage($obj,$imageArr){
        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[image]]></MsgType>
                    <Image>
                    <MediaId><![CDATA[%s]]></MediaId>
                    </Image>
                    </xml>";
            //返回一个进行xml数据包

        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$imageArr['MediaId']);
            return $resultStr;         
    }



    //接收地理位置消息
    private function receiveLocation($obj)
    {
        //获取地理位置消息的内容
        $locationArr = array(
                "Location_X"=>$obj->Location_X,
                "Location_Y"=>"地址位置经度:".$obj->Location_Y,
                "Label"=>$obj->Label
            );
        //回复文本消息
        return $this->replyText($obj,$locationArr['Location_Y']);  
    }



    //接收语言消息
    private function receiveVoice($obj){
        //获取语言消息内容
        $voiceArr = array(
                "MediaId"=>$obj->MediaId,
                "Format"=>$obj->Format
            );
        //回复语言消息
        return $this->replyVoice($obj,$voiceArr);
    }

    //回复语音消息
    private function replyVoice($obj,$voiceArr)
    {
        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[voice]]></MsgType>
                    <Voice>
                    <MediaId><![CDATA[%s]]></MediaId>
                    </Voice>
                    </xml>";
            //返回一个进行xml数据包

        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$voiceArr['MediaId']);
            return $resultStr;     
    }


    //接收视频消息
    private function receiveVideo($obj){
        //获取视频消息的内容
        $videoArr = array(
                "MediaId"=>$obj->MediaId 
            );
        //回复视频消息
        return $this->replyVideo($obj,$videoArr);           
    }


    //回复视频消息
    private function replyVideo($obj,$videoArr){
        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[video]]></MsgType>
                    <Video>
                    <MediaId><![CDATA[%s]]></MediaId>
                    </Video> 
                    </xml>";
            //返回一个进行xml数据包

        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$videoArr['MediaId']);
            return $resultStr;
    }


    //接收链接消息
    private function receiveLink($obj)
    {
        //接收链接消息的内容
        $linkArr = array(
                "Title"=>$obj->Title,
                "Description"=>$obj->Description,
                "Url"=>$obj->Url
            );
        //回复文本消息
        return $this->replyText($obj,"你发过来的链接地址是{$linkArr['Url']}");
    }

    //回复音乐消息
    private function  replyMusic($obj,$musicArr)
    {
        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[music]]></MsgType>
                    <Music>
                    <Title><![CDATA[%s]]></Title>
                    <Description><![CDATA[%s]]></Description>
                    <MusicUrl><![CDATA[%s]]></MusicUrl>
                    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                    <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
                    </Music>
                    </xml>";
            //返回一个进行xml数据包

        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$musicArr['Title'],$musicArr['Description'],$musicArr['MusicUrl'],$musicArr['HQMusicUrl'],$musicArr['ThumbMediaId']);
            return $resultStr;     
    }

    //回复图文消息
    private function replyNews($obj,$newsArr){
        $itemStr = "";
        if(is_array($newsArr))
        {
            foreach($newsArr as $item)
            {
                $itemXml ="<item>
                    <Title><![CDATA[%s]]></Title> 
                    <Description><![CDATA[%s]]></Description>
                    <PicUrl><![CDATA[%s]]></PicUrl>
                    <Url><![CDATA[%s]]></Url>
                    </item>";
                $itemStr .= sprintf($itemXml,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);
            }

        }

        $replyXml = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[news]]></MsgType>
                    <ArticleCount>%s</ArticleCount>
                    <Articles>
                        {$itemStr}
                    </Articles>
                    </xml> ";
            //返回一个进行xml数据包
        $resultStr = sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),count($newsArr));
            return $resultStr;         
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值