‘公众号’ 被动回复 “用户” 发送的六种类型的消息

其中图文可分为‘单图文’和‘多图文’
  1. 回复文本消息
  2. 回复图片消息
  3. 回复语音消息
  4. 回复视频消息
  5. 回复音乐消息
  6. 回复图文消息

请注意:

  • 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。
  • 严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。
  • 微信服务器在将用户的消息发给公众号服务器后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
  • 关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

  • 开发者在5秒内未回复任何内容
  • 开发者回复了异常数据,比如JSON数据等
  • 另外,请注意,回复图片(不支持gif动图)等多媒体消息时需要预先通过素材管理接口上传临时素材到微信服务器,
    • 可以使用素材管理中的临时素材,
    • 也可以使用永久素材

一、回复文本消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[text] ]></MsgType><Content>< ![CDATA[你好] ]></Content>
</xml>

二、回复图片消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[image] ]></MsgType><Image><MediaId>< ![CDATA[media_id] ]></MediaId></Image>
</xml>

三、回复语音消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[voice] ]></MsgType><Voice><MediaId>< ![CDATA[media_id] ]></MediaId></Voice>
</xml>

四、回复视频消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[video] ]></MsgType><Video><MediaId>< ![CDATA[media_id] ]></MediaId><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description></Video>
</xml>

五、回复音乐消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[music] ]></MsgType><Music><Title>< ![CDATA[TITLE] ]></Title><Description>< ![CDATA[DESCRIPTION] ]></Description><MusicUrl>< ![CDATA[MUSIC_Url] ]></MusicUrl><HQMusicUrl>< ![CDATA[HQ_MUSIC_Url] ]></HQMusicUrl><ThumbMediaId>< ![CDATA[media_id] ]></ThumbMediaId></Music>
</xml>

六、回复图文消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title>< ![CDATA[title1] ]></Title><Description>< ![CDATA[description1] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item><item><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item></Articles>
</xml>

实例图片

实例代码如下

<?php
//
// 响应用户消息
// 微信公众账号响应给用户的不同消息类型
//define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {$wechatObj->responseMsg();
}else{$wechatObj->valid();
}class wechatCallbackapiTest
{public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if($tmpStr == $signature){return true;}else{return false;}}public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$RX_TYPE = trim($postObj->MsgType);//用户发送的消息类型判断switch ($RX_TYPE){case "text": //回复文本消息$result = $this->receiveText($postObj);break;case "image": //回复单图文、多图文消息$result = $this->receiveImage($postObj);break;case "voice": //回复音乐消息$result = $this->receiveVoice($postObj);break;case "video":$result = $this->receiveVideo($postObj);break;default:$result = "unknow msg type: ".$RX_TYPE;break;}echo $result;}else {echo "";exit;}}private function receiveText($object){$keyword = trim($object->Content);if($keyword == "文本"){ //回复文本消息$content = "这是个文本消息";$result = $this->transmitText($object, $content);}else if($keyword == "图文" || $keyword == "单图文"){ //回复单图文消息$content = array();$content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://dq095.applinzi.com/1.jpg", "Url" =>"http://dq095.applinzi.com/1.jpg");$result = $this->transmitNews($object, $content);}else if($keyword == "多图文"){  //回复多图文消息$content = array();$content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/3.png", "Url" =>"http://dq095.applinzi.com/3.png");$content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/4.png", "Url" =>"http://dq095.applinzi.com/4.png");$content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/6.png", "Url" =>"http://dq095.applinzi.com/6.png");$result = $this->transmitNews($object, $content);}else if($keyword == "音乐"){ //回复音乐消息$content = array("Title"=>"欢乐颂", "Description"=>"贝多芬", "MusicUrl"=>"http://dq095.applinzi.com/欢乐颂.mp3","HQMusicUrl"=>"http://dq095.applinzi.com/欢乐颂.mp3");$result = $this->transmitMusic($object, $content);}return $result;}private function receiveImage($object) //回复图片消息 {$content = array("MediaId"=>$object->MediaId);$result = $this->transmitImage($object, $content);;return $result;}private function receiveVoice($object) //回复语音消息 {$content = array("MediaId"=>$object->MediaId);$result = $this->transmitVoice($object, $content);;return $result;}private function receiveVideo($object) //回复视频消息 {$content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>"");$result = $this->transmitVideo($object, $content);;return $result;}  /** 回复文本消息*/private function transmitText($object, $content){$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);return $result;}/** 回复图片消息*/private function transmitImage($object, $imageArray){$itemTpl = "<Image><MediaId><![CDATA[%s]]></MediaId>
</Image>";$item_str = sprintf($itemTpl, $imageArray['MediaId']);$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType>$item_str</xml>";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;}/** 回复语音消息*/private function transmitVoice($object, $voiceArray){$itemTpl = "<Voice><MediaId><![CDATA[%s]]></MediaId></Voice>";$item_str = sprintf($itemTpl, $voiceArray['MediaId']);$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[voice]]></MsgType>$item_str</xml>";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;}/** 回复视频消息*/private function transmitVideo($object, $videoArray){$itemTpl = "<Video><MediaId><![CDATA[%s]]></MediaId><ThumbMediaId><![CDATA[%s]]></ThumbMediaId><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description></Video>";$item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']);$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[video]]></MsgType>$item_str</xml>";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;}/** 回复图文消息*/private function transmitNews($object, $arr_item){if(!is_array($arr_item))return;$itemTpl = "    <item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>";$item_str = "";foreach ($arr_item as $item)$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);$newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>%s</ArticleCount><Articles>$item_str</Articles></xml>";$result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));return $result;}/** 回复音乐消息*/private function transmitMusic($object, $musicArray){$itemTpl = "<Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl></Music>";$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType>$item_str</xml>";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;}
}
?>

微信公众号最佳实践 ( 3.2) 被动回复用户消息相关推荐

  1. 微信公众号最佳实践 ( 10.2)回复QQ表情和Emoji表情

    回复QQ表情和Emoji表情 微信的的文字发送方有一个笑脸表情等表情符,单击该表情后,我们可以发送这些表情,这些表情包括QQ表情和Emoji表情(也叫符号表情) 如图示: 微信用户和微信公众号都能直接 ...

  2. 微信公众号最佳实践 ( 4.7)获取用户地理位置

    开通了上报地理位置接口的微信公众号,在用户关注并进入微信公众号回话时,会弹框让用户确认是否允许微信公众号使用其地理位置.弹框只在关注后出现一次,用户以后可以在微信公众号详情页面进行操作. 本章代码还需 ...

  3. 微信公众号最佳实践 ( 8.8)智能聊天机器人

    智能聊天机器人 小i机器人,是上海至臻网络科技有限公司开发的智能机器人产品,是全球用户量最大的中文聊天机器人.该机器人,能查询新闻.地图.餐饮.机票等各类生活资讯. iBotCloud iBotClo ...

  4. 微信公众号最佳实践 ( 4.3)语音识别

    4.3.1 接取识别结果 开通语音识别功能以后,用户每次发送语音给微信公众号,微信会在推送语音消息XML数据包中添加一个Recongnition字段,该字段为语音识别出的文本内容. 注:由于客户端缓存 ...

  5. 微信公众号最佳实践 ( 4.4)客服接口

    当用户和公众号产生特定动作的交互时(具体动作请见下方列表),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户 ...

  6. 微信公众号最佳实践 ( 9.1)会员卡

    会员卡 会员卡一般是指企业发行的用于识别顾客身份的卡片,普片用于服务行业,他是公司宣传的理想载体,能够吸引新顾客,留住老顾客,增强顾客忠诚度的作用,还能实现打折,积分等功能. 页面布局 准备素材,包括 ...

  7. 微信公众号最佳实践 ( 7.2)交通信息查询

    交通信息查询 交通信息是是属于公共信息,已经有很多大型网站提供了响应的查询和查看功能,但是这些信息的后台数据往往并不对外开放,一是因为获取成本高,二是怕添加一个新的竞争对手,但好在很多第三方网站提供了 ...

  8. 微信公众号最佳实践 ( 8.7)一站到底

    一站到底 <一站到底>是一个益智答题类节目.趣味十足,在挑战中挖掘个性. 实现方案 首先,我们需要有一个题库,用户答题的内容均从题库中获取. 该题库SQL语句如下: -- -- 表的结构 ...

  9. 微信公众号最佳实践 ( 7.6)苹果产品信息查询

    苹果产品信息查询 index.php <?php define("TOKEN", "weixin");$wechatObj = new wechatCal ...

最新文章

  1. Centos搭建FTP服务
  2. jsr-303 参数校验-学习(转)
  3. LeetCode MySQL 597. 好友申请 I :总体通过率
  4. java 判断请求为 ajax请求_Java后台判断ajax请求及处理过程详解
  5. spring核心包功能解析
  6. spark基础之spark sql运行原理和架构
  7. CSS学习笔记----选择器与字体(字系)
  8. Linux下的C程序如何调用系统命令,并获取系统的输出信息到C程序中
  9. 6、ES6的let和const
  10. node http创建正向代理_Node.JS实战20:用execFile执行外部程序
  11. 《人件》 精华版 为软件企业指明成功之路 为开发人员伸张权益
  12. STM8L051F3_0d_基础介绍
  13. 剩余方差matlab,用matlab的var函数求方差
  14. go chan 类型用法
  15. 最伟大IT人物10强出炉 乔布斯第一盖茨第三
  16. 微信公众平台开发实例 php,php微信公众平台开发类实例,php公众平台实例_PHP教程...
  17. Intellij IDEA优化配置(1)------Darcula主题的选择以及字体和颜色配置(基于Intellij IDEA 2019.1)
  18. 华为高管丁耘跑28公里后突发疾病去世:在公司工作26年
  19. 计算机病毒引起故障,计算机病毒引发故障有哪些
  20. MyBatis的基础查询

热门文章

  1. java.lang.Integer connot be cast to class java.lang.String
  2. HTML5的学习网站有哪些?
  3. [转载]快速记忆日语单词,一年考过1级!
  4. 第7批候选!高工智能汽车金球奖入围年度产品/方案公示
  5. Python修改论文的字体及其大小
  6. KaliLinux-OneForAll子域名扫描神器
  7. 微软10月20日反盗版行动的应对方法
  8. 云基础知识介绍及云组件部署
  9. 申报高新技术企业认定哪些地方需要注意?
  10. java里什么是三目表达式_浅谈Java三目运算