{"id":55,"date":"2018-06-06T17:01:09","date_gmt":"2018-06-06T09:01:09","guid":{"rendered":"http:\/\/wangliqiang.com\/?p=55"},"modified":"2018-08-01T23:41:30","modified_gmt":"2018-08-01T15:41:30","slug":"%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%b9%b3%e5%8f%b0%e5%ae%9e%e7%8e%b0%e6%8e%a5%e5%8f%a3%e9%aa%8c%e8%af%81%e5%92%8c%e5%85%b3%e6%b3%a8%e5%90%8e%e5%9b%9e%e5%a4%8d%e6%99%ba%e8%83%bd%e8%a2%ab%e5%8a%a8","status":"publish","type":"post","link":"http:\/\/wangliqiang.com\/?p=55","title":{"rendered":"\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5b9e\u73b0\u63a5\u53e3\u9a8c\u8bc1\u548c\u5173\u6ce8\u540e\u56de\u590d+\u667a\u80fd\u88ab\u52a8\u56de\u590d\u3002"},"content":{"rendered":"<p>\u89e3\u51b3\u4e86php\u4e0d\u80fd\u56de\u590d\u7528\u6237\u6d88\u606f\u7684\u95ee\u9898\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>$postStr = $GLOBALS[\"HTTP_RAW_POST_DATA\"];\u6ce8\u91ca\u6389<\/p>\n<pre>$postStr = file_get_contents(\"php:\/\/input\");\/\/\u56e0\u4e3a\u5f88\u591a\u90fd\u8bbe\u7f6e\u4e86register_globals\u7981\u6b62,\u4e0d\u80fd\u7528$GLOBALS[\"HTTP_RAW_POST_DATA\"];<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;?php<br \/>\n\/**<br \/>\n* wechat php test<br \/>\n*\/<\/p>\n<p>\/\/define your token<br \/>\ndefine(\"TOKEN\", \"hellowangliqiang\");<br \/>\n$wechatObj = new wechatCallbackapiTest();<br \/>\n\/\/$wechatObj-&gt;valid();\/\/\u63a5\u53e3\u9a8c\u8bc1<br \/>\n$wechatObj-&gt;responseMsg();\/\/\u8c03\u7528\u56de\u590d\u6d88\u606f\u65b9\u6cd5<br \/>\nclass wechatCallbackapiTest<br \/>\n{<br \/>\npublic function valid()<br \/>\n{<br \/>\n$echoStr = $_GET[\"echostr\"];<\/p>\n<p>\/\/valid signature , option<br \/>\nif($this-&gt;checkSignature()){<br \/>\necho $echoStr;<br \/>\nexit;<br \/>\n}<br \/>\n}<\/p>\n<p>public function responseMsg()<br \/>\n{<br \/>\n\/\/ $postStr = $GLOBALS[\"HTTP_RAW_POST_DATA\"];<br \/>\n$postStr = file_get_contents(\"php:\/\/input\");<\/p>\n<p>if (!empty($postStr)){<br \/>\n\/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,<br \/>\nthe best way is to check the validity of xml by yourself *\/<br \/>\nlibxml_disable_entity_loader(true);<br \/>\n$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);<br \/>\n$fromUsername = $postObj-&gt;FromUserName;<br \/>\n$toUsername = $postObj-&gt;ToUserName;<br \/>\n$keyword = trim($postObj-&gt;Content);<br \/>\n$time = time();<br \/>\n$msgType = $postObj-&gt;MsgType;\/\/\u6d88\u606f\u7c7b\u578b<br \/>\n$event = $postObj-&gt;Event;\/\/\u65f6\u95f4\u7c7b\u578b\uff0csubscribe\uff08\u8ba2\u9605\uff09\u3001unsubscribe\uff08\u53d6\u6d88\u8ba2\u9605\uff09<br \/>\n$textTpl = \"&lt;xml&gt;<br \/>\n&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;\/ToUserName&gt;<br \/>\n&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;\/FromUserName&gt;<br \/>\n&lt;CreateTime&gt;%s&lt;\/CreateTime&gt;<br \/>\n&lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;\/MsgType&gt;<br \/>\n&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;\/Content&gt;<br \/>\n&lt;FuncFlag&gt;0&lt;\/FuncFlag&gt;<br \/>\n&lt;\/xml&gt;\";<\/p>\n<p>switch($msgType){<br \/>\ncase \"event\":<br \/>\nif($event==\"subscribe\"){<br \/>\n$contentStr = \"Hi,\u6b22\u8fce\u5173\u6ce8\u54e6\uff0c\u8fd9\u662f\u4e00\u4e2a\u4ee3\u7801\u6d4b\u8bd5\u8d26\u53f7!\".\"\\n\".\"\u56de\u590d\u6570\u5b571\".\"\\n\".\"\u56de\u590d\u6570\u5b572\";<br \/>\n}<br \/>\nbreak;<br \/>\ncase \"text\":<br \/>\nswitch($keyword){<br \/>\ncase \"1\":<br \/>\n$contentStr = \"\u6570\u5b571\u56de\u590d\u7684\u5185\u5bb9\";<br \/>\nbreak;<br \/>\ncase \"2\":<br \/>\n$contentStr = \"\u6570\u5b572\u56de\u590d\u7684\u5185\u5bb9\";<br \/>\nbreak;<br \/>\ndefault:<br \/>\n$contentStr = \"\u5bf9\u4e0d\u8d77,\u4f60\u7684\u5185\u5bb9\u6211\u4f1a\u7a0d\u540e\u56de\u590d\";<br \/>\n}<br \/>\nbreak;<br \/>\n}<br \/>\n$msgType = \"text\";<br \/>\n$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);<br \/>\necho $resultStr;<br \/>\n}else {<br \/>\necho \"\";<br \/>\nexit;<br \/>\n}<br \/>\n}<\/p>\n<p>private function checkSignature()<br \/>\n{<br \/>\n\/\/ you must define TOKEN by yourself<br \/>\nif (!defined(\"TOKEN\")) {<br \/>\nthrow new Exception('TOKEN is not defined!');<br \/>\n}<\/p>\n<p>$signature = $_GET[\"signature\"];<br \/>\n$timestamp = $_GET[\"timestamp\"];<br \/>\n$nonce = $_GET[\"nonce\"];<\/p>\n<p>$token = TOKEN;<br \/>\n$tmpArr = array($token, $timestamp, $nonce);<br \/>\n\/\/ use SORT_STRING rule<br \/>\nsort($tmpArr, SORT_STRING);<br \/>\n$tmpStr = implode( $tmpArr );<br \/>\n$tmpStr = sha1( $tmpStr );<\/p>\n<p>if( $tmpStr == $signature ){<br \/>\nreturn true;<br \/>\n}else{<br \/>\nreturn false;<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u89e3\u51b3\u4e86php\u4e0d\u80fd\u56de\u590d\u7528\u6237\u6d88\u606f\u7684\u95ee\u9898\u3002 &nbsp; $postStr = $GLOBALS[\"HTTP_RAW [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-55","post","type-post","status-publish","format-standard","hentry","category-weixin"],"_links":{"self":[{"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":1,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":210,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions\/210"}],"wp:attachment":[{"href":"http:\/\/wangliqiang.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wangliqiang.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}