1. 云栖社区>
  2. PHP教程>
  3. 正文

微信开发-回复消息

作者:用户 来源:互联网 时间:2017-12-01 10:43:00

开发消息回复

微信开发-回复消息 - 摘要: 本文讲的是微信开发-回复消息, 前面写到我们怎样获取微信发送过来的xml数据包,获得用户发送的消息以及各种操作行为。那么我们应该怎样回复用户呢。 回复主要分为六种 ①回复文本消息 XML结构是这样的,回复文字的时候如果保存的文本消息中有实体标签记得要用htmlspec

前面写到我们怎样获取微信发送过来的xml数据包,获得用户发送的消息以及各种操作行为。那么我们应该怎样回复用户呢。

回复主要分为六种

①回复文本消息

微信<a href=开发-回复消息">

XML结构是这样的,回复文字的时候如果保存的文本消息中有实体标签记得要用htmlspecialchars_decode转化一下。

public function makeText($text='')     {         $CreateTime = time();         $textTpl = "<xml>         <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>         <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>         <CreateTime>{$CreateTime}</CreateTime>         <MsgType><![CDATA[text]]></MsgType>         <Content><![CDATA[%s]]></Content>         </xml>";         return sprintf($textTpl,$text);     }

微信开发-回复消息

 

②回复图片信息

微信开发-回复消息

这是回复图片的XML结构,回复图片的media_id需要通过接口上传素材才能获得。

public function makePic($MediaId='')     {         $CreateTime = time();         $textTpl = "<xml>         <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>         <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>         <CreateTime>{$CreateTime}</CreateTime>         <MsgType><![CDATA[image]]></MsgType>        <Image>        <MediaId><![CDATA[%s]]></MediaId>        </Image>        </xml>";         return sprintf($textTpl,$MediaId);     }

微信开发-回复消息

 

③回复语音

微信开发-回复消息

回复语音的XML结构基本与图片类似,media_id也是通过接口上传素材获得的。

public function makeVoice($MediaId=""){        $CreateTime= time();        $textTpl = "        <xml>        <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>        <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>        <CreateTime>{$CreateTime}</CreateTime>        <MsgType><![CDATA[voice]]></MsgType>        <Voice>        <MediaId><![CDATA[%s]]></MediaId>        </Voice>        </xml>        ";        return sprintf($textTpl,$MediaId);    }

 微信开发-回复消息

④回复视频消息

微信开发-回复消息

回复视频的XML结构,其中标题和描述并非是必须的,可以选择不写。

public function makeVideo($mediaId="",$title="",$desc=""){        $createtime=time();        $textTpl="            <xml>            <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>            <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>            <CreateTime>{$createtime}</CreateTime>            <MsgType><![CDATA[video]]></MsgType>            <Video>            <MediaId><![CDATA[%s]]></MediaId>            <Title><![CDATA[%s]]></Title>            <Description><![CDATA[%s]]></Description>            </Video>             </xml>        ";        return sprintf($textTpl,$mediaId,$title,$desc);    }

微信开发-回复消息

如箭头所示,如果加了标题和描述就会显示在这里。如果有实体标签,也要转义一下,否则就直接输出实体标签了。

⑤回复音乐消息

微信开发-回复消息

回复音乐的XML结构稍微有点多,但是很多不是必须的,如果填写了带实体标签的字符串,一定要转化一下。

public function makeMusic($mediaId="",$title="",$desc="",$url="",$hqurl=""){        $createtime=time();        $textTpl="            <xml>            <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>            <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>            <CreateTime>{$createtime}</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>        ";        return sprintf($textTpl,$title,$desc,$url,$hqurl,$mediaId);    }

微信开发-回复消息

回复音乐中其他的注释都很清楚,但是这个缩略图media_id描述的不是很清楚,作者使用了上传缩略图接口上传了图片,也写在了里面,但是貌似没什么用。如果有知道的童鞋们,还望告知下。

 

⑥回复图文消息

微信开发-回复消息

回复图文在回复中的XML是最复杂的,也最容易出错。在Articles中的这段是最重要的,其中所有的字符串最好都转化一下,以防万一。

 

public function makeNews($newsData=array())     {         $CreateTime = time();         $newTplHeader = "<xml>         <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>         <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>         <CreateTime>{$CreateTime}</CreateTime>         <MsgType><![CDATA[news]]></MsgType>         <ArticleCount>%s</ArticleCount><Articles>";         $newTplItem = "<item>         <Title><![CDATA[%s]]></Title>         <Description><![CDATA[%s]]></Description>         <PicUrl><![CDATA[%s]]></PicUrl>         <Url><![CDATA[%s]]></Url>         </item>";         $newTplFoot = "</Articles>        </xml>";         $Content = '';         $itemsCount = count($newsData['items']);        $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条         if ($itemsCount) {             foreach ($newsData['items'] as $key => $item) {                 if ($key<=9) {                     $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);                 }             }         }         $header = sprintf($newTplHeader,$itemsCount);         $footer = sprintf($newTplFoot);         return $header . $Content . $footer;     } 

微信开发-回复消息

这个方法适合于回复所有类型的图文,只要传入一个数组就会拼接成要回复的图文模式,这个里面的字符串也是需要对实体标签解码的

 

总之,无论微信返回什么,代码里的一点点小错误就会导致“该公众号暂时无法提供服务,请稍后再试”,而你根本不知道你做错了什么。所以写这个的时候要严谨,尽量避免小错误,可以节省大量的时间。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索开发 , 消息 回复 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备