首页建站经验 PHP微信开发之微信消息自动回复下所遇到的坑

PHP微信开发之微信消息自动回复下所遇到的坑

这篇文章是小编给大家介绍的微信消息自动回复下所遇到的坑的相关内容,在日常项目开发中经常遇到,非常具有参考借鉴价值,感兴趣的小伙伴一起学习吧微信回复原理:当普通微信用户向…

这篇文章是小编给大家介绍的微信消息自动回复下所遇到的坑的相关内容,在日常项目开发中经常遇到,非常具有参考借鉴价值,感兴趣的小伙伴一起学习吧

微信回复原理:

当普通微信用户向公众账号发送消息时,微信服务器首先收到用户发送的消息;

然后将用户信息和消息打包成XML格式的数据包,再将这个XML数据包通过POST方法提交到开发者设置的URL上。

疑问一:为何使用$GLOBALS["HTTP_RAW_POST_DATA"]保存POST过来的数据,而非$_POST数组?

回答:

POST只能保存标准的数据类型,对于XML、SOAP或Application/Octet-steam之类的内容则无法解析。

而$GLOBALS["HTTP_RAW_POST_DATA"]和$_POST是一样的,如果POST过来的数据PHP能够识别,则可以用$GLOBALS["HTTP_RAW_POST_DATA"]来接收。

疑问二:simplexml_load_file()各参数和返回值是什么?

回答:

参数含义

string:需要处理的XML字符串。

class:用来指定新对象,通常设置为"SimpleXMLElement",生成一个简单XML元素的类。

options:指定附加的Libxml参数,通常设置为常量LIBXML_NOCDATA,表示把CDATA设置为文本节点。

ns:一般省略

is_prefix:一般省略

函数执行完成后返回SimpleXMLElement类的一个对象。

功能:公众号只接受文字消息,且做出相应的文字回复。

  1. "font-family:Courier New;font-size:14px;"><?php  
  2. define("TOKEN","weixin");  
  3. $weixinObj = new Wechat();  
  4. $weixinObj->valid();  
  5. class Wechat{  
  6. public function valid(){  
  7. $echoStr = $_GET['echostr'];  
  8. //如果是第一次接入  
  9. if($this->checkSignature() && $echoStr ){  
  10. echo $echoStr;  
  11. exit;  
  12. }else{  
  13. $this->responseMsg();  
  14. }  
  15. }  
  16. //校验方法  
  17. private function checkSignature(){  
  18. $signature = $_GET['signature'];  
  19. $timestamp = $_GET['timestamp'];  
  20. $nonce = $_GET['nonce'];  
  21. $token = TOKEN;  
  22. $tmpArr = array($token$timestamp$nonce);  
  23. sort($tmpArr);  
  24. $tmpStr = implode($tmpArr);  
  25. $tmpStr = sha1($tmpStr);  
  26. if($tmpStr == $signature){  
  27. return true;  
  28. }else{  
  29. return false;  
  30. }  
  31. }  
  32. /* 普通文本消息  
  33.   
  34.   
  35.   
  36. 1348831860  
  37.   
  38.   
  39.   
  40. */ 
  41. public function responseMsg(){  
  42. //获取微信服务器POST请求中的数据  
  43. $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  44. if( !emptyempty($postStr) ){  
  45. $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA);  
  46. $fromUser = $postObj->FromUserName;  
  47. $toUser = $postObj->ToUserName;  
  48. $keyword = trim($postObj->Content);  
  49. $time = time();  
  50. $template = "  
  51.   
  52.   
  53. %s  
  54.   
  55.   
  56. ";  
  57. ifstrtolower($postObj->MsgType)!='text' ){  
  58. $msgType = "text";  
  59. $content = "我只接受文本消息";  
  60. }else{  
  61. $msgType = "text";  
  62. if( !emptyempty($keyword) ){  
  63. $content = "您发送的消息是:".$postObj->Content;  
  64. }else{  
  65. $content = "请输入关键字";//消息为空  
  66. }  
  67. }  
  68. $info = sprintf($template$fromUser$toUser$time$msgType$content);  
  69. echo $info;  
  70. }else{  
  71. echo "";  
  72. exit;  
  73. }  
  74. }  
  75. } 

功能:公众号只接受图片消息,且做出相应的文字回复。

  1. "font-family:Courier New;font-size:14px;"><?php  
  2. define("TOKEN","weixin");  
  3. $weixinObj = new Wechat();  
  4. $weixinObj->valid();  
  5. class Wechat{  
  6. public function valid(){  
  7. $echoStr = $_GET['echostr'];  
  8. //如果是第一次接入  
  9. if($this->checkSignature() && $echoStr ){  
  10. echo $echoStr;  
  11. exit;  
  12. }else{  
  13. $this->responseMsg();  
  14. }  
  15. }  
  16. //校验方法  
  17. private function checkSignature(){  
  18. $signature = $_GET['signature'];  
  19. $timestamp = $_GET['timestamp'];  
  20. $nonce = $_GET['nonce'];  
  21. $token = TOKEN;  
  22. $tmpArr = array($token$timestamp$nonce);  
  23. sort($tmpArr);  
  24. $tmpStr = implode($tmpArr);  
  25. $tmpStr = sha1($tmpStr);  
  26. if($tmpStr == $signature){  
  27. return true;  
  28. }else{  
  29. return false;  
  30. }  
  31. }  
  32. /* 接收图片消息格式  
  33.   
  34.   
  35.   
  36. 1348831860  
  37.   
  38.   
  39.   
  40. 1234567890123456  
  41.   
  42. */ 
  43. public function responseMsg(){  
  44. //获取微信服务器POST请求中的数据  
  45. $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  46. if( !emptyempty($postStr) ){  
  47. $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA);  
  48. $fromUser = $postObj->FromUserName;  
  49. $toUser = $postObj->ToUserName;  
  50. $time = time();  
  51. $msgType$postObj->MsgType;  
  52. $picUrl = $postObj->PicUrl;  
  53. $mediaId = $postObj->MediaId;  
  54. $template = "  
  55.   
  56.   
  57. %s  
  58.   
  59.   
  60. ";  
  61. ifstrtolower($msgType)!='image' ){  
  62. $msgType = "text";  
  63. $content = "我只接受图片消息";  
  64. }else{  
  65. $msgType = "text";  
  66. if( !emptyempty$picUrl ) ){  
  67. $content = "图片链接为:".$picUrl."/n";  
  68. $content .= "媒体id:".$mediaId;  
  69. }else{  
  70. $content = "请发送图片";//消息为空  
  71. }  
  72. }  
  73. $info = sprintf($template$fromUser$toUser$time$msgType$content);  
  74. echo $info;  
  75. }else{  
  76. echo "";  
  77. exit;  
  78. }  
  79. }  
  80. } 

以上是小编给大家分享的微信消息自动回复下所遇到的坑的相关知识,希望对大家有所帮助!

本文来自网络,不代表1号站长-站长学院|资讯交流平台立场。转载请注明出处: https://www.1cn.cc/jianzhan/jingyan/10266.html
上一篇Symfony的安装和配置方法
下一篇 PHP pear安装配置教程
admin

作者: admin

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部