【干货】微信开发篇之被动回复消息!!!(二)

包含回复图文消息 关注欢迎语

语音识别 音乐回复文本回复

tonken验证之后可以把验证文件代码清空!
然后在里面进行开发 我这里是面向过程开发
这里说一些需要注意的点
$toUser = $postObj->FromUserName;
//模板中第一个参数touser
    $fromUser = $postObj->ToUserName;
//模板中第二个参数 formuser
    $time = time();
//模板中必备的时间戳
    $MessageType = strtolower($postObj->MsgType);
//这个是判断事件类型的
$keyword = trim($postObj->Content);
//这个是获取用户输入的文本消息
$info = sprintf($template, $toUser, $fromUser, $time,'news');

这里比较重要了 是将上面的信息封装进xml模板中
切记变量顺序必须按照xml模板中的顺序进行输出
<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[%s]]></MsgType>
    <Music>
     <Title><![CDATA[慕白小慕白]]></Title>
    <Description><![CDATA[戴先生是真的帅]]></Description>
     <MusicUrl><![CDATA[http://wx.php1314.cn/php/walls.mp3]]></MusicUrl>
    <HQMusicUrl><![CDATA[http://wx.php1314.cn/php/walls.mp3]]></HQMusicUrl>
    </Music>
 </xml>
xml模板中可以直接在里面写固定参数
也可以在外面定义 定义好直接在里面用 %s 代替
它会自动将你上面定义的模板参数加进去
下面是完整代码
<?php
responseMsg();
function responseMsg()
{
    //1.获取到微信推送过来post数据(xml格式)
    $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
    //2.处理消息类型,并设置回复类型和内容
    // $postObj = simplexml_load_string($postArr);
    $postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
    //判断该数据包是否是订阅de事件推送
    $template = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                </xml>";
    $toUser = $postObj->FromUserName;
    $fromUser = $postObj->ToUserName;
    $time = time();
    $MessageType = strtolower($postObj->MsgType);
    switch ($MessageType) {
        case 'event':
            $msgType   = 'text';
            $content   = "欢迎关注小慕白的公众号!!!\n                 您可以输入\n博客、音乐、头像\n或者对我发一句语音\n看看我能否识别出来呢!"; //第一次关注发送欢迎语
            echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
            break;
        case 'text':
            $msgType = 'text';
            $keyword = trim($postObj->Content);
            switch ($keyword) {
                case '博客':
                    $arr = array(
                        array(
                            'title' => '小慕白博客',
                            'description' => "PHP开发者的熬夜猝死行为",
                            'picUrl' => 'http://www.php1314.cn/wp-content/uploads/2019/08/IMG_0444-300x300.jpg',
                            'url' => 'http://www.php1314.cn/',
                        ),
                    );
                    $template = "<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) {
                        $template .= "<item>  
                            <Title><![CDATA[" . $v['title'] . "]]></Title>   
                            <Description><![CDATA[" . $v['description'] . "]]></Description>  
                            <PicUrl><![CDATA[" . $v['picUrl'] . "]]></PicUrl>  
                            <Url><![CDATA[" . $v['url'] . "]]></Url>  
                            </item>";
                    }
                    $template .= "</Articles>  
                        </xml> ";
                    $info = sprintf($template, $toUser, $fromUser, $time,'news');
                    echo $info;
                    $stream = fopen("log.txt", "a");
                    fwrite($stream, "\n" . $info);
                    break;
                case '音乐':
                    // $msgType = "music";
                    $musicTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Music>
                          <Title><![CDATA[慕白小慕白]]></Title>
                          <Description><![CDATA[戴先生是真的帅]]></Description>
                          <MusicUrl><![CDATA[http://wx.php1314.cn/php/walls.mp3]]></MusicUrl>
                          <HQMusicUrl><![CDATA[http://wx.php1314.cn/php/walls.mp3]]></HQMusicUrl>
                        </Music>
                      </xml>";
                    $resultStr = sprintf($musicTpl, $toUser, $fromUser, $time ,'music');
                    echo $resultStr;
                    $stream = fopen("log.txt", "a");
                    fwrite($stream, "\n" . $resultStr);
                    break;
                case '头像':
                        $picTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[news]]></MsgType>
                        <ArticleCount>1</ArticleCount>
                        <Articles>
                          <item>
                            <Title><![CDATA[男女头像网]]></Title>
                            <Description><![CDATA[小慕白的私房菜]]></Description>
                            <PicUrl><![CDATA[https://c-ssl.duitang.com/uploads/item/201906/24/20190624162715_oskxv.thumb.700_0.jpg]]></PicUrl>
                            <Url><![CDATA[http://www-beta1.duitang.com/category/?cat=avatar]]></Url>
                          </item>
                        </Articles>
                      </xml>";
                      $resultStr = sprintf($picTpl, $toUser, $fromUser, time());
                      echo $resultStr;
                    break;
                default:
                    $content   = "您可以输入\n博客、音乐、头像\n或者对我发一句语音\n看看我能否识别出来呢!";
                    echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
                    break;
            } //文本switch结束

        case 'voice':
            $keyword = trim($postObj->Recognition); //这里就是微信自带的语音识别返回的识别到的文本,然后格式化输出到公众号就ok了
            $format = $postObj->Format;
            $msgType = "text";
            $content = "你发送的是语音\n内容为:" . $keyword . '语音格式是' . $format;
            $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
            echo $info;
            break;
        default:
            # code...
            break;
    } //判断消息类型结束
}

为您推荐

评论已关闭