{"id":31399,"date":"2024-11-25T13:14:49","date_gmt":"2024-11-25T05:14:49","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31399\/"},"modified":"2024-11-25T13:14:49","modified_gmt":"2024-11-25T05:14:49","slug":"%e5%be%ae%e4%bf%a1%e5%a6%82%e4%bd%95%e9%aa%8c%e8%af%81%e6%89%80%e6%9c%89%e8%80%85","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31399\/","title":{"rendered":"\u5fae\u4fe1\u5982\u4f55\u9a8c\u8bc1\u6240\u6709\u8005"},"content":{"rendered":"<p>\u672c\u6587\u4e3b\u8981\u548c\u5927\u5bb6\u5206\u4eab\u5fae\u4fe1\u5982\u4f55\u9a8c\u8bc1\u6240\u6709\u8005\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5927\u5bb6\u3002<\/p>\n<pre>&lt;?php  \/\/\u8fd9\u4e24\u4e2a\u63a7\u5236\u5668\u662f\u6211\u672c\u6765\u5c31\u6709\u7684\u8fd9\u91cc\u5c31\u4e0d\u505a\u6f14\u793a  \u53ef\u4ee5\u4e0d\u7ee7\u627f \u8fd9\u4e2a\u63a7\u5236\u5668\u7528\u5230\u7684\u4e1c\u897f \u4e0d\u4f9d\u9760\u5916\u9762\u7684\u4e1c\u897f\r\n namespace AppsController;\r\n use CommonControllerAppBaseController;\r\n \/**\r\n * \u9996\u9875\r\n *\/\r\ndefine(\"TOKEN\", \"\");\/\/\u5b9a\u4e49\u4f60\u516c\u4f17\u53f7\u81ea\u5df1\u8bbe\u7f6e\u7684token\r\ndefine(\"APPID\", \"\");\/\/\u586b\u5199\u4f60\u5fae\u4fe1\u516c\u4f17\u53f7\u7684appid \u5343\u4e07\u8981\u4e00\u81f4\u554a\r\ndefine(\"APPSECRET\", \"\");\/\/\u586b\u5199\u4f60\u5fae\u4fe1\u516c\u4f17\u53f7\u7684appsecret  \u5343\u4e07\u8981\u8bb0\u5f97\u4fdd\u5b58 \u4ee5\u540e\u8981\u770b\u7684\u8bdd\u5c31\u53ea\u6709\u8fd8\u539f\u4e86  \u4fdd\u5b58\u8d77\u6765 \u6709\u76ca\u65e0\u5bb3\r\n class WeChatController extends AppBaseController\r\n {\r\n    \/\/\u5224\u65ad\u662f\u4ecb\u5165\u8fd8\u662f\u7528\u6237  \u53ea\u6709\u7b2c\u4e00\u6b21\u4ecb\u5165\u7684\u65f6\u5019\u624d\u4f1a\u8fd4\u56deechostr\r\n    function index()\r\n    {\r\n        \/\/\u8fd9\u4e2aechostr\u5462  \u53ea\u6709\u8bf4\u9a8c\u8bc1\u7684\u65f6\u5019\u624d\u4f1aecho  \u5982\u679c\u662f\u9a8c\u8bc1\u8fc7\u4e4b\u540e\u8fd9\u4e2aechostr\u662f\u4e0d\u5b58\u5728\u7684\u5b57\u6bb5\u4e86\r\n        $echoStr = $_GET[\"echostr\"];\r\n        if ($this-&gt;checkSignature())&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$echoStr;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5982\u679c\u4f60\u4e0d\u77e5\u9053\u662f\u5426\u9a8c\u8bc1\u6210\u529f&nbsp;&nbsp;\u4f60\u53ef\u4ee5\u5148echo&nbsp;echostr&nbsp;\u7136\u540e\u518d\u5199\u4e00\u4e2a\u4e1c\u897f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\/\/index&nbsp;end\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u9a8c\u8bc1\u5fae\u4fe1\u5f00\u53d1\u8005\u6a21\u5f0f\u63a5\u5165\u662f\u5426\u6210\u529f\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;checkSignature()\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/signature&nbsp;\u662f\u5fae\u4fe1\u4f20\u8fc7\u6765\u7684&nbsp;\u7c7b\u4f3c\u4e8e\u7b7e\u540d\u7684\u4e1c\u897f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$signature&nbsp;=&nbsp;$_GET[\"signature\"];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5fae\u4fe1\u53d1\u8fc7\u6765\u7684\u4e1c\u897f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$timestamp&nbsp;=&nbsp;$_GET[\"timestamp\"];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5fae\u4fe1\u4f20\u8fc7\u6765\u7684\u503c&nbsp;&nbsp;\u4ec0\u4e48\u7528\u6211\u4e0d\u77e5\u9053...\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$nonce&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$_GET[\"nonce\"];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u4f60\u5728\u5fae\u4fe1\u516c\u4f17\u53f7\u5f00\u53d1\u8005\u6a21\u5f0f\u91cc\u9762\u5b9a\u4e49\u7684token\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$token&nbsp;&nbsp;=&nbsp;\"xiaochen\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u4e09\u4e2a\u53d8\u91cf&nbsp;\u6309\u7167\u5b57\u5178\u6392\u5e8f&nbsp;\u5f62\u6210\u4e00\u4e2a\u6570\u7ec4\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmpArr&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$token,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$timestamp,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$nonce\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;use&nbsp;SORT_STRING&nbsp;rule\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort($tmpArr,&nbsp;SORT_STRING);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmpStr&nbsp;=&nbsp;implode($tmpArr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u54c8\u5e0c\u52a0\u5bc6&nbsp;&nbsp;\u5728laravel\u91cc\u9762\u662fHash::\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmpStr&nbsp;=&nbsp;sha1($tmpStr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6309\u7167\u5fae\u4fe1\u7684\u5957\u8def&nbsp;\u7ed9\u4f60\u4e00\u4e2asignature\u6ca1\u7528\u662f\u4e0d\u53ef\u80fd\u7684&nbsp;\u8fd9\u91cc\u5c31\u7528\u5f97\u4e0a\u4e86\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($tmpStr&nbsp;==&nbsp;$signature)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\/\/&nbsp;checkSignature&nbsp;end\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6784\u5efa\u4e00\u4e2a\u53d1\u9001\u8bf7\u6c42\u7684curl\u65b9\u6cd5&nbsp;&nbsp;\u5fae\u4fe1\u7684\u4e1c\u897f\u90fd\u662f\u7528\u8fd9\u4e2a&nbsp;\u76f4\u63a5\u767e\u5ea6\r\n&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;https_request($url,&nbsp;$data&nbsp;=&nbsp;null)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u8fd9\u4e2a\u65b9\u6cd5\u6211\u4e0d\u77e5\u9053\u662f\u600e\u4e48\u4e2a\u610f\u601d&nbsp;&nbsp;\u6211\u770b\u90fd\u662f\u8fd9\u4e2a\u65b9\u6cd5&nbsp;\u5c31copy\u8fc7\u6765\u4e86\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$curl&nbsp;=&nbsp;curl_init();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_URL,&nbsp;$url);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;FALSE);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_SSL_VERIFYHOST,&nbsp;FALSE);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!empty($data)){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_POST,&nbsp;1);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_POSTFIELDS,&nbsp;$data);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($curl,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output&nbsp;=&nbsp;curl_exec($curl);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_close($curl);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$output;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\/\/https_request&nbsp;end\r\n&nbsp;}&nbsp;\/\/classend<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5fae\u4fe1\u5982\u4f55\u9a8c\u8bc1\u6240\u6709\u8005\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u4e3b\u8981\u548c\u5927\u5bb6\u5206\u4eab\u5fae\u4fe1\u5982\u4f55\u9a8c\u8bc1\u6240\u6709\u8005\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5927\u5bb6\u3002 &lt;?php \/\/\u8fd9\u4e24\u4e2a\u63a7\u5236\u5668\u662f\u6211\u672c\u6765\u5c31\u6709\u7684\u8fd9\u91cc\u5c31\u4e0d\u505a\u6f14\u793a \u53ef\u4ee5\u4e0d\u7ee7\u627f \u8fd9\u4e2a\u63a7\u5236\u5668\u7528\u5230\u7684\u4e1c\u897f \u4e0d\u4f9d\u9760\u5916\u9762\u7684\u4e1c\u897f namespace AppsController; use CommonControllerAppBaseController; \/** * \u9996\u9875 *\/ define(&#8220;TOKEN&#8221;, &#8220;&#8221;);\/\/\u5b9a\u4e49\u4f60\u516c\u4f17\u53f7\u81ea\u5df1\u8bbe\u7f6e\u7684token define(&#8220;APPID&#8221;, &#8220;&#8221;);\/\/\u586b\u5199\u4f60\u5fae\u4fe1\u516c\u4f17\u53f7\u7684appid \u5343\u4e07\u8981\u4e00\u81f4\u554a define(&#8220;APPSECRET&#8221;, &#8220;&#8221;);\/\/\u586b\u5199\u4f60\u5fae\u4fe1\u516c\u4f17\u53f7\u7684appsecret \u5343\u4e07\u8981\u8bb0\u5f97\u4fdd\u5b58 \u4ee5\u540e\u8981\u770b\u7684\u8bdd\u5c31\u53ea\u6709\u8fd8\u539f\u4e86 \u4fdd\u5b58\u8d77\u6765 \u6709\u76ca\u65e0\u5bb3 class WeChatController extends AppBaseController { \/\/\u5224\u65ad\u662f\u4ecb\u5165\u8fd8\u662f\u7528\u6237 \u53ea\u6709\u7b2c\u4e00\u6b21\u4ecb\u5165\u7684\u65f6\u5019\u624d\u4f1a\u8fd4\u56deechostr function index() { \/\/\u8fd9\u4e2aechostr\u5462 \u53ea\u6709\u8bf4\u9a8c\u8bc1\u7684\u65f6\u5019\u624d\u4f1aecho \u5982\u679c\u662f\u9a8c\u8bc1\u8fc7\u4e4b\u540e\u8fd9\u4e2aechostr\u662f\u4e0d\u5b58\u5728\u7684\u5b57\u6bb5\u4e86 $echoStr = $_GET[&#8220;echostr&#8221;]; if ($this-&gt;checkSignature())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$echoStr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5982\u679c\u4f60\u4e0d\u77e5\u9053\u662f\u5426\u9a8c\u8bc1\u6210\u529f&nbsp;&nbsp;\u4f60\u53ef\u4ee5\u5148echo&nbsp;echostr&nbsp;\u7136\u540e\u518d\u5199\u4e00\u4e2a\u4e1c\u897f &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}\/\/index&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;\/\/\u9a8c\u8bc1\u5fae\u4fe1\u5f00\u53d1\u8005\u6a21\u5f0f\u63a5\u5165\u662f\u5426\u6210\u529f &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;checkSignature() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/signature&nbsp;\u662f\u5fae\u4fe1\u4f20\u8fc7\u6765\u7684&nbsp;\u7c7b\u4f3c\u4e8e\u7b7e\u540d\u7684\u4e1c\u897f &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$signature&nbsp;=&nbsp;$_GET[&#8220;signature&#8221;]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5fae\u4fe1\u53d1\u8fc7\u6765\u7684\u4e1c\u897f &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$timestamp&nbsp;=&nbsp;$_GET[&#8220;timestamp&#8221;]; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-31399","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=31399"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31399\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}