{"id":29235,"date":"2024-11-25T17:52:43","date_gmt":"2024-11-25T09:52:43","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29235\/"},"modified":"2024-11-25T17:52:43","modified_gmt":"2024-11-25T09:52:43","slug":"nodejs%e5%bc%80%e5%8f%91%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%8f%b7%e5%be%ae%e4%bf%a1%e4%ba%8b%e4%bb%b6%e4%ba%a4%e4%ba%92%e5%ae%9e%e4%be%8b%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29235\/","title":{"rendered":"NodeJs\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u4ee3\u7801"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u4f7f\u7528nodejs \u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b<\/p>\n<p>\u5fae\u4fe1\u516c\u4f17\u53f7\u6709\u4e2a\u89c4\u5219\uff0c\u4e00\u65e6\u5f00\u542f\u4e86\u5f00\u53d1\u8005\u6a21\u5f0f\uff0c\u5176\u4ed6\u7684\u5e38\u89c4\u529f\u80fd\u5c31\u90fd\u5fc5\u987b\u901a\u8fc7\u8c03\u7528\u5b8c\u6210\u3002\u6bd4\u5982\u8bf4\u529f\u80fd\uff0c\u5fc5\u987b\u901a\u8fc7\u53d1\u9001\u7684\u65b9\u5f0f\u751f\u6210\u3002\u672c\u7ae0\u5c31\u901a\u8fc7\u5173\u6ce8\u5230\u53d6\u6d88\u5173\u6ce8\u7684\u6574\u4e2a\u8fc7\u7a0b\u6765\u8c08\u4e00\u8c08nodejs\u662f\u600e\u4e48\u6837\u4e0e\u5fae\u4fe1\u4ea4\u4e92\u7684\u3002\u8fd9\u4e9b\u529f\u80fd\u7684\u5165\u53e3\u5c31\u662f\u4f60\u5728\u6d4b\u8bd5\u516c\u4f17\u53f7\u91cc\u9762\u586b\u5199\u7684URL\uff08\u4ee5\u4e0b\u7528\/login\/wechat\u4ee3\u66ff\uff09\u3002<\/p>\n<p><span style=\"color: #0000ff\"><strong>\u4e8b\u4ef6\u4ea4\u4e92<\/strong><\/span><\/p>\n<p>\u626b\u7801\u5173\u6ce8\u5fae\u4fe1\u516c\u4f17\u53f7\u540e\uff0c\u5fae\u4fe1\u4f1a\u8c03\u7528\u4f60\u7684\u63a5\u53e3\/login\/wechat\uff0c\u5e76\u4e14\u9644\u5e26\u4e00\u6bb5\u4fe1\u606f\uff0c\u9996\u5148\u4f60\u9700\u8981\u83b7\u53d6\u4e00\u4e9b\u7b7e\u540d\uff0c\u901a\u8fc7\u52a0\u5bc6\u3001\u6392\u5e8f\u6bd4\u5bf9\u662f\u5426\u4e0e\u4f60\u586b\u5199\u7684TOKEN\u4e00\u81f4\uff0c\u5982\u679c\u4e00\u81f4\u5219\u8fdb\u884cxml\u7684\u89e3\u6790\u3002node\u89e3\u6790xml\u65f6\u5fc5\u987b\u5148\u5f15\u7528\u6a21\u5757\u3002\u6240\u4ee5\uff0c\u5148\u5f15\u5165xml\u89e3\u6790\u6a21\u5757<\/p>\n<pre>\/\/xml\u89e3\u6790\u6a21\u5757\r\nvar&nbsp;XMLJS&nbsp;=&nbsp;require('xml2js');\r\n\/\/\u89e3\u6790\uff0c\u5c06xml\u89e3\u6790\u4e3ajson\r\nvar&nbsp;parser&nbsp;=&nbsp;new&nbsp;XMLJS.Parser();\r\n\/\/\u91cd\u7ec4\uff0c\u5c06json\u91cd\u7ec4\u4e3axml\r\nvar&nbsp;builder&nbsp;=&nbsp;new&nbsp;XMLJS.Builder();<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u901a\u8fc7req\u7684\u76d1\u542cdata\uff0c\u6765\u83b7\u53d6\u5fae\u4fe1\u53d1\u9001\u8fc7\u6765\u7684xml\u5305\u3002\u4ee5\u4e0b\u662f\u67d0\u4e2a\u65b0\u7528\u6237\u5173\u6ce8\u516c\u4f17\u53f7\u540e\u5fae\u4fe1\u5411\u4f60\u7684\u540e\u53f0\u63a5\u53e3\uff08\u4e0a\u4e00\u7bc7\u4e2d\u63d0\u5230\u7684\/yourapi\uff09\u53d1\u9001\u7684xml\u5305\u6570\u636e\uff0c\u7ecf\u8fc7\u89e3\u6790\u540e\uff0c\u4ed6\u7684\u7ed3\u6784\u5982\u4e0b:<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/013\/14c58013463de32cfc2ecef21bfee1e5-0.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"NodeJs\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u4ee3\u7801\u63d2\u56fe\" alt=\"NodeJs\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u4ee3\u7801\u63d2\u56fe\" \/><\/p>\n<p>tousername\uff1a\u6536\u4fe1\u4eba\u3010\u6b64\u5904\u4e3a\u516c\u4f17\u5fae\u4fe1\u53f7\u3011<\/p>\n<p>fromusername\uff1a\u53d1\u4fe1\u4eba\u3010\u6b64\u5904\u4e3a\u7528\u6237openid\u3011<\/p>\n<p>createTime\uff1a\u53d1\u9001\u65f6\u95f4<\/p>\n<p>msgtype\uff1a\u6d88\u606f\u7c7b\u578b\u3010event\uff08\u54cd\u5e94\u4e8b\u4ef6\uff09\u3001text\uff08\u63a8\u9001\u6d88\u606f\uff09\u3001image\uff08\u63a8\u9001\u56fe\u6587\u6d88\u606f\uff09\u7b49\u3011<\/p>\n<p>event\uff1a\u6d88\u606f\u540d\u79f0\u3010\u6b64\u5904\u4e3a\u5173\u6ce8\u3011<\/p>\n<p>eventkey\uff1a\u81ea\u5b9a\u4e49\u7684key\uff0c\u5728\u8bbe\u7f6e\u7f51\u9875\u65f6\u53ef\u4ee5\u81ea\u5b9a\u4e49\u540e\u6587\u4e2d\u4f1a\u8bb2\u5230<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5f53\u4e00\u4e2a\u7528\u6237\u5173\u6ce8\u540e\u5fae\u4fe1\u5f80\u4f60\u63a5\u53e3\u53d1\u9001\u7684\u6570\u636e\u5305\u3002\u4e0a\u9762\u5bf9\u6211\u4eec\u6709\u7528\u7684\u662ffromusername\uff0c\u5373\u5173\u6ce8\u4eba\u7684openid\uff0c\u6211\u4eec\u5728\u5173\u6ce8\u65f6\u83b7\u53d6\u4e86\u7528\u6237\u7684\u8be5openid\u540e\u53ef\u4ee5\u901a\u8fc7\u5fae\u4fe1\u63d0\u4f9b\u7684\u7279\u5b9a\u63a5\u53e3\uff08https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&amp;openid=OPENID&amp;lang=zh_CN\uff09\u83b7\u53d6\u7528\u6237\u7684\u5934\u50cf\uff0c\u6027\u522b\uff0c\u6635\u79f0\u7b49\u4fe1\u606f\uff0c\u4e3a\u4f60\u7684app\u5efa\u7acb\u4e00\u4e2a\u53ef\u9760\u7684\u8d44\u6599\u5e93\u3002<\/p>\n<p><span style=\"color: #0000ff\"><strong>\u4ee3\u7801\u5b9e\u73b0<\/strong><\/span><\/p>\n<pre>\/\/\u5fae\u4fe1\u4e8b\u4ef6\u63a8\u9001\u7684\u5165\u53e3\r\napp.post('\/yourapi',&nbsp;function(req,&nbsp;res,&nbsp;next)&nbsp;{\r\n\/\/\u83b7\u53d6\u53c2\u6570\r\nvar&nbsp;query&nbsp;=&nbsp;req.query;&nbsp;\r\n\/\/\u7b7e\u540d\r\nvar&nbsp;signature&nbsp;=&nbsp;query.signature;&nbsp;\r\n\/\/\u8f93\u51fa\u7684\u5b57\u7b26\uff0c\u4f60\u586b\u5199\u7684TOKEN&nbsp;\r\nvar&nbsp;echostr&nbsp;=&nbsp;query.echostr;&nbsp;\r\n\/\/\u65f6\u95f4\u6233\r\nvar&nbsp;timestamp&nbsp;=&nbsp;query['timestamp'];&nbsp;\r\n\/\/\u968f\u673a\u5b57\u7b26\u4e32\r\nvar&nbsp;nonce&nbsp;=&nbsp;query.nonce;&nbsp;\r\nvar&nbsp;oriArray&nbsp;=&nbsp;new&nbsp;Array();&nbsp;\r\noriArray[]&nbsp;=&nbsp;nonce;&nbsp;\r\noriArray[]&nbsp;=&nbsp;timestamp;&nbsp;\r\noriArray[]&nbsp;=&nbsp;appConfig.token;\r\n\/\/\u6392\u5e8f\u53c2\u6570\r\noriArray.sort();&nbsp;\r\nvar&nbsp;original&nbsp;=&nbsp;oriArray[]+oriArray[]+oriArray[];&nbsp;\r\n\/\/\u52a0\u5bc6\r\nvar&nbsp;scyptoString&nbsp;=&nbsp;sha(original);&nbsp;\r\n\/\/\u5224\u65ad\u662f\u5426\u4e0e\u4f60\u586b\u5199TOKEN\u76f8\u7b49\r\nif&nbsp;(signature&nbsp;==&nbsp;scyptoString)&nbsp;{\r\n\/\/\u83b7\u53d6xml\u6570\u636e\r\nreq.on(\"data\",&nbsp;function(data)&nbsp;{\r\n\/\/\u5c06xml\u89e3\u6790\r\nparser.parseString(data.toString(),&nbsp;function(err,&nbsp;result)&nbsp;{\r\nvar&nbsp;body&nbsp;=&nbsp;result.xml;\r\nvar&nbsp;messageType&nbsp;=&nbsp;body.MsgType[];\r\n\/\/\u7528\u6237\u70b9\u51fb\u83dc\u5355\u54cd\u5e94\u4e8b\u4ef6\r\nif(messageType&nbsp;===&nbsp;'event')&nbsp;{\r\nvar&nbsp;eventName&nbsp;=&nbsp;body.Event[];\r\n(EventFunction[eventName]||function(){})(body,&nbsp;req,&nbsp;res);\r\n\/\/\u81ea\u52a8\u56de\u590d\u6d88\u606f\r\n}else&nbsp;if(messageType&nbsp;===&nbsp;'text')&nbsp;{\r\nEventFunction.responseNews(body,&nbsp;res);\r\n\/\/\u7b2c\u4e00\u6b21\u586b\u5199URL\u65f6\u786e\u8ba4\u63a5\u53e3\u662f\u5426\u6709\u6548\r\n}else&nbsp;{\r\nres.send(echostr);\r\n}\r\n});\r\n});\r\n}&nbsp;else&nbsp;{&nbsp;\r\n\/\/\u8ba4\u8bc1\u5931\u8d25\uff0c\u975e\u6cd5\u64cd\u4f5c\r\nres.send(\"Bad&nbsp;Token!\");&nbsp;\r\n}\r\n});\r\n\/\/\u5fae\u4fe1\u5ba2\u6237\u7aef\u5404\u7c7b\u56de\u8c03\u7528\u63a5\u53e3\r\nvar&nbsp;EventFunction&nbsp;=&nbsp;{\r\n\/\/\u5173\u6ce8\r\nsubscribe:&nbsp;function(result,&nbsp;req,&nbsp;res)&nbsp;{\r\n\/\/\u5b58\u5165openid&nbsp;\u901a\u8fc7\u5fae\u4fe1\u7684\u63a5\u53e3\u83b7\u53d6\u7528\u6237\u7684\u4fe1\u606f\u540c\u65f6\u5b58\u5165\u6570\u636e\u5e93\u3002\r\n},\r\n\/\/\u6ce8\u9500\r\nunsubscribe:&nbsp;function(openid,&nbsp;req,&nbsp;res)&nbsp;{\r\n\/\/\u5220\u9664\u5bf9\u5e94id\r\n},\r\n\/\/\u6253\u5f00\u67d0\u4e2a\u7f51\u9875\r\nVIEW:&nbsp;function()&nbsp;{\r\n\/\/\u6839\u636e\u9700\u6c42\uff0c\u5904\u7406\u4e0d\u540c\u7684\u4e1a\u52a1\r\n},\r\n\/\/\u81ea\u52a8\u56de\u590d\r\nresponseNews:&nbsp;function(body,&nbsp;res)&nbsp;{\r\n\/\/\u7ec4\u88c5\u5fae\u4fe1\u9700\u8981\u7684json\r\nvar&nbsp;xml&nbsp;=&nbsp;{xml:&nbsp;{\r\nToUserName:&nbsp;body.FromUserName,\r\nFromUserName:&nbsp;body.ToUserName,\r\nCreateTime:&nbsp;+&nbsp;new&nbsp;Date(),\r\nMsgType:&nbsp;'text',\r\nContent:&nbsp;'\u7f16\u8f91@+\u60a8\u60f3\u8bf4\u7684\u8bdd\uff0c\u6211\u4eec\u53ef\u4ee5\u6536\u5230'\r\n}};\r\nvar&nbsp;reciviMessage&nbsp;=&nbsp;body.Content[]\r\nif(\/^@.*\/.test(reciviMessage))&nbsp;{\r\nxml.xml.Content&nbsp;=&nbsp;'\u5df2\u7ecf\u6536\u5230\u60a8\u7684\u5efa\u8bae\uff0c\u4f1a\u53ca\u65f6\u5904\u7406\uff01'\r\n}&lt;br&gt;\/\/\u5c06json\u8f6c\u4e3axml\r\nxml&nbsp;=&nbsp;builder.buildObject(xml);&lt;br&gt;\/\/\u53d1\u9001\u7ed9\u5fae\u4fe1\r\nres.send(xml);\r\n}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u6b64\u5904\uff0c\u9002\u5408\u91c7\u7528JS\u4e2d\u7684\uff0c\u5728subscribe\u65b9\u6cd5\u91cc\u9762\u5199\u4e0a\u4f60\u81ea\u5df1\u7684\u4e1a\u52a1\uff0c\u901a\u8fc7\u53d1\u9001\u5e26openid\u53c2\u6570\u7684\u8bf7\u6c42\uff0c\u53ef\u4ee5\u5728\u7528\u6237\u5173\u6ce8\u5fae\u4fe1\u53f7\u7684\u65f6\u5019\u5c06\u5176\u51e0\u672c\u8d44\u6599\u5b58\u5165\u6570\u636e\u5e93\uff0c\u5e76\u4e14\u5efa\u7acb\u4f1a\u8bdd\u3002\u8fd9\u6837\u5728\u7528\u6237\u63a5\u4e0b\u6765\u6253\u5f00\u4f60\u7684\u7f51\u9875\u7684\u65f6\u5019\u5c31\u65e0\u9700\u518d\u6b21\u8ba4\u8bc1\uff0c\u53ea\u9700\u8981\u6bd4\u5bf9openid\u7136\u540e\u67e5\u8be2\u6570\u636e\u5e93\u5c31\u884c\u4e86\u3002<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fNodeJs\u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u4ee3\u7801\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>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u4f7f\u7528nodejs \u5f00\u53d1\u5fae\u4fe1\u516c\u4f17\u53f7\u5fae\u4fe1\u4e8b\u4ef6\u4ea4\u4e92\u5b9e\u4f8b\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b \u5fae\u4fe1\u516c\u4f17\u53f7\u6709\u4e2a\u89c4\u5219\uff0c\u4e00\u65e6\u5f00\u542f\u4e86\u5f00\u53d1\u8005\u6a21\u5f0f\uff0c\u5176\u4ed6\u7684\u5e38\u89c4\u529f\u80fd\u5c31\u90fd\u5fc5\u987b\u901a\u8fc7\u8c03\u7528\u5b8c\u6210\u3002\u6bd4\u5982\u8bf4\u529f\u80fd\uff0c\u5fc5\u987b\u901a\u8fc7\u53d1\u9001\u7684\u65b9\u5f0f\u751f\u6210\u3002\u672c\u7ae0\u5c31\u901a\u8fc7\u5173\u6ce8\u5230\u53d6\u6d88\u5173\u6ce8\u7684\u6574\u4e2a\u8fc7\u7a0b\u6765\u8c08\u4e00\u8c08nodejs\u662f\u600e\u4e48\u6837\u4e0e\u5fae\u4fe1\u4ea4\u4e92\u7684\u3002\u8fd9\u4e9b\u529f\u80fd\u7684\u5165\u53e3\u5c31\u662f\u4f60\u5728\u6d4b\u8bd5\u516c\u4f17\u53f7\u91cc\u9762\u586b\u5199\u7684URL\uff08\u4ee5\u4e0b\u7528\/login\/wechat\u4ee3\u66ff\uff09\u3002 \u4e8b\u4ef6\u4ea4\u4e92 \u626b\u7801\u5173\u6ce8\u5fae\u4fe1\u516c\u4f17\u53f7\u540e\uff0c\u5fae\u4fe1\u4f1a\u8c03\u7528\u4f60\u7684\u63a5\u53e3\/login\/wechat\uff0c\u5e76\u4e14\u9644\u5e26\u4e00\u6bb5\u4fe1\u606f\uff0c\u9996\u5148\u4f60\u9700\u8981\u83b7\u53d6\u4e00\u4e9b\u7b7e\u540d\uff0c\u901a\u8fc7\u52a0\u5bc6\u3001\u6392\u5e8f\u6bd4\u5bf9\u662f\u5426\u4e0e\u4f60\u586b\u5199\u7684TOKEN\u4e00\u81f4\uff0c\u5982\u679c\u4e00\u81f4\u5219\u8fdb\u884cxml\u7684\u89e3\u6790\u3002node\u89e3\u6790xml\u65f6\u5fc5\u987b\u5148\u5f15\u7528\u6a21\u5757\u3002\u6240\u4ee5\uff0c\u5148\u5f15\u5165xml\u89e3\u6790\u6a21\u5757 \/\/xml\u89e3\u6790\u6a21\u5757 var&nbsp;XMLJS&nbsp;=&nbsp;require(&#8216;xml2js&#8217;); \/\/\u89e3\u6790\uff0c\u5c06xml\u89e3\u6790\u4e3ajson var&nbsp;parser&nbsp;=&nbsp;new&nbsp;XMLJS.Parser(); \/\/\u91cd\u7ec4\uff0c\u5c06json\u91cd\u7ec4\u4e3axml var&nbsp;builder&nbsp;=&nbsp;new&nbsp;XMLJS.Builder(); \u767b\u5f55\u540e\u590d\u5236 \u901a\u8fc7req\u7684\u76d1\u542cdata\uff0c\u6765\u83b7\u53d6\u5fae\u4fe1\u53d1\u9001\u8fc7\u6765\u7684xml\u5305\u3002\u4ee5\u4e0b\u662f\u67d0\u4e2a\u65b0\u7528\u6237\u5173\u6ce8\u516c\u4f17\u53f7\u540e\u5fae\u4fe1\u5411\u4f60\u7684\u540e\u53f0\u63a5\u53e3\uff08\u4e0a\u4e00\u7bc7\u4e2d\u63d0\u5230\u7684\/yourapi\uff09\u53d1\u9001\u7684xml\u5305\u6570\u636e\uff0c\u7ecf\u8fc7\u89e3\u6790\u540e\uff0c\u4ed6\u7684\u7ed3\u6784\u5982\u4e0b: tousername\uff1a\u6536\u4fe1\u4eba\u3010\u6b64\u5904\u4e3a\u516c\u4f17\u5fae\u4fe1\u53f7\u3011 fromusername\uff1a\u53d1\u4fe1\u4eba\u3010\u6b64\u5904\u4e3a\u7528\u6237openid\u3011 createTime\uff1a\u53d1\u9001\u65f6\u95f4 msgtype\uff1a\u6d88\u606f\u7c7b\u578b\u3010event\uff08\u54cd\u5e94\u4e8b\u4ef6\uff09\u3001text\uff08\u63a8\u9001\u6d88\u606f\uff09\u3001image\uff08\u63a8\u9001\u56fe\u6587\u6d88\u606f\uff09\u7b49\u3011 event\uff1a\u6d88\u606f\u540d\u79f0\u3010\u6b64\u5904\u4e3a\u5173\u6ce8\u3011 eventkey\uff1a\u81ea\u5b9a\u4e49\u7684key\uff0c\u5728\u8bbe\u7f6e\u7f51\u9875\u65f6\u53ef\u4ee5\u81ea\u5b9a\u4e49\u540e\u6587\u4e2d\u4f1a\u8bb2\u5230 \u4ee5\u4e0a\u5c31\u662f\u5f53\u4e00\u4e2a\u7528\u6237\u5173\u6ce8\u540e\u5fae\u4fe1\u5f80\u4f60\u63a5\u53e3\u53d1\u9001\u7684\u6570\u636e\u5305\u3002\u4e0a\u9762\u5bf9\u6211\u4eec\u6709\u7528\u7684\u662ffromusername\uff0c\u5373\u5173\u6ce8\u4eba\u7684openid\uff0c\u6211\u4eec\u5728\u5173\u6ce8\u65f6\u83b7\u53d6\u4e86\u7528\u6237\u7684\u8be5openid\u540e\u53ef\u4ee5\u901a\u8fc7\u5fae\u4fe1\u63d0\u4f9b\u7684\u7279\u5b9a\u63a5\u53e3\uff08https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&amp;openid=OPENID&amp;lang=zh_CN\uff09\u83b7\u53d6\u7528\u6237\u7684\u5934\u50cf\uff0c\u6027\u522b\uff0c\u6635\u79f0\u7b49\u4fe1\u606f\uff0c\u4e3a\u4f60\u7684app\u5efa\u7acb\u4e00\u4e2a\u53ef\u9760\u7684\u8d44\u6599\u5e93\u3002 \u4ee3\u7801\u5b9e\u73b0 \/\/\u5fae\u4fe1\u4e8b\u4ef6\u63a8\u9001\u7684\u5165\u53e3 app.post(&#8216;\/yourapi&#8217;,&nbsp;function(req,&nbsp;res,&nbsp;next)&nbsp;{ \/\/\u83b7\u53d6\u53c2\u6570 var&nbsp;query&nbsp;=&nbsp;req.query;&nbsp; \/\/\u7b7e\u540d var&nbsp;signature&nbsp;=&nbsp;query.signature;&nbsp; \/\/\u8f93\u51fa\u7684\u5b57\u7b26\uff0c\u4f60\u586b\u5199\u7684TOKEN&nbsp; var&nbsp;echostr&nbsp;=&nbsp;query.echostr;&nbsp; \/\/\u65f6\u95f4\u6233 var&nbsp;timestamp&nbsp;=&nbsp;query[&#8216;timestamp&#8217;];&nbsp; \/\/\u968f\u673a\u5b57\u7b26\u4e32 var&nbsp;nonce&nbsp;=&nbsp;query.nonce;&nbsp; var&nbsp;oriArray&nbsp;=&nbsp;new&nbsp;Array();&nbsp; oriArray[]&nbsp;=&nbsp;nonce;&nbsp; oriArray[]&nbsp;=&nbsp;timestamp;&nbsp; oriArray[]&nbsp;=&nbsp;appConfig.token; \/\/\u6392\u5e8f\u53c2\u6570 oriArray.sort();&nbsp; var&nbsp;original&nbsp;=&nbsp;oriArray[]+oriArray[]+oriArray[];&nbsp; \/\/\u52a0\u5bc6 var&nbsp;scyptoString&nbsp;=&nbsp;sha(original);&nbsp; \/\/\u5224\u65ad\u662f\u5426\u4e0e\u4f60\u586b\u5199TOKEN\u76f8\u7b49 if&nbsp;(signature&nbsp;==&nbsp;scyptoString)&nbsp;{ \/\/\u83b7\u53d6xml\u6570\u636e req.on(&#8220;data&#8221;,&nbsp;function(data)&nbsp;{ \/\/\u5c06xml\u89e3\u6790 parser.parseString(data.toString(),&nbsp;function(err,&nbsp;result)&nbsp;{ var&nbsp;body&nbsp;=&nbsp;result.xml; var&nbsp;messageType&nbsp;=&nbsp;body.MsgType[]; \/\/\u7528\u6237\u70b9\u51fb\u83dc\u5355\u54cd\u5e94\u4e8b\u4ef6 if(messageType&nbsp;===&nbsp;&#8216;event&#8217;)&nbsp;{ var&nbsp;eventName&nbsp;=&nbsp;body.Event[]; (EventFunction[eventName]||function(){})(body,&nbsp;req,&nbsp;res); \/\/\u81ea\u52a8\u56de\u590d\u6d88\u606f [&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-29235","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29235","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=29235"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29235\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}