微信公众号开发之接收普通消息

本文详细介绍了微信如何接收用户发送的各类消息,并提供了文本消息处理的PHP代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章要讲的是微信中的接收普通消息;

接收普通消息:顾名思义,它的作用就是接收普通用户发送的消息,并根据接收消息类型的不同,分为了六大接收接口;

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 1 文本消息  
  2. 2 图片消息  
  3. 3 语音消息  
  4. 4 视频消息  
  5. 5 小视频消息  
  6. 6 地理位置消息  
  7. 7 链接消息     
  8. 视频和小视频同属一类;  

它们都是通过接收xml文档接收,根据分析xml文档后根据类型判断并回复相应消息;

一:文本消息;

文本消息是我们在开发中使用特别多的类型,用户发送的文字都可以归入此类;

下面的代码就是文本消息的基本语法;

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.  <xml>  
  2.  <ToUserName><![CDATA[toUser]]></ToUserName>  
  3.  <FromUserName><![CDATA[fromUser]]></FromUserName>   
  4.  <CreateTime>1348831860</CreateTime>  
  5.  <MsgType><![CDATA[text]]></MsgType>  
  6.  <Content><![CDATA[this is a test]]></Content>  
  7.  <MsgId>1234567890123456</MsgId>  
  8.  </xml>  
  9.   
  10. 参数           描述  
  11. ToUserName  开发者微信号  
  12. FromUserName    发送方帐号(一个OpenID)  
  13. CreateTime  消息创建时间 (整型)(时间戳)  
  14. MsgType     text  
  15. Content     文本消息内容  
  16. MsgId           消息id,64位整型   

如果用户发送过来的xml数据中,MsgType接点为text,就代表用户发送的就是文本消息;

在实际开发中我们该如何来识别用户发送的消息,并编写代码?;下面来打开我们之前讲过的开发工具;并打开demo接口文档

我们知道,其实这个接口文档中最重要的的就是自动回复功能

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?php  
  2. /**  
  3.   * wechat php test  
  4.   */  
  5.   
  6. //define your token  
  7. define("TOKEN", "weixin444");  
  8. $wechatObj = new wechatCallbackapiTest();  
  9. $wechatObj->valid();  
  10.   
  11. class wechatCallbackapiTest  
  12. {  
  13.     public function valid()  
  14.     {  
  15.         $echoStr = $_GET["echostr"];  
  16.   
  17.         //valid signature , option  
  18.         if($this->checkSignature()){  
  19.             echo $echoStr;  
  20.             $this->responseMsg();  
  21.             exit;  
  22.         }  
  23.     }  
  24.   
  25.     public function responseMsg()  
  26.     {  
  27.         <span style="color:#FF0000;">//get post data, May be due to the different environments  
  28.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  29.   
  30.         //extract post data  
  31.         if (!empty($postStr)){  
  32.                 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,  
  33.                    the best way is to check the validity of xml by yourself */  
  34.                 libxml_disable_entity_loader(true);  
  35.                 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
  36.                 $fromUsername = $postObj->FromUserName;  
  37.                 $toUsername = $postObj->ToUserName;  
  38.                 $keyword = trim($postObj->Content);  
  39.                 $time = time();</span>//以上为接收用户的消息;可以看到,并没有接收用户消息类型,也就是MsgType;  

①接收用户消息类型


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. $msgType=$postObj->MsgType;//注意大小写;  
  2.   
  3.   
  4.  $textTpl = "<xml>  
  5.                             <ToUserName><![CDATA[%s]]></ToUserName>  
  6.                             <FromUserName><![CDATA[%s]]></FromUserName>  
  7.                             <CreateTime>%s</CreateTime>  
  8.                             <MsgType><![CDATA[%s]]></MsgType>  
  9.                             <Content><![CDATA[%s]]></Content>  
  10.                             <FuncFlag>0</FuncFlag>  
  11.                             </xml>";               
  12.             <h4>②对相关数据进行判断,这里是MsgType</h4>  <pre name="code" class="html">if ($msgType=='text'){  
  13.                 $contentStr = "您发送的是文本类型";  
  14.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType,$contentStr);  
  15.                 echo $resultStr;  
  16.             }else if(!empty( $keyword ))  
{ if($keyword=="img"){ $imgTpl ="<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Image> <MediaId><![CDATA[%s]]></MediaId> </Image> </xml>"; $msgType = "image"; $mediaId='qS7GKu_Mhkpt0y7-BEcTR_B2FrpuBZXFTZqCcszOOll9z8PWmBSaoYo7VpVBQlmc'; $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, $msgType, $mediaId); echo $resultStr; }else{ $msgType = "text"; $contentStr = "阁下何不乘风起,随风直上九万里"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } }else{ echo "Input something..."; } }else { echo ""; exit; } }private function checkSignature(){ // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );return true;if( $tmpStr == $signature ){return true;}else{return false;}}}?>

 



这样文本接口就算测试成功了;其他几个接口类型用法一样,在这里就不多做解释了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值