你所在的位置:微信群>互联网推广>正文

微信公众平台常用接口-接收用户普通消息

原创
发布时间: 2023-07-11 10:57:42 热度: 227 作者: 李斯特 来源: 微信加 本文共 6246 字 阅读需要 21 分钟
微信公众账号接收用户发送的常用的消息类型有文本(包括表情)、图片、语音、地理位置等。下面分别进行介绍。

微信公众账号接收用户发送的常用的消息类型有文本(包括表情)、图片、语音、地理位置等。下面分别进行介绍。

文本消息

用户向微信公众账号发送文本消息的示例如图 4-1 所示。

图 4-1 用户发送文本消息

用户发送文本消息时,微信公众账号接收到的 XML 数据格式如下所示:

 <![CDATA[gh_680bdefc8c5d]]>  <![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]>  1359028446  <![CDATA[text]]>  <![CDATA[微信公众平台开发教程]]>  5836982729904121631

用户发送的文本消息的参数及描述如表 4-1 所示。

表 4-1 文本消息的参数及描述

图片消息

用户向微信公众账号发送图片消息的示例如图 4-2 所示。

图 4-2 用户发送图片消息

用户发送图片消息时,微信公众账号接收到的 XML 数据格式如下所示:

1359028479 5836982871638042400

用户发送图片消息的参数及描述如表 4-2 所示。

表 4-2 图片消息的参数及描述

语音消息

用户向微信公众账号发送语音消息的示例如图 4-3 所示。

图 4-3 用户发送语音消息

用户发送语音消息时,微信公众账号接收到的 XML 数据格式如下所示:

1359028025 5836980921722890003

用户发送的语音消息的参数及描述如表 4-3 所示。

表 4-3 语音消息的参数及描述

地理位置消息

用户向微信公众账号发送地理位置消息的示例如图 4-4 所示。

图 4-4 用户发送地理位置消息

用户发送地理位置消息时,微信公众账号接收到的 XML 数据格式如下所示:

<![CDATA[gh_680bdefc8c5d]]> <![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]> 1359036619 <![CDATA[location]]> 22.539968 113.954980 16 5837017832671832047

用户发送的地理位置消息的参数及描述如表 4-4 所示。

表 4-4 地理位置消息的参数及描述

接收消息代码实现

本节将上面的各种消息类型用代码实现并且做出相应的回复处理。代码如下所示:

<?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;                    case 「location」://位置消息                          $result = $this->receiveLocation($postObj);                          break;                    case 「link」:    //链接消息                         $result = $this->receiveLink($postObj);                         break;                    default:                         $result = 「unknow msg type: 」.$RX_TYPE;                         break;              }              echo $result;        }else {              echo 「」;              exit;        }    }    /*     * 接收文本消息     */    private function receiveText($object)    {         $content = 「你发送的是文本,内容为:」.$object->Content;         $result = $this->transmitText($object, $content);         return $result;     }     /*      * 接收图片消息      */    private function receiveImage($object)    {         $content = 「你发送的是图片,地址为:」.$object->PicUrl;         $result = $this->transmitText($object, $content);         return $result;     }     /*      * 接收语音消息      */    private function receiveVoice($object)    {        $content = 「你发送的是语音,媒体 ID 为:」.$object->MediaId;        $result = $this->transmitText($object, $content);        return $result;    }    /*     * 接收视频消息     */    private function receiveVideo($object)    {         $content = 「你发送的是视频,媒体 ID 为:」.$object->MediaId;         $result = $this->transmitText($object, $content);         return $result;    }    /*     * 接收位置消息     */    private function receiveLocation($object)    {         $content = 「你发送的是位置,纬度为:」.$object->Location_X.「;经度为: 」.$object->Location_Y.「;缩放级别为:」.$object->Scale.「;位置为:」.$object->Label;         $result = $this->transmitText($object, $content);         return $result;    }    /*     * 接收链接消息     */    private function receiveLink($object)    {         $content = 「你发送的是链接,标题为:」.$object->Title.「;内容为: 」.$object->Description.「;链接地址为:」.$object->Url;         $result = $this->transmitText($object, $content);         return $result;    }    /*     * 回复文本消息     */    private function transmitText($object, $content)    {         $textTpl = 「 <![CDATA[%s]]> <![CDATA[%s]]> %s <![CDATA[text]]> <![CDATA[%s]]> 」;         $result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time(), $content);         return $result;    } } ?>

在 responseMsg()方法中,先提取消息类型 $postObj->MsgType,从而实现各种消息类型的分离。在类 wechatCallbackapiTest 中,为每种消息类型定义了接收方法函数。在每个方法中,返回消息的主要特征值,组成文本信息作为内容回复。

版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/8919