{"id":29984,"date":"2024-11-25T11:32:20","date_gmt":"2024-11-25T03:32:20","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29984\/"},"modified":"2024-11-25T11:32:20","modified_gmt":"2024-11-25T03:32:20","slug":"%e4%bb%8e%e6%ba%90%e4%bb%a3%e7%a0%81%e4%b8%ad%e5%b8%a6%e4%bd%a0%e8%a7%a3%e6%9e%90%e5%be%ae%e4%bf%a1%e5%bc%80%e5%8f%91","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29984\/","title":{"rendered":"\u4ece\u6e90\u4ee3\u7801\u4e2d\u5e26\u4f60\u89e3\u6790\u5fae\u4fe1\u5f00\u53d1"},"content":{"rendered":"<p>\u3000\u3000\u8fd9\u4e24\u5929\u9879\u76ee\u9700\u8981\u5728\u5fae\u4fe1\u4e0a\u9762\u5f00\u4e00\u4e2a\u63a5\u53e3\uff0c\u5c31\u7814\u7a76\u4e86\u4e00\u4e0b\uff0c\u8fc7\u7a0b\u5f88\u8270\u96be\uff0c\u7ed3\u679c\u5f88\u7406\u60f3\uff0c\u4e0b\u9762\u6211\u5c31\u4ecb\u7ecd\u4e00\u4e0b\u5fae\u4fe1\u5f00\u53d1\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9\u3002<\/p>\n<p><span style=\"font-size: 14pt\"><strong>1\uff0c\u8d26\u53f7\u95ee\u9898<\/strong><\/span><\/p>\n<p>\u3000\u3000\/* \u9996\u5148\u8bf4\u7b2c\u4e00\u4e2a\u4f60\u5f97\u9009\u62e9\u516c\u4f17\u5e73\u53f0\uff08\u5f00\u653e\u5e73\u53f0\u8c8c\u4f3c\u662f\u505a\u5e94\u7528\u96c6\u6210\u7684\uff0c\u8fd9\u4e2a\u6ca1\u6709\u4ed4\u7ec6\u7814\u7a76\uff0c\u5982\u679c\u6709\u8c01\u4e86\u89e3\uff0c\u5e0c\u671b\u544a\u8bc9\u6211\u4e00\u58f0\uff09\uff0c\u5728\u516c\u4f17\u5e73\u53f0\u6211\u4eec\u9700\u8981\u6ce8\u518c\u8d26\u53f7\uff0c\u8d26\u53f7\u8fd8\u5206\u4e24\u79cd\uff0c\u4e2a\u4eba\u7c7b\u578b\u548c\u4f01\u4e1a\u7c7b\u578b\uff0c\u5176\u4e2d\u4e2a\u4eba\u7c7b\u578b\u7684\u53ea\u80fd\u7533\u8bf7\u8ba2\u9605\u53f7\uff0c\u800c\u4f01\u4e1a\u7c7b\u578b\u7684\u624d\u53ef\u4ee5\u641e\u5230\u670d\u52a1\u53f7\uff0c\u8ba2\u9605\u53f7\u53ea\u80fd\u624b\u5de5\u6216\u8005\u914d\u7f6e\u4e00\u4e9b\u5173\u952e\u8bcd\u53bb\u505a\u4e8b\u60c5\uff0c\u670d\u52a1\u53f7\u624d\u80fd\u90e8\u7f72\u4e00\u4e9b\u667a\u80fd\u7684\u4e1c\u4e1c\uff0c\u9700\u8981\u9ad8\u7ea7\u5f00\u53d1\u6743\u9650\u53ea\u80fd\u662f\u670d\u52a1\u53f7\uff0c\u6240\u4ee5\u5982\u679c\u4f60\u662f\u4e2a\u4eba\uff0c\u60f3\u8981\u9488\u5bf9\u7528\u6237\u53d1\u8fc7\u6765\u7684\u6d88\u606f\u53bb\u56de\u590d\u4e0d\u540c\u7684\u5185\u5bb9\uff0c\u6d17\u6d17\u7761\u5427\u3002 *\/<\/p>\n<p>\u3000\u3000\u641e\u5f00\u53d1\u7684\u90fd\u77e5\u9053\u4e0a\u9762\u90a3\u6bb5\u8bdd\u7684\u610f\u601d\uff0c\u662f\u7684\uff0c\u6211\u7ed9\u6ce8\u91ca\u4e86\uff0c\u6211\u4eca\u5929\u5728\u767b\u9646\u8ba2\u9605\u53f7\u7684\u65f6\u5019\uff0c\u53d1\u73b0\u8ba2\u9605\u53f7\u4e5f\u6709\u9ad8\u7ea7\u529f\u80fd\u7684\uff0c\u53ef\u80fd\u6211\u90a3\u4e2a\u65f6\u5019\u6ca1\u6709\u901a\u8fc7\u5ba1\u6838\u5427\uff0cOK\uff0c\u4e0d\u59a8\u788d\u4e0b\u9762\u7684\u5206\u4eab\u3002<\/p>\n<p><span style=\"font-size: 14pt\"><strong>2\uff0c\u5f00\u53d1\u6a21\u5f0f<\/strong><\/span><\/p>\n<p>\u3000\u3000\u5f88\u7b80\u5355\uff0c\u5f53\u4f60\u62ff\u5230\u4f60\u7684\u670d\u52a1\u8d26\u53f7\u7684\u65f6\u5019\uff0c\u4f60\u4f1a\u53d1\u73b0\uff0c\u5728\u529f\u80fd\u4e2d\u6709\u4e2a\u9ad8\u7ea7\u529f\u80fd\uff08\u5728\u8ba2\u9605\u8d26\u53f7\u91cc\u9762\u662f\u6ca1\u6709\u9ad8\u7ea7\u529f\u80fd\u8fd9\u4e2a\u9009\u9879\u7684\uff09\uff0c\u4e4b\u540e\u4f60\u53ef\u4ee5\u9009\u62e9\u5f00\u901a\u54ea\u79cd\u65b9\u5f0f\u3002\u76ee\u524d\u5f00\u53d1\u548c\u7f16\u8f91\u53ea\u80fd\u542f\u52a8\u4e00\u4e2a\u3002<\/p>\n<p><span style=\"font-size: 14pt\"><strong>3\uff0c<\/strong><\/span><\/p>\n<p>\u3000\u3000\u5fae\u4fe1\u63a5\u53e3\u53ea\u6709\u4e00\u4e2aURL\uff0c\u4efb\u4f55\u6570\u636e\u90fd\u662f\u901a\u8fc7\u8fd9\u4e2aURL\u548c\u4f60\u7684\u670d\u52a1\u5668\u8fdb\u884c\u8fde\u63a5\u7684\uff08GET\u6216\u8005POST\uff09\u90fd\u9700\u8981\u8d70\u8fd9\u4e2a\u63a5\u53e3\uff0c\u4e0b\u9762\u4f1a\u8bf4\u8bf4\u4e24\u4e2a\u7528\u5230\u7684\u5730\u65b9\u3002<\/p>\n<p><span style=\"font-size: 14pt\"><strong>4\uff0c\u9a8c\u8bc1\u670d\u52a1\u5668<\/strong><\/span><\/p>\n<p>\u3000\u3000\u5728\u586b\u5199\u4f60\u7684\u670d\u52a1\u5668URL\u4e4b\u540e\uff0c\u5fae\u4fe1\u4f1a\u5e26\u4e0a\u51e0\u4e2a\u53c2\u6570\u53bb\u8bbf\u95ee\u4f60\u7684URL\uff0c\u4f60\u53ea\u9700\u8981\u8fd4\u56de\u7279\u5b9a\u7684\u6570\u636e\u5c31OK\u4e86\uff0c\u5177\u4f53\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u67e5\u770b\u6b64\u94fe\u63a5\uff1ahttp:\/\/mp.weixin.qq.com\/wiki\/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97<\/p>\n<p>\u3000\u3000\u5728\u8fde\u63a5\u4e2d\u6709\u90e8\u5206php\u7684\u4ee3\u7801\u53ef\u4ee5\u53c2\u8003\uff0c\u4e0b\u9762\u6211\u5c06\u6211\u7684\u4ee3\u7801\u8d34\u4e00\u4e0b\uff0c\u5728\u8fd9\u8fb9\u6211\u8d70\u4e86\u5f88\u591a\u5f2f\u8def\uff0c\u6240\u4ee5\u6211\u5c3d\u91cf\u8d34\u7684\u5168\u4e00\u70b9<\/p>\n<pre>&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u9a8c\u8bc1\u5fae\u4fe1\u7b7e\u540d&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5fae\u4fe1\u52a0\u5bc6\u7b7e\u540d\uff0csignature\u7ed3\u5408\u4e86\u5f00\u53d1\u8005\u586b\u5199\u7684token\u53c2\u6570\u548c\u8bf7\u6c42\u4e2d\u7684timestamp\u53c2\u6570\u3001nonce\u53c2\u6570\u3002&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u65f6\u95f4\u6233&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u968f\u673a\u6570&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u968f\u673a\u5b57\u7b26\u4e32&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;\u5f00\u53d1\u8005\u901a\u8fc7\u68c0\u9a8csignature\u5bf9\u8bf7\u6c42\u8fdb\u884c\u6821\u9a8c\uff08\u4e0b\u9762\u6709\u6821\u9a8c\u65b9\u5f0f\uff09\u3002\u82e5\u786e\u8ba4\u6b64\u6b21GET\u8bf7\u6c42\u6765\u81ea\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u8bf7\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u6210\u4e3a\u5f00\u53d1\u8005\u6210\u529f\uff0c\u5426\u5219\u63a5\u5165\u5931\u8d25\u3002&lt;\/returns&gt;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(\"GET\")]10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(\"Api\")]11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;CheckSignature(string&nbsp;sigNature,&nbsp;string&nbsp;timestamp,&nbsp;string&nbsp;nonce,&nbsp;string&nbsp;echoStr)13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string.Format(\"SigNature:{0}\nTimestamp:{1}\nNonce:{2}\nEchoStr:{3}\",16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigNature,&nbsp;timestamp,&nbsp;nonce,&nbsp;echoStr);17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.Debug(content);\u3000\u3000\u3000\u3000\/\/&nbsp;\u6b64\u5904\u7684log\u4f60\u53ef\u4ee5\u5220\u638918&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;list&nbsp;=&nbsp;new&nbsp;string[]&nbsp;{&nbsp;timestamp,&nbsp;nonce,&nbsp;TOKEN&nbsp;};20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Sort(list);21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpArr&nbsp;=&nbsp;string.Join(\"\",&nbsp;list);22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpStr&nbsp;=&nbsp;FormsAuthentication.HashPasswordForStoringInConfigFile(tmpArr,&nbsp;\"SHA1\").ToLower();23&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmpStr&nbsp;==&nbsp;sigNature&nbsp;&amp;amp;&amp;amp;&nbsp;!string.IsNullOrEmpty(echoStr))\u3000\u3000\u3000\u3000\u3000\/\/\u6839\u636e\u5fae\u4fe1\u7684\u9a8c\u8bc1\u89c4\u5219\u505a\u5224\u65ad25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(echoStr);26&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(\"error\");28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000\u4e4b\u6240\u4ee5\u5199\u4e86GetReturn\u8fd9\u4e2a\u662f\u56e0\u4e3a\u7ed9\u6211\u7684\u7ed3\u679c\u5c01\u88c5\u4e86\uff0c\u6bcf\u6b21\u6211\u8fd4\u56de\u4e00\u4e2a\u5b57\u7b26\u4e32\u7684\u65f6\u5019\u4ed6\u90fd\u4f1a\u5728\u5916\u5c42\u6dfb\u52a0\u4e00\u5bf9\u5f15\u53f7\uff0c\u5fae\u4fe1\u8fd8\u50bb\u4e0d\u6123\u767b\u7684\u4e0d\u8ba4\u8bc6\u3002\u3002\u3002\u3002\u8fd9\u4e2a\u51fd\u6570\u4e3b\u8981\u5c31\u662f\u7ed9\u6211\u53bb\u9664MVC\u5c01\u88c5\u7684<\/p>\n<pre>1&nbsp;\u3000\u3000\u3000\u3000&nbsp;public&nbsp;static&nbsp;HttpResponseMessage&nbsp;GetReturn(string&nbsp;message)2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;HttpResponseMessage4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;new&nbsp;StringContent(message,&nbsp;Encoding.UTF8,&nbsp;\"text\/html\")6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000\u4e0a\u9762\u7684CheckSignature\u662f\u4e00\u4e2aGET\u7684\u63a5\u53e3\uff0c\u4e3b\u8981\u5c31\u662f\u9a8c\u8bc1\u5fae\u4fe1\u670d\u52a1\u7684\uff0c<strong>\u5f53\u7136\uff0c\u4f60\u4ed4\u7ec6\u7814\u7a76\u4e0b\u5fae\u4fe1\u8bf4\u7684\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u5f53\u4f60\u6536\u5230echoStr\u7684\u65f6\u5019\uff0c\u76f4\u63a5return\u5176\u5b9e\u5c31OK\u4e86\uff0c\u4e0d\u5fc5\u591a\u51fa\u9a8c\u8bc1\u7684\u6b65\u9aa4\u3002<\/strong><\/p>\n<p><strong><span style=\"font-size: 14pt\">5\uff0c\u6d88\u606f\u63a5\u6536\u63a5\u53e3<\/span><\/strong><\/p>\n<p>\u3000\u3000\u6211\u53ea\u5173\u6ce8\u4e86\u4e00\u4e2a\u529f\u80fd\uff0c\u5f53\u7528\u6237\u7684\u65f6\u5019\u6211\u8981\u56de\u590d\u7528\u6237\u6d88\u606f\uff0c\u800c\u4e14\u53ea\u5173\u6ce8\u6587\u672c\u6d88\u606f\u5c31OK\u4e86\uff08\u5176\u5b9e\u522b\u7684\u7c7b\u578b\u7684\u6d88\u606f\u539f\u7406\u90fd\u5dee\u4e0d\u591a\uff09\u3002<\/p>\n<p>\u3000\u3000\u6211\u4eec\u9700\u8981\u6ce8\u610f\u8fd9\u8fb9\u7684\u51e0\u70b9\uff1a<\/p>\n<p>\u3000\u3000a\uff0c\u6b64\u63a5\u53e3\u7684ActionName\u548c\u4e0a\u9762\u9a8c\u8bc1\u7684\u63a5\u53e3\u662f\u4e00\u6837\u7684\uff0c\u8fd9\u6837\uff0c\u4ed6\u4eec\u5728\u5916\u9762\u8bbf\u95ee\u5c31\u662f\u76f8\u540c\u7684URL\uff0c\u53ea\u662f\u8bbf\u95ee\u7684Method\u4e0d\u540c\u7f62\u4e86\u3002<\/p>\n<pre>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(\"POST\")]2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(\"Api\")]3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;ReceiveMessage()<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000b\uff0c\u8fd9\u79cd\u83b7\u53d6\u6d88\u606f\u5185\u5bb9\u7684\u65b9\u6cd5\u6211\u4e5f\u662f\u7814\u7a76\u4e86\u597d\u4e45\u624d\u627e\u5230\u7684\uff0c\u8d39\u6b7b\u52b2\u4e86\u3002<\/p>\n<pre>1&nbsp;\u3000\u3000var&nbsp;message&nbsp;=&nbsp;Request.Content.ReadAsStringAsync().Result;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000c\uff0c\u5728\u8fd9\u4e2a\u63a5\u53e3\u4ed6POST\u8fc7\u6765\u5f88\u591a\u7684\uff0c\u6211\u90fd\u7528\u6b63\u5219\u7ed9\u4ed6\u641e\u5230\u4e86<\/p>\n<pre>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;toUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;ToUserNameReg);2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fromUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;FromUserNameReg);3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createTime&nbsp;=&nbsp;GetItemValue(message,&nbsp;CreateTimeReg);4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgType&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgTypeReg);5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;GetItemValue(message,&nbsp;ContentReg);6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgId&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgIdReg);7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventStr&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventReg);8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventKey&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventKeyReg);<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000d\uff0c\u6211\u53ea\u5173\u6ce8\u5176\u4e2d\u4e24\u79cd\u7c7b\u578b\u7684\uff1aevent and text\uff0cevent\u503c\u5f97\u662f\u5173\u6ce8\u548c\u89e3\u9664\u5173\u6ce8\uff0c\u5728\u5173\u6ce8\u7684\u65f6\u5019\u8981\u8868\u793a\u611f\u8c22\u4e0d\u662f\uff1b\u53d1\u8fc7\u6765\u7684text\uff0c\u6211\u9700\u8981\u627e\u5230\u56de\u590d\u7684\u5185\u5bb9\u3002<\/p>\n<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(msgType)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\"text\":\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\"event\":\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(\"error\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3000\u3000e\uff0c\u5168\u90e8\u4ee3\u7801\u5728\u8fd9\u91cc\uff1a<\/p>\n<pre>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;ToUserNameReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;FromUserNameReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;CreateTimeReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)d*?(?=)\",&nbsp;RegexOptions.Compiled);4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;MsgTypeReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;ContentReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;MsgIdReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)d*?(?=)\",&nbsp;RegexOptions.Compiled);7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;EventReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;EventKeyReg&nbsp;=&nbsp;new&nbsp;Regex(@\"(?)\",&nbsp;RegexOptions.Compiled);<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<pre>&nbsp;1&nbsp;\u3000\u3000\u3000\u3000&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u63a5\u53d7\u5fae\u4fe1\u6d88\u606f\uff0c\u5982\u679c\u9700\u8981\u53cd\u9988\uff0c\u5219\u8c03\u7528\u56de\u590d\u63a5\u53e3\u8fdb\u884c\u7b54\u590d&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u53d1\u9001\u65b9\u5e10\u53f7\uff08\u4e00\u4e2aOpenID\uff09&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606f\u521b\u5efa\u65f6\u95f4&nbsp;\uff08\u6574\u578b\uff09&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;text&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6587\u672c\u6d88\u606f\u5185\u5bb9&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606fid\uff0c64\u4f4d\u6574\u578b10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;successful&nbsp;or&nbsp;not&lt;\/returns&gt;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(\"POST\")]12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(\"Api\")]13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;ReceiveMessage()15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;message&nbsp;=&nbsp;Request.Content.ReadAsStringAsync().Result;17&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;toUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;ToUserNameReg);19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fromUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;FromUserNameReg);20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createTime&nbsp;=&nbsp;GetItemValue(message,&nbsp;CreateTimeReg);21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgType&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgTypeReg);22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;GetItemValue(message,&nbsp;ContentReg);23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgId&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgIdReg);24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventStr&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventReg);25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventKey&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventKeyReg);26&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;logStr&nbsp;=&nbsp;string.Format(\"Message:{8}\n\nToUserName:{0}\nFromUserName:{1}\nCreateTime:{2}\nMsgType:{3}\nContent:{4}\nMsgId:{5}\nEvent:{6}\nEventKey:{7}\",28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toUserName,&nbsp;fromUserName,&nbsp;createTime,&nbsp;msgType,&nbsp;content,&nbsp;msgId,&nbsp;eventStr,&nbsp;eventKey,&nbsp;message);29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.Debug(logStr);30&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(msgType)32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\"text\":34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;returnMessage&nbsp;=&nbsp;Tools.GetCategory(content);\u3000&nbsp;\/\/&nbsp;\u8fd9\u5757\u662f\u83b7\u53d6\u53cd\u9988\u4fe1\u606f\u7684\u65b9\u6cd5\uff0c\u4f60\u7684\u548c\u6211\u7684\u5e94\u8be5\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u8fd9\u5757\u4f60\u5f97\u4fee\u6539\u4e00\u4e0b\u300236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sendMessage&nbsp;=&nbsp;GetSendMessage(fromUserName,&nbsp;returnMessage,&nbsp;toUserName);37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.Debug(\"MsgId:\"&nbsp;+&nbsp;msgId&nbsp;+&nbsp;Environment.NewLine&nbsp;+&nbsp;sendMessage);38&nbsp;39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(sendMessage);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\/\/&nbsp;\u8fd9\u4e2a\u51fd\u6570\u5728\u4e0a\u9762\u5df2\u7ecf\u8d34\u51fa\u6765\u4e86\uff0c\u5728\u8fd9\u5757\u5c31\u4e0d\u5728\u8d34\u4e8640&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\"event\":42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(eventStr&nbsp;==&nbsp;\"subscribe\")\u3000\u3000\u3000\u3000\u3000\u3000\/\/&nbsp;\u5173\u6ce8\u4e8b\u4ef644&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;returnMessage&nbsp;=&nbsp;\"\u6b22\u8fce\u5173\u6ce8**\u8d26\u53f7&nbsp;[\u5fae\u7b11]\";46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sendMessage&nbsp;=&nbsp;GetSendMessage(fromUserName,&nbsp;returnMessage,&nbsp;toUserName);47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(sendMessage);48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(\"error\");50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(\"error\");53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<pre>&nbsp;1&nbsp;\u3000\u3000\u3000\u3000&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u83b7\u53d6\u6d88\u606f\u4f53\u4e2d\u6b63\u5219\u6240\u80fd\u5339\u914d\u5230\u7684\u5185\u5bb9&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606f\u5185\u5bb9&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6b63\u5219&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;\u8fd4\u56de\u6b63\u5219\u5339\u914d\u7684\u6240\u6709\u5185\u5bb9&lt;\/returns&gt;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;true)]&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;GetItemValue(string&nbsp;message,&nbsp;Regex&nbsp;regex)&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(regex.IsMatch(message))11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;regex.Match(message).Value;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;\"\";13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<pre>&nbsp;1&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u53d1\u9001\u88ab\u52a8\u54cd\u5e94\u6d88\u606f&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u63a5\u6536\u65b9\u5e10\u53f7\uff08\u6536\u5230\u7684OpenID\uff09&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u56de\u590d\u7684\u6d88\u606f\u5185\u5bb9\uff08\u6362\u884c\uff1a\u5728content\u4e2d\u80fd\u591f\u6362\u884c\uff0c\u5fae\u4fe1\u5ba2\u6237\u7aef\u5c31\u652f\u6301\u6362\u884c\u663e\u793a\uff09&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606f\u521b\u5efa\u65f6\u95f4&nbsp;\uff08\u6574\u578b\uff09&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;text&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;&lt;\/returns&gt;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(\"POST\")]11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(\"GetSendMessage\")]12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;GetSendMessage(string&nbsp;ToUserName,&nbsp;string&nbsp;Content,&nbsp;string&nbsp;FromUserName&nbsp;=&nbsp;Developer,14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;MsgType&nbsp;=&nbsp;\"text\")15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createTime&nbsp;=&nbsp;Tools.ConvertDateTimeToInt(DateTime.Now);17&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string.Format(@\"&lt;xml&gt;&lt;tousername&gt;&lt;\/tousername&gt;&lt;fromusername&gt;&lt;\/fromusername&gt;&lt;createtime&gt;{2}&lt;\/createtime&gt;&lt;msgtype&gt;&lt;\/msgtype&gt;&lt;content&gt;&lt;\/content&gt;&lt;\/xml&gt;\",&nbsp;ToUserName,&nbsp;FromUserName,&nbsp;createTime,&nbsp;MsgType,&nbsp;Content);20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u3010\u76f8\u5173\u63a8\u8350\u3011<\/p>\n<p>1. <\/p>\n<p>2.&nbsp;<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u4ece\u6e90\u4ee3\u7801\u4e2d\u5e26\u4f60\u89e3\u6790\u5fae\u4fe1\u5f00\u53d1\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>\u3000\u3000\u8fd9\u4e24\u5929\u9879\u76ee\u9700\u8981\u5728\u5fae\u4fe1\u4e0a\u9762\u5f00\u4e00\u4e2a\u63a5\u53e3\uff0c\u5c31\u7814\u7a76\u4e86\u4e00\u4e0b\uff0c\u8fc7\u7a0b\u5f88\u8270\u96be\uff0c\u7ed3\u679c\u5f88\u7406\u60f3\uff0c\u4e0b\u9762\u6211\u5c31\u4ecb\u7ecd\u4e00\u4e0b\u5fae\u4fe1\u5f00\u53d1\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9\u3002 1\uff0c\u8d26\u53f7\u95ee\u9898 \u3000\u3000\/* \u9996\u5148\u8bf4\u7b2c\u4e00\u4e2a\u4f60\u5f97\u9009\u62e9\u516c\u4f17\u5e73\u53f0\uff08\u5f00\u653e\u5e73\u53f0\u8c8c\u4f3c\u662f\u505a\u5e94\u7528\u96c6\u6210\u7684\uff0c\u8fd9\u4e2a\u6ca1\u6709\u4ed4\u7ec6\u7814\u7a76\uff0c\u5982\u679c\u6709\u8c01\u4e86\u89e3\uff0c\u5e0c\u671b\u544a\u8bc9\u6211\u4e00\u58f0\uff09\uff0c\u5728\u516c\u4f17\u5e73\u53f0\u6211\u4eec\u9700\u8981\u6ce8\u518c\u8d26\u53f7\uff0c\u8d26\u53f7\u8fd8\u5206\u4e24\u79cd\uff0c\u4e2a\u4eba\u7c7b\u578b\u548c\u4f01\u4e1a\u7c7b\u578b\uff0c\u5176\u4e2d\u4e2a\u4eba\u7c7b\u578b\u7684\u53ea\u80fd\u7533\u8bf7\u8ba2\u9605\u53f7\uff0c\u800c\u4f01\u4e1a\u7c7b\u578b\u7684\u624d\u53ef\u4ee5\u641e\u5230\u670d\u52a1\u53f7\uff0c\u8ba2\u9605\u53f7\u53ea\u80fd\u624b\u5de5\u6216\u8005\u914d\u7f6e\u4e00\u4e9b\u5173\u952e\u8bcd\u53bb\u505a\u4e8b\u60c5\uff0c\u670d\u52a1\u53f7\u624d\u80fd\u90e8\u7f72\u4e00\u4e9b\u667a\u80fd\u7684\u4e1c\u4e1c\uff0c\u9700\u8981\u9ad8\u7ea7\u5f00\u53d1\u6743\u9650\u53ea\u80fd\u662f\u670d\u52a1\u53f7\uff0c\u6240\u4ee5\u5982\u679c\u4f60\u662f\u4e2a\u4eba\uff0c\u60f3\u8981\u9488\u5bf9\u7528\u6237\u53d1\u8fc7\u6765\u7684\u6d88\u606f\u53bb\u56de\u590d\u4e0d\u540c\u7684\u5185\u5bb9\uff0c\u6d17\u6d17\u7761\u5427\u3002 *\/ \u3000\u3000\u641e\u5f00\u53d1\u7684\u90fd\u77e5\u9053\u4e0a\u9762\u90a3\u6bb5\u8bdd\u7684\u610f\u601d\uff0c\u662f\u7684\uff0c\u6211\u7ed9\u6ce8\u91ca\u4e86\uff0c\u6211\u4eca\u5929\u5728\u767b\u9646\u8ba2\u9605\u53f7\u7684\u65f6\u5019\uff0c\u53d1\u73b0\u8ba2\u9605\u53f7\u4e5f\u6709\u9ad8\u7ea7\u529f\u80fd\u7684\uff0c\u53ef\u80fd\u6211\u90a3\u4e2a\u65f6\u5019\u6ca1\u6709\u901a\u8fc7\u5ba1\u6838\u5427\uff0cOK\uff0c\u4e0d\u59a8\u788d\u4e0b\u9762\u7684\u5206\u4eab\u3002 2\uff0c\u5f00\u53d1\u6a21\u5f0f \u3000\u3000\u5f88\u7b80\u5355\uff0c\u5f53\u4f60\u62ff\u5230\u4f60\u7684\u670d\u52a1\u8d26\u53f7\u7684\u65f6\u5019\uff0c\u4f60\u4f1a\u53d1\u73b0\uff0c\u5728\u529f\u80fd\u4e2d\u6709\u4e2a\u9ad8\u7ea7\u529f\u80fd\uff08\u5728\u8ba2\u9605\u8d26\u53f7\u91cc\u9762\u662f\u6ca1\u6709\u9ad8\u7ea7\u529f\u80fd\u8fd9\u4e2a\u9009\u9879\u7684\uff09\uff0c\u4e4b\u540e\u4f60\u53ef\u4ee5\u9009\u62e9\u5f00\u901a\u54ea\u79cd\u65b9\u5f0f\u3002\u76ee\u524d\u5f00\u53d1\u548c\u7f16\u8f91\u53ea\u80fd\u542f\u52a8\u4e00\u4e2a\u3002 3\uff0c \u3000\u3000\u5fae\u4fe1\u63a5\u53e3\u53ea\u6709\u4e00\u4e2aURL\uff0c\u4efb\u4f55\u6570\u636e\u90fd\u662f\u901a\u8fc7\u8fd9\u4e2aURL\u548c\u4f60\u7684\u670d\u52a1\u5668\u8fdb\u884c\u8fde\u63a5\u7684\uff08GET\u6216\u8005POST\uff09\u90fd\u9700\u8981\u8d70\u8fd9\u4e2a\u63a5\u53e3\uff0c\u4e0b\u9762\u4f1a\u8bf4\u8bf4\u4e24\u4e2a\u7528\u5230\u7684\u5730\u65b9\u3002 4\uff0c\u9a8c\u8bc1\u670d\u52a1\u5668 \u3000\u3000\u5728\u586b\u5199\u4f60\u7684\u670d\u52a1\u5668URL\u4e4b\u540e\uff0c\u5fae\u4fe1\u4f1a\u5e26\u4e0a\u51e0\u4e2a\u53c2\u6570\u53bb\u8bbf\u95ee\u4f60\u7684URL\uff0c\u4f60\u53ea\u9700\u8981\u8fd4\u56de\u7279\u5b9a\u7684\u6570\u636e\u5c31OK\u4e86\uff0c\u5177\u4f53\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u67e5\u770b\u6b64\u94fe\u63a5\uff1ahttp:\/\/mp.weixin.qq.com\/wiki\/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97 \u3000\u3000\u5728\u8fde\u63a5\u4e2d\u6709\u90e8\u5206php\u7684\u4ee3\u7801\u53ef\u4ee5\u53c2\u8003\uff0c\u4e0b\u9762\u6211\u5c06\u6211\u7684\u4ee3\u7801\u8d34\u4e00\u4e0b\uff0c\u5728\u8fd9\u8fb9\u6211\u8d70\u4e86\u5f88\u591a\u5f2f\u8def\uff0c\u6240\u4ee5\u6211\u5c3d\u91cf\u8d34\u7684\u5168\u4e00\u70b9 &nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u9a8c\u8bc1\u5fae\u4fe1\u7b7e\u540d&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5fae\u4fe1\u52a0\u5bc6\u7b7e\u540d\uff0csignature\u7ed3\u5408\u4e86\u5f00\u53d1\u8005\u586b\u5199\u7684token\u53c2\u6570\u548c\u8bf7\u6c42\u4e2d\u7684timestamp\u53c2\u6570\u3001nonce\u53c2\u6570\u3002&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u65f6\u95f4\u6233&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u968f\u673a\u6570&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u968f\u673a\u5b57\u7b26\u4e32&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;\u5f00\u53d1\u8005\u901a\u8fc7\u68c0\u9a8csignature\u5bf9\u8bf7\u6c42\u8fdb\u884c\u6821\u9a8c\uff08\u4e0b\u9762\u6709\u6821\u9a8c\u65b9\u5f0f\uff09\u3002\u82e5\u786e\u8ba4\u6b64\u6b21GET\u8bf7\u6c42\u6765\u81ea\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u8bf7\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u6210\u4e3a\u5f00\u53d1\u8005\u6210\u529f\uff0c\u5426\u5219\u63a5\u5165\u5931\u8d25\u3002&lt;\/returns&gt;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(&#8220;GET&#8221;)]10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(&#8220;Api&#8221;)]11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;CheckSignature(string&nbsp;sigNature,&nbsp;string&nbsp;timestamp,&nbsp;string&nbsp;nonce,&nbsp;string&nbsp;echoStr)13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string.Format(&#8220;SigNature:{0} Timestamp:{1} Nonce:{2} EchoStr:{3}&#8221;,16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigNature,&nbsp;timestamp,&nbsp;nonce,&nbsp;echoStr);17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.Debug(content);\u3000\u3000\u3000\u3000\/\/&nbsp;\u6b64\u5904\u7684log\u4f60\u53ef\u4ee5\u5220\u638918&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;list&nbsp;=&nbsp;new&nbsp;string[]&nbsp;{&nbsp;timestamp,&nbsp;nonce,&nbsp;TOKEN&nbsp;};20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Sort(list);21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpArr&nbsp;=&nbsp;string.Join(&#8220;&#8221;,&nbsp;list);22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpStr&nbsp;=&nbsp;FormsAuthentication.HashPasswordForStoringInConfigFile(tmpArr,&nbsp;&#8220;SHA1&#8221;).ToLower();23&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmpStr&nbsp;==&nbsp;sigNature&nbsp;&amp;amp;&amp;amp;&nbsp;!string.IsNullOrEmpty(echoStr))\u3000\u3000\u3000\u3000\u3000\/\/\u6839\u636e\u5fae\u4fe1\u7684\u9a8c\u8bc1\u89c4\u5219\u505a\u5224\u65ad25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(echoStr);26&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(&#8220;error&#8221;);28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000\u4e4b\u6240\u4ee5\u5199\u4e86GetReturn\u8fd9\u4e2a\u662f\u56e0\u4e3a\u7ed9\u6211\u7684\u7ed3\u679c\u5c01\u88c5\u4e86\uff0c\u6bcf\u6b21\u6211\u8fd4\u56de\u4e00\u4e2a\u5b57\u7b26\u4e32\u7684\u65f6\u5019\u4ed6\u90fd\u4f1a\u5728\u5916\u5c42\u6dfb\u52a0\u4e00\u5bf9\u5f15\u53f7\uff0c\u5fae\u4fe1\u8fd8\u50bb\u4e0d\u6123\u767b\u7684\u4e0d\u8ba4\u8bc6\u3002\u3002\u3002\u3002\u8fd9\u4e2a\u51fd\u6570\u4e3b\u8981\u5c31\u662f\u7ed9\u6211\u53bb\u9664MVC\u5c01\u88c5\u7684 1&nbsp;\u3000\u3000\u3000\u3000&nbsp;public&nbsp;static&nbsp;HttpResponseMessage&nbsp;GetReturn(string&nbsp;message)2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;HttpResponseMessage4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;new&nbsp;StringContent(message,&nbsp;Encoding.UTF8,&nbsp;&#8220;text\/html&#8221;)6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000\u4e0a\u9762\u7684CheckSignature\u662f\u4e00\u4e2aGET\u7684\u63a5\u53e3\uff0c\u4e3b\u8981\u5c31\u662f\u9a8c\u8bc1\u5fae\u4fe1\u670d\u52a1\u7684\uff0c\u5f53\u7136\uff0c\u4f60\u4ed4\u7ec6\u7814\u7a76\u4e0b\u5fae\u4fe1\u8bf4\u7684\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u5f53\u4f60\u6536\u5230echoStr\u7684\u65f6\u5019\uff0c\u76f4\u63a5return\u5176\u5b9e\u5c31OK\u4e86\uff0c\u4e0d\u5fc5\u591a\u51fa\u9a8c\u8bc1\u7684\u6b65\u9aa4\u3002 5\uff0c\u6d88\u606f\u63a5\u6536\u63a5\u53e3 \u3000\u3000\u6211\u53ea\u5173\u6ce8\u4e86\u4e00\u4e2a\u529f\u80fd\uff0c\u5f53\u7528\u6237\u7684\u65f6\u5019\u6211\u8981\u56de\u590d\u7528\u6237\u6d88\u606f\uff0c\u800c\u4e14\u53ea\u5173\u6ce8\u6587\u672c\u6d88\u606f\u5c31OK\u4e86\uff08\u5176\u5b9e\u522b\u7684\u7c7b\u578b\u7684\u6d88\u606f\u539f\u7406\u90fd\u5dee\u4e0d\u591a\uff09\u3002 \u3000\u3000\u6211\u4eec\u9700\u8981\u6ce8\u610f\u8fd9\u8fb9\u7684\u51e0\u70b9\uff1a \u3000\u3000a\uff0c\u6b64\u63a5\u53e3\u7684ActionName\u548c\u4e0a\u9762\u9a8c\u8bc1\u7684\u63a5\u53e3\u662f\u4e00\u6837\u7684\uff0c\u8fd9\u6837\uff0c\u4ed6\u4eec\u5728\u5916\u9762\u8bbf\u95ee\u5c31\u662f\u76f8\u540c\u7684URL\uff0c\u53ea\u662f\u8bbf\u95ee\u7684Method\u4e0d\u540c\u7f62\u4e86\u3002 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(&#8220;POST&#8221;)]2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(&#8220;Api&#8221;)]3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;ReceiveMessage() \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000b\uff0c\u8fd9\u79cd\u83b7\u53d6\u6d88\u606f\u5185\u5bb9\u7684\u65b9\u6cd5\u6211\u4e5f\u662f\u7814\u7a76\u4e86\u597d\u4e45\u624d\u627e\u5230\u7684\uff0c\u8d39\u6b7b\u52b2\u4e86\u3002 1&nbsp;\u3000\u3000var&nbsp;message&nbsp;=&nbsp;Request.Content.ReadAsStringAsync().Result; \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000c\uff0c\u5728\u8fd9\u4e2a\u63a5\u53e3\u4ed6POST\u8fc7\u6765\u5f88\u591a\u7684\uff0c\u6211\u90fd\u7528\u6b63\u5219\u7ed9\u4ed6\u641e\u5230\u4e86 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;toUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;ToUserNameReg);2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fromUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;FromUserNameReg);3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createTime&nbsp;=&nbsp;GetItemValue(message,&nbsp;CreateTimeReg);4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgType&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgTypeReg);5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;GetItemValue(message,&nbsp;ContentReg);6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgId&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgIdReg);7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventStr&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventReg);8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventKey&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventKeyReg); \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000d\uff0c\u6211\u53ea\u5173\u6ce8\u5176\u4e2d\u4e24\u79cd\u7c7b\u578b\u7684\uff1aevent and text\uff0cevent\u503c\u5f97\u662f\u5173\u6ce8\u548c\u89e3\u9664\u5173\u6ce8\uff0c\u5728\u5173\u6ce8\u7684\u65f6\u5019\u8981\u8868\u793a\u611f\u8c22\u4e0d\u662f\uff1b\u53d1\u8fc7\u6765\u7684text\uff0c\u6211\u9700\u8981\u627e\u5230\u56de\u590d\u7684\u5185\u5bb9\u3002 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(msgType) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#8220;text&#8221;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#8220;event&#8221;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tools.GetReturn(&#8220;error&#8221;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} \u767b\u5f55\u540e\u590d\u5236 \u3000\u3000e\uff0c\u5168\u90e8\u4ee3\u7801\u5728\u8fd9\u91cc\uff1a 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;ToUserNameReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled);2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;FromUserNameReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled);3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;CreateTimeReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)d*?(?=)&#8221;,&nbsp;RegexOptions.Compiled);4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;MsgTypeReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled);5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;ContentReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled);6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;MsgIdReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)d*?(?=)&#8221;,&nbsp;RegexOptions.Compiled);7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;EventReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled);8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;EventKeyReg&nbsp;=&nbsp;new&nbsp;Regex(@&#8221;(?)&#8221;,&nbsp;RegexOptions.Compiled); \u767b\u5f55\u540e\u590d\u5236 &nbsp;1&nbsp;\u3000\u3000\u3000\u3000&nbsp;\/\/\/&nbsp;&lt;summary&gt;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u63a5\u53d7\u5fae\u4fe1\u6d88\u606f\uff0c\u5982\u679c\u9700\u8981\u53cd\u9988\uff0c\u5219\u8c03\u7528\u56de\u590d\u63a5\u53e3\u8fdb\u884c\u7b54\u590d&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u53d1\u9001\u65b9\u5e10\u53f7\uff08\u4e00\u4e2aOpenID\uff09&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606f\u521b\u5efa\u65f6\u95f4&nbsp;\uff08\u6574\u578b\uff09&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;text&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6587\u672c\u6d88\u606f\u5185\u5bb9&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u6d88\u606fid\uff0c64\u4f4d\u6574\u578b10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;successful&nbsp;or&nbsp;not&lt;\/returns&gt;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.AcceptVerbs(&#8220;POST&#8221;)]12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[System.Web.Http.ActionName(&#8220;Api&#8221;)]13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ApiExplorerSettings(IgnoreApi&nbsp;=&nbsp;false)]14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;HttpResponseMessage&nbsp;ReceiveMessage()15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;message&nbsp;=&nbsp;Request.Content.ReadAsStringAsync().Result;17&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;toUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;ToUserNameReg);19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fromUserName&nbsp;=&nbsp;GetItemValue(message,&nbsp;FromUserNameReg);20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;createTime&nbsp;=&nbsp;GetItemValue(message,&nbsp;CreateTimeReg);21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgType&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgTypeReg);22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;GetItemValue(message,&nbsp;ContentReg);23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msgId&nbsp;=&nbsp;GetItemValue(message,&nbsp;MsgIdReg);24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventStr&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventReg);25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eventKey&nbsp;=&nbsp;GetItemValue(message,&nbsp;EventKeyReg);26&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;logStr&nbsp;=&nbsp;string.Format(&#8220;Message:{8} ToUserName:{0} FromUserName:{1} CreateTime:{2} MsgType:{3} Content:{4} MsgId:{5} [&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-29984","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29984","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=29984"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29984\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}