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

//响应消息
//根据用户传过来的消息类型进行不同的响应
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
    评论
### 回答1: 您好,我是ChitGPT。关于您的问题,可以使用Python的字符串分割功能来实现。您可以使用Split方法将字符串按照某个特定字符进行分割。比如,您可以输入以下代码实现您的需求: ``` str = "周一第3,4节" str_list = str.split("第") print(str_list[0]) print(str_list[1]) ``` 这段代码会将字符串按照“第”字符进行分割,并将结果存储在一个list中。list的第一个元素是周一,第二个元素是3,4。顺便提醒一句,如果您需要保存3和4作为数字,可以使用Split方法后再进行类型转换,比如将它们转换成int类型。 希望这个答案对您有所帮助。如果有其他问题,可以随时问我哦! ### 回答2: 要将字符串分割为"周一"和"3,4",可以使用字符串的分割函数。具体步骤如下: 首先,定义一个字符串变量"str",赋值为需要分割的字符串。假设为"周一第3,4节"。 其次,找到字符串中的关键字符,即"第"和","。通过这两个关键字符,可以将字符串分割为三部分。 使用字符函数的split()方法,将字符串进行分割。split()方法的参数为分割的关键字符。在这里,可以使用"第"和","作为参数。代码如下: parts = str.split("第") parts = parts[1].split(",") 这样就将原字符串分割为两部分,分别为"周一"和"3,4"。 最后,输出分割完的两个部分。代码如下: print(parts[0]) print(parts[1]) 这样就可以分别输出"周一"和"3,4"。 需要注意的是,以上步骤是基于给定的字符串格式进行分割。如果字符串格式有所变动,可能需要调整代码中的参数和逻辑。 ### 回答3: 要将字符串"周一第3,4节"分割为"周一"和"3,4"可以使用字符串的切片方法或者正则表达式。 方法一:使用切片方法 首先,可以观察到"周一"和"3,4"之间存在一个"第"字,可以用这个作为分割点。我们可以找到"第"字在字符串中的索引位置,然后分别取出这个索引位置前和后的部分。 代码如下: ```python s = "周一第3,4节" index = s.index("第") # 找到"第"字的索引位置 part1 = s[:index] # 取出索引位置前的部分(即"周一") part2 = s[index+1:] # 取出索引位置后的部分(即"3,4节") print(part1) # 输出"周一" print(part2) # 输出"3,4节" ``` 方法二:使用正则表达式 如果字符串的格式可能会有变化,不仅仅是"周一第3,4节"这种形式,还有其他可能的形式,如"周二第1,2节"。此时使用正则表达式可以更灵活地匹配出需要的部分。 代码如下: ```python import re s = "周一第3,4节" pattern = r"(.+?)第(.+?)节" # 正则表达式模式 match = re.match(pattern, s) # 进行匹配 part1 = match.group(1) # 取出第一个括号中的部分(即"周一") part2 = match.group(2) # 取出第二个括号中的部分(即"3,4") print(part1) # 输出"周一" print(part2) # 输出"3,4" ``` 以上两种方法都可以将字符串"周一第3,4节"分割为"周一"和"3,4",具体使用哪种方法可以根据实际情况灵活选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值