国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

PHP微信開發之微信消息自動回復下所遇到的坑

2024-04-25 20:16:34
字體:
來源:轉載
供稿:網友

這篇文章是小編給大家介紹的微信消息自動回復下所遇到的坑的相關內容,在日常項目開發中經常遇到,非常具有參考借鑒價值,感興趣的小伙伴一起學習吧

微信回復原理:

當普通微信用戶向公眾賬號發送消息時,微信服務器首先收到用戶發送的消息;

然后將用戶信息和消息打包成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. <span style="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. <xml>  
  34. <ToUserName><![CDATA[toUser]]></ToUserName>  
  35. <FromUserName><![CDATA[fromUser]]></FromUserName>  
  36. <CreateTime>1348831860</CreateTime>  
  37. <MsgType><![CDATA[text]]></MsgType>  
  38. <Content><![CDATA[this is a test]]></Content>  
  39. </xml>  
  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 = "<xml>  
  51. <ToUserName><![CDATA[%s]]></ToUserName>  
  52. <FromUserName><![CDATA[%s]]></FromUserName>  
  53. <CreateTime>%s</CreateTime>  
  54. <MsgType><![CDATA[%s]]></MsgType>  
  55. <Content><![CDATA[%s]]></Content>  
  56. </xml>";  
  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. }</span> 

功能:公眾號只接受圖片消息,且做出相應的文字回復。

  1. <span style="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. <xml>  
  34. <ToUserName><![CDATA[toUser]]></ToUserName>  
  35. <FromUserName><![CDATA[fromUser]]></FromUserName>  
  36. <CreateTime>1348831860</CreateTime>  
  37. <MsgType><![CDATA[image]]></MsgType>  
  38. <PicUrl><![CDATA[this is a url]]></PicUrl>  
  39. <MediaId><![CDATA[media_id]]></MediaId>  
  40. <MsgId>1234567890123456</MsgId>  
  41. </xml>  
  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 = "<xml>  
  55. <ToUserName><![CDATA[%s]]></ToUserName>  
  56. <FromUserName><![CDATA[%s]]></FromUserName>  
  57. <CreateTime>%s</CreateTime>  
  58. <MsgType><![CDATA[%s]]></MsgType>  
  59. <Content><![CDATA[%s]]></Content>  
  60. </xml>";  
  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. }</span> 

以上是小編給大家分享的微信消息自動回復下所遇到的坑的相關知識,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉鱼县| 盖州市| 石河子市| 北流市| 栾城县| 怀宁县| 桂平市| 湘潭县| 凤城市| 册亨县| 延庆县| 嘉义县| 阳城县| 蒙阴县| 石首市| 河北区| 浦县| 沽源县| 金秀| 夏河县| 临沧市| 潮州市| 扬州市| 阿克苏市| 武义县| 西青区| 台州市| 凌云县| 五寨县| 扎兰屯市| 连云港市| 聂拉木县| 肇源县| 马鞍山市| 漯河市| 定远县| 龙门县| 米泉市| 枣阳市| 宣恩县| 英吉沙县|