{"id":28709,"date":"2024-11-25T11:44:04","date_gmt":"2024-11-25T03:44:04","guid":{"rendered":"https:\/\/fwq.ai\/blog\/28709\/"},"modified":"2024-11-25T11:44:04","modified_gmt":"2024-11-25T03:44:04","slug":"%e5%be%ae%e4%bf%a1%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e6%80%bb%e7%bb%93","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/28709\/","title":{"rendered":"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3"},"content":{"rendered":"<p>\u3000\u3000\u4e0a\u4e00\u7bc7\u300a\u5fae\u4fe1\u5f00\u53d1\u2014\u5fae\u4fe1\u5f00\u53d1\u73af\u5883\u642d\u5efa\u300b\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u4e86\u5fae\u4fe1\u5f00\u53d1\u7684\u51c6\u5907\u5de5\u4f5c\uff0c\u51c6\u5907\u5de5\u4f5c\u5b8c\u6210\u4e4b\u540e\uff0c\u5c31\u8981\u5f00\u59cb\u6b65\u5165\u6b63\u9898\u4e86\u3002<\/p>\n<h2>\u4e00\u3001\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u7684\u57fa\u672c\u539f\u7406<\/h2>\n<p>\u3000\u3000\u5728\u5f00\u59cb\u505a\u4e4b\u524d\uff0c\u5148\u7b80\u5355\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u7684\u57fa\u672c\u539f\u7406\u3002<\/p>\n<p>\u3000\u3000\u5fae\u4fe1\u670d\u52a1\u5668\u5c31\u76f8\u5f53\u4e8e\u4e00\u4e2a\u8f6c\u53d1\u670d\u52a1\u5668\uff0c\u7ec8\u7aef\uff08\u624b\u673a\u3001Pad\u7b49\uff09\u53d1\u8d77\u8bf7\u6c42\u81f3\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u7136\u540e\u5c06\u8bf7\u6c42\u8f6c\u53d1\u7ed9\u6211\u4eec\u7684\u5e94\u7528\u670d\u52a1\u5668\u3002\u5e94\u7528\u670d\u52a1\u5668\u5904\u7406\u5b8c\u6bd5\u540e\uff0c\u5c06\u54cd\u5e94\u6570\u636e\u56de\u53d1\u7ed9\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u518d\u5c06\u5177\u4f53\u54cd\u5e94\u4fe1\u606f\u56de\u590d\u5230\u5fae\u4fe1App\u7ec8\u7aef\u3002<\/p>\n<p style=\"text-align:left\">\u3000\u3000\u901a\u4fe1\u534f\u8bae\u4e3a\uff1aHTTP<\/p>\n<p style=\"text-align:left\">\u3000\u3000\u6570\u636e\u4f20\u8f93\u683c\u5f0f\u4e3a\uff1aXML<\/p>\n<p>\u3000\u3000\u5177\u4f53\u7684\u6d41\u7a0b\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n<p>\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/208\/124\/921\/1488849420304925.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe\" \/><\/p>\n<p>\u3000\u3000\u6765\u4e00\u5f20\u66f4\u52a0\u76f4\u89c2\u7684\u56fe\u5427:<\/p>\n<p>\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/849\/889\/318\/1488849434340854.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe1\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe1\" \/><\/p>\n<p style=\"text-align:left\">\u3000\u3000\u6211\u4eec\u9700\u8981\u505a\u7684\u4e8b\u60c5\uff0c\u5c31\u662f\u5bf9\u5fae\u4fe1\u670d\u52a1\u5668\u8f6c\u53d1\u7684HTTP\u8bf7\u6c42\u505a\u51fa\u54cd\u5e94\u3002\u5177\u4f53\u7684\u8bf7\u6c42\u5185\u5bb9\uff0c\u6211\u4eec\u6309\u7167\u7279\u5b9a\u7684XML\u683c\u5f0f\u53bb\u89e3\u6790\uff0c\u5904\u7406\u5b8c\u6bd5\u540e\uff0c\u4e5f\u8981\u6309\u7167\u7279\u5b9a\u7684XML\u683c\u5f0f\u8fd4\u56de\u3002<\/p>\n<h2>\u4e8c\u3001\u5fae\u4fe1\u516c\u4f17\u53f7\u63a5\u5165<\/h2>\n<p>\u3000\u3000\u5728\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u8005\u6587\u6863\u4e0a\uff0c\u5173\u4e8e\u516c\u4f17\u53f7\u63a5\u5165\u8fd9\u4e00\u8282\u5185\u5bb9\u5728\u63a5\u5165\u6307\u5357\u4e0a\u5199\u7684\u6bd4\u8f83\u8be6\u7ec6\u7684\uff0c\u6587\u6863\u4e2d\u8bf4\u63a5\u5165\u516c\u4f17\u53f7\u9700\u89813\u4e2a\u6b65\u9aa4\uff0c\u5206\u522b\u662f\uff1a<\/p>\n<p>\u3000\u30001\u3001\u586b\u5199\u670d\u52a1\u5668\u914d\u7f6e<br \/>\u3000\u30002\u3001\u9a8c\u8bc1\u670d\u52a1\u5668\u5730\u5740\u7684\u6709\u6548\u6027<br \/>\u3000\u30003\u3001\u4f9d\u636e\u63a5\u53e3\u6587\u6863\u5b9e\u73b0\u4e1a\u52a1\u903b\u8f91<\/p>\n<p>\u3000\u3000\u5176\u5b9e\uff0c\u7b2c3\u6b65\u5df2\u7ecf\u4e0d\u80fd\u7b97\u505a\u516c\u4f17\u53f7\u63a5\u5165\u7684\u6b65\u9aa4\uff0c\u800c\u662f\u63a5\u5165\u4e4b\u540e\uff0c\u5f00\u53d1\u4eba\u5458\u53ef\u4ee5\u6839\u636e\u5fae\u4fe1\u516c\u4f17\u53f7\u63d0\u4f9b\u7684\u63a5\u53e3\u6240\u80fd\u505a\u7684\u4e00\u4e9b\u5f00\u53d1\u3002<\/p>\n<p>\u3000\u3000\u7b2c1\u6b65\u4e2d\u670d\u52a1\u5668\u914d\u7f6e\u5305\u542b\u670d\u52a1\u5668\u5730\u5740\uff08URL\uff09\u3001Token\u548cEncodingAESKey\u3002<\/p>\n<p>\u3000\u3000\u670d\u52a1\u5668\u5730\u5740\u5373\u516c\u4f17\u53f7\u540e\u53f0\u63d0\u4f9b\u4e1a\u52a1\u903b\u8f91\u7684\u5165\u53e3\u5730\u5740\uff0c\u76ee\u524d\u53ea\u652f\u630180\u7aef\u53e3\uff0c\u4e4b\u540e\u5305\u62ec\u63a5\u5165\u9a8c\u8bc1\u4ee5\u53ca\u4efb\u4f55\u5176\u5b83\u7684\u64cd\u4f5c\u7684\u8bf7\u6c42\uff08\u4f8b\u5982\u6d88\u606f\u7684\u53d1\u9001\u3001\u83dc\u5355\u7ba1\u7406\u3001\u7d20\u6750\u7ba1\u7406\u7b49\uff09\u90fd\u8981\u4ece\u8fd9\u4e2a\u5730\u5740\u8fdb\u5165\u3002\u63a5\u5165\u9a8c\u8bc1\u548c\u5176\u5b83\u8bf7\u6c42\u7684\u533a\u522b\u5c31\u662f\uff0c\u63a5\u5165\u9a8c\u8bc1\u65f6\u662fget\u8bf7\u6c42\uff0c\u5176\u5b83\u65f6\u5019\u662fpost\u8bf7\u6c42\uff1b<\/p>\n<p>\u3000\u3000Token\u53ef\u7531\u5f00\u53d1\u8005\u53ef\u4ee5\u4efb\u610f\u586b\u5199\uff0c\u7528\u4f5c\u751f\u6210\u7b7e\u540d\uff08\u8be5Token\u4f1a\u548c\u63a5\u53e3URL\u4e2d\u5305\u542b\u7684Token\u8fdb\u884c\u6bd4\u5bf9\uff0c\u4ece\u800c\u9a8c\u8bc1\u5b89\u5168\u6027\uff09\uff1b<\/p>\n<p>\u3000\u3000EncodingAESKey\u7531\u5f00\u53d1\u8005\u624b\u52a8\u586b\u5199\u6216\u968f\u673a\u751f\u6210\uff0c\u5c06\u7528\u4f5c\u6d88\u606f\u4f53\u52a0\u89e3\u5bc6\u5bc6\u94a5\u3002<span style=\"color: #ff0000\">\u672c\u4f8b\u4e2d\u5168\u90e8\u4ee5\u672a\u52a0\u5bc6\u7684\u660e\u6587\u6d88\u606f\u65b9\u5f0f\uff0c\u4e0d\u6d89\u53ca\u6b64\u914d\u7f6e\u9879\u3002<\/span><\/p>\n<p><span style=\"color: #000000\">\u3000\u3000\u7b2c2\u6b65\uff0c\u9a8c\u8bc1\u670d\u52a1\u5668\u5730\u5740\u7684\u6709\u6548\u6027\uff0c\u5f53\u70b9\u51fb\u201c\u63d0\u4ea4\u201d\u6309\u94ae\u540e\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u5c06\u53d1\u9001\u4e00\u4e2ahttp\u7684get\u8bf7\u6c42\u5230\u521a\u521a\u586b\u5199\u7684\u670d\u52a1\u5668\u5730\u5740\uff0c\u5e76\u4e14\u643a\u5e26\u56db\u4e2a\u53c2\u6570\uff1a<\/span><\/p>\n<p><span style=\"color: #000000\">\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/663\/524\/703\/1488849449587204.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe2\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe2\" \/><\/span><\/p>\n<p>\u3000\u3000\u63a5\u5230\u8bf7\u6c42\u540e\uff0c\u6211\u4eec\u9700\u8981\u505a\u5982\u4e0b\u4e09\u6b65\uff0c\u82e5\u786e\u8ba4\u6b64\u6b21GET\u8bf7\u6c42\u6765\u81ea\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u5426\u5219\u63a5\u5165\u5931\u8d25\u3002<\/p>\n<p>\u3000\u30001. \u5c06token\u3001timestamp\u3001nonce\u4e09\u4e2a\u53c2\u6570\u8fdb\u884c\u5b57\u5178\u5e8f\u6392\u5e8f<br \/>\u3000\u30002. \u5c06\u4e09\u4e2a\u53c2\u6570\u5b57\u7b26\u4e32\u62fc\u63a5\u6210\u4e00\u4e2a\u5b57\u7b26\u4e32\u8fdb\u884csha1\u52a0\u5bc6<br \/>\u3000\u30003. \u5f00\u53d1\u8005\u83b7\u5f97\u52a0\u5bc6\u540e\u7684\u5b57\u7b26\u4e32\u53ef\u4e0esignature\u5bf9\u6bd4\uff0c\u6807\u8bc6\u8be5\u8bf7\u6c42\u6765\u6e90\u4e8e\u5fae\u4fe1<\/p>\n<p>\u3000\u3000\u4e0b\u9762\u6211\u4eec\u7528Java\u4ee3\u7801\u6765\u6f14\u793a\u4e00\u4e0b\u8fd9\u4e2a\u9a8c\u8bc1\u8fc7\u7a0b<\/p>\n<p>\u3000\u3000\u4f7f\u7528IDE(Eclipse\u6216\u8005IntelliJ IDEA)\u521b\u5efa\u4e00\u4e2aJavaWeb\u9879\u76ee,\u8fd9\u91cc\u6211\u4f7f\u7528\u7684\u662fIntelliJ IDEA,\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p>\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/760\/932\/390\/1488849462653293.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe3\" \/><\/p>\n<p>\u3000\u3000\u7f16\u5199\u4e00\u4e2aservlevt,\u5728\u5176\u4e2d\u7684doGet\u65b9\u6cd5\u4e2d\u5b9a\u4e49\u6821\u9a8c\u65b9\u6cd5,\u5177\u4f53\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>package&nbsp;me.gacl.wx.web.servlet;\r\n\r\nimport&nbsp;javax.servlet.ServletException;\r\nimport&nbsp;javax.servlet.annotation.WebServlet;\r\nimport&nbsp;javax.servlet.http.HttpServlet;\r\nimport&nbsp;javax.servlet.http.HttpServletRequest;\r\nimport&nbsp;javax.servlet.http.HttpServletResponse;\r\nimport&nbsp;java.io.IOException;\r\nimport&nbsp;java.security.MessageDigest;\r\nimport&nbsp;java.security.NoSuchAlgorithmException;\r\nimport&nbsp;java.util.Arrays;\r\n\r\n\/**\r\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/25.\r\n&nbsp;*&nbsp;\u4f7f\u7528@WebServlet\u6ce8\u89e3\u914d\u7f6eWxServlet,urlPatterns\u5c5e\u6027\u6307\u660e\u4e86WxServlet\u7684\u8bbf\u95ee\u8def\u5f84\r\n&nbsp;*\/\r\n@WebServlet(urlPatterns=\"\/WxServlet\")\r\npublic&nbsp;class&nbsp;WxServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Token\u53ef\u7531\u5f00\u53d1\u8005\u53ef\u4ee5\u4efb\u610f\u586b\u5199\uff0c\u7528\u4f5c\u751f\u6210\u7b7e\u540d\uff08\u8be5Token\u4f1a\u548c\u63a5\u53e3URL\u4e2d\u5305\u542b\u7684Token\u8fdb\u884c\u6bd4\u5bf9\uff0c\u4ece\u800c\u9a8c\u8bc1\u5b89\u5168\u6027\uff09\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6bd4\u5982\u8fd9\u91cc\u6211\u5c06Token\u8bbe\u7f6e\u4e3agacl\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;TOKEN&nbsp;=&nbsp;\"gacl\";\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u5f00\u59cb\u6821\u9a8c\u7b7e\u540d\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u63a5\u6536\u5fae\u4fe1\u670d\u52a1\u5668\u53d1\u9001\u8bf7\u6c42\u65f6\u4f20\u9012\u8fc7\u6765\u76844\u4e2a\u53c2\u6570\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;signature&nbsp;=&nbsp;request.getParameter(\"signature\");\/\/\u5fae\u4fe1\u52a0\u5bc6\u7b7e\u540dsignature\u7ed3\u5408\u4e86\u5f00\u53d1\u8005\u586b\u5199\u7684token\u53c2\u6570\u548c\u8bf7\u6c42\u4e2d\u7684timestamp\u53c2\u6570\u3001nonce\u53c2\u6570\u3002\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;timestamp&nbsp;=&nbsp;request.getParameter(\"timestamp\");\/\/\u65f6\u95f4\u6233\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;nonce&nbsp;=&nbsp;request.getParameter(\"nonce\");\/\/\u968f\u673a\u6570\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;echostr&nbsp;=&nbsp;request.getParameter(\"echostr\");\/\/\u968f\u673a\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6392\u5e8f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sortString&nbsp;=&nbsp;sort(TOKEN,&nbsp;timestamp,&nbsp;nonce);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u52a0\u5bc6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;mySignature&nbsp;=&nbsp;sha1(sortString);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6821\u9a8c\u7b7e\u540d\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mySignature&nbsp;!=&nbsp;null&nbsp;&amp;amp;&amp;amp;&nbsp;mySignature&nbsp;!=&nbsp;\"\"&nbsp;&amp;amp;&amp;amp;&nbsp;mySignature.equals(signature))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u7b7e\u540d\u6821\u9a8c\u901a\u8fc7\u3002\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5982\u679c\u68c0\u9a8c\u6210\u529f\u8f93\u51faechostr\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u63a5\u6536\u5230\u6b64\u8f93\u51fa\uff0c\u624d\u4f1a\u786e\u8ba4\u68c0\u9a8c\u5b8c\u6210\u3002\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/response.getWriter().println(echostr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.getWriter().write(echostr);\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;System.out.println(\"\u7b7e\u540d\u6821\u9a8c\u5931\u8d25.\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6392\u5e8f\u65b9\u6cd5\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;token\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;timestamp\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;nonce\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;sort(String&nbsp;token,&nbsp;String&nbsp;timestamp,&nbsp;String&nbsp;nonce)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;strArray&nbsp;=&nbsp;{token,&nbsp;timestamp,&nbsp;nonce};\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.sort(strArray);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;str&nbsp;:&nbsp;strArray)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(str);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u5c06\u5b57\u7b26\u4e32\u8fdb\u884csha1\u52a0\u5bc6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;str&nbsp;\u9700\u8981\u52a0\u5bc6\u7684\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;\u52a0\u5bc6\u540e\u7684\u5185\u5bb9\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;sha1(String&nbsp;str)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;digest&nbsp;=&nbsp;MessageDigest.getInstance(\"SHA-1\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digest.update(str.getBytes());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;messageDigest[]&nbsp;=&nbsp;digest.digest();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;Create&nbsp;Hex&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;hexString&nbsp;=&nbsp;new&nbsp;StringBuffer();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b57\u8282\u6570\u7ec4\u8f6c\u6362\u4e3a&nbsp;\u5341\u516d\u8fdb\u5236&nbsp;\u6570\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;p&gt;\u3000\u3000\u6211\u8fd9\u91cc\u7528\u7684Servlet3.0,\u4f7f\u7528Servlet3.0\u7684\u597d\u5904\u5c31\u662f\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528&lt;span style=\"color: #bbb529;\"&gt;@WebServlet&lt;\/span&gt;\u6ce8\u89e3\u6620\u5c04Servlet\u7684\u8bbf\u95ee\u8def\u5f84,\u4e0d\u518d\u9700\u8981\u5728web.xml\u6587\u4ef6\u4e2d\u8fdb\u884c\u914d\u7f6e.&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u5c06WxStudy\u9879\u76ee\u90e8\u7f72\u5230Tomcat\u670d\u52a1\u5668\u4e2d\u8fd0\u884c,\u76f4\u63a5\u542f\u52a8\u9879\u76ee\uff0c\u7136\u540e\u7528ngrok\u5c06\u672c\u57308080\u7aef\u53e3\u6620\u5c04\u5230\u5916\u7f51(\u5982\u4f55\u4f7f\u7528ngrok\u8bf7\u53c2\u8003\u535a\u5ba2\u300a\u5fae\u4fe1\u5f00\u53d1\u2014\u5fae\u4fe1\u5f00\u53d1\u73af\u5883\u642d\u5efa\u300b)\u3002\u5982\u4e0b\u56fe\u6240\u793a:&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/829\/538\/626\/1488849536503436.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u6d4b\u8bd5\u662f\u5426\u53ef\u4ee5\u901a\u8fc7http:\/\/xdp.ngrok.natapp.cn\u5730\u5740\u6b63\u5e38\u8bbf\u95ee\uff0c\u6d4b\u8bd5\u7ed3\u679c\u5982\u4e0b\uff1a&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/554\/624\/971\/1488849575422120.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u53ef\u4ee5\u770b\u5230\uff0c\u6211\u4eec\u7684\u9879\u76ee\u5df2\u7ecf\u53ef\u4ee5\u88ab\u5916\u7f51\u6b63\u5e38\u8bbf\u95ee\u5230\u4e86\u3002&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u8fdb\u5165\u5fae\u4fe1\u6d4b\u8bd5\u516c\u4f17\u53f7\u7ba1\u7406\u754c\u9762\uff0c\u5728\u63a5\u53e3\u914d\u7f6e\u4fe1\u606f\u4e2d\u586b\u5165\u6620\u5c04\u7684\u5916\u7f51\u5730\u5740\u548ctoken\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a&lt;\/p&gt;&lt;p&gt;\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/412\/533\/588\/1488849563669513.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u70b9\u51fb\u63d0\u4ea4\u6309\u94ae\uff0c\u9875\u9762\u4f1a\u63d0\u793a\u914d\u7f6e\u6210\u529f\uff0c&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/658\/113\/609\/1488849631554263.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000IDE\u7684\u63a7\u5236\u53f0\u4e2d\u8f93\u51fa\u4e86\u6821\u9a8c\u901a\u8fc7\u7684\u4fe1\u606f,\u5982\u4e0b\u56fe\u6240\u793a:&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/604\/239\/749\/1488849643921510.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u5230\u6b64\uff0c\u6211\u4eec\u7684\u516c\u4f17\u53f7\u5e94\u7528\u5df2\u7ecf\u80fd\u591f\u548c\u5fae\u4fe1\u670d\u52a1\u5668\u6b63\u5e38\u901a\u4fe1\u4e86\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u7684\u516c\u4f17\u53f7\u5df2\u7ecf\u63a5\u5165\u5230\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u4e86\u3002&lt;\/p&gt;&lt;h2&gt;\u4e09\u3001access_token\u7ba1\u7406&lt;\/h2&gt;&lt;h3&gt;3.1\u3001access_token\u4ecb\u7ecd&lt;\/h3&gt;&lt;p&gt;\u3000\u3000\u6211\u4eec\u7684\u516c\u4f17\u53f7\u548c\u5fae\u4fe1\u670d\u52a1\u5668\u5bf9\u63a5\u6210\u529f\u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u8981\u505a\u7684\u5c31\u662f\u6839\u636e\u6211\u4eec\u7684\u4e1a\u52a1\u9700\u6c42\u8c03\u7528\u5fae\u4fe1\u516c\u4f17\u53f7\u63d0\u4f9b\u7684\u63a5\u53e3\u6765\u5b9e\u73b0\u76f8\u5e94\u7684\u903b\u8f91\u4e86\u3002\u5728\u4f7f\u7528\u5fae\u4fe1\u516c\u4f17\u53f7\u63a5\u53e3\u4e2d\u90fd\u9700\u8981\u4e00\u4e2aaccess_token\u3002&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u5173\u4e8eaccess_token\uff0c\u5728\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u8005\u6587\u6863\u4e0a\u7684\u83b7\u53d6\u63a5\u53e3\u8c03\u7528\u51ed\u636e\u6709\u6bd4\u8f83\u8be6\u7ec6\u7684\u4ecb\u7ecd\uff1a&lt;span style=\"color: #ff0000;\"&gt;&lt;strong&gt;access_token\u662f\u516c\u4f17\u53f7\u7684\u5168\u5c40\u552f\u4e00\u7968\u636e\uff0c\u516c\u4f17\u53f7\u8c03\u7528\u5404\u63a5\u53e3\u65f6\u90fd\u9700\u4f7f\u7528access_token\uff0c\u5f00\u53d1\u8005\u9700\u8981\u59a5\u5584\u4fdd\u5b58&lt;\/strong&gt;&lt;span style=\"color: #000000;\"&gt;&lt;strong&gt;&lt;strong&gt;access_token\u7684\u5b58\u50a8\u81f3\u5c11\u8981\u4fdd\u7559512\u4e2a\u5b57\u7b26\u7a7a\u95f4\u3002access_token\u7684\u6709\u6548\u671f\u76ee\u524d\u4e3a2\u4e2a\u5c0f\u65f6\uff0c\u9700\u5b9a\u65f6\u5237\u65b0\uff0c\u91cd\u590d\u83b7\u53d6\u5c06\u5bfc\u81f4\u4e0a\u6b21\u83b7\u53d6\u7684access_token\u5931\u6548\u3002\u5e76\u4e14\u6bcf\u5929\u8c03\u7528\u83b7\u53d6access_token\u63a5\u53e3\u7684\u4e0a\u9650\u662f2000\u6b21\u3002&lt;\/strong&gt;&lt;\/strong&gt;&lt;\/span&gt;&lt;\/span&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u603b\u7ed3\u4ee5\u4e0a\u8bf4\u660e\uff0caccess_token\u9700\u8981\u505a\u5230\u4ee5\u4e0b\u4e24\u70b9\uff1a&lt;\/p&gt;&lt;p&gt;\u3000\u30001.\u56e0\u4e3aaccess_token\u67092\u4e2a\u5c0f\u65f6\u7684\u65f6\u6548\u6027\uff0c\u8981\u6709\u4e00\u4e2a\u673a\u5236\u4fdd\u8bc1\u6700\u957f2\u4e2a\u5c0f\u65f6\u91cd\u65b0\u83b7\u53d6\u4e00\u6b21\u3002&lt;\/p&gt;&lt;p&gt;\u3000\u30002.\u56e0\u4e3a\u63a5\u53e3\u8c03\u7528\u4e0a\u9650\u6bcf\u59292000\u6b21\uff0c\u6240\u4ee5\u4e0d\u80fd\u8c03\u7528\u592a\u9891\u7e41\u3002&lt;\/p&gt;&lt;h3&gt;3.2\u3001\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u63d0\u4f9b\u7684\u83b7\u53d6access_token\u7684\u63a5\u53e3&lt;\/h3&gt;&lt;p&gt;\u3000\u3000\u5173\u4e8eaccess_token\u7684\u83b7\u53d6\u65b9\u5f0f\uff0c\u5728\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u8005\u6587\u6863\u4e0a\u6709\u8bf4\u660e\uff0c\u516c\u4f17\u53f7\u53ef\u4ee5\u8c03\u7528\u4e00\u4e2a\u53eb\"\u83b7\u53d6access token\"\u7684\u63a5\u53e3\u6765\u83b7\u53d6access_token\u3002&lt;\/p&gt;&lt;p&gt;&lt;strong&gt;\u3000\u3000\u83b7\u53d6access token\u63a5\u53e3\u8c03\u7528\u8bf7\u6c42\u8bf4\u660e&lt;\/strong&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u3000\u3000http\u8bf7\u6c42\u65b9\u5f0f: GET&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u3000\u3000\u8bf7\u6c42\u7684URL\u5730\u5740\uff1a&lt;span class=\"external free\"&gt;https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=APPID&amp;amp;secret=APPSECRET\u3000\u3000\u3000\u3000&lt;\/span&gt;\u3000\u3000&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/262\/168\/929\/1488849756818271.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u6211\u4eec\u53ef\u4ee5\u770b\u5230,\u8c03\u7528\u8fc7\u7a0b\u4e2d\u9700\u8981\u4f20\u9012appID\u548cAppSecret,appID\u548cAppSecret\u662f\u5728\u7533\u8bf7\u516c\u4f17\u53f7\u7684\u65f6\u5019\u81ea\u52a8\u5206\u914d\u7ed9\u516c\u4f17\u53f7\u7684\uff0c\u76f8\u5f53\u4e8e\u516c\u4f17\u53f7\u7684\u8eab\u4efd\u6807\u793a\uff0c\u4f7f\u7528\u5fae\u4fe1\u516c\u4f17\u53f7\u7684\u6ce8\u518c\u5e10\u53f7\u767b\u5f55\u5230\u817e\u8baf\u63d0\u4f9b\u7684\u5fae\u4fe1\u516c\u4f17\u53f7\u7ba1\u7406\u540e\u53f0\u5c31\u53ef\u4ee5\u770b\u5230\u81ea\u5df1\u7533\u8bf7\u7684\u516c\u4f17\u53f7\u7684AppID\u548cAppSecret\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/830\/290\/579\/1488849739244826.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u8fd9\u662f\u6211\u7533\u8bf7\u516c\u4f17\u53f7\u6d4b\u8bd5\u5e10\u53f7\u65f6\u5206\u914d\u5230\u7684AppID\u548cAppSecret\u3002&lt;\/p&gt;&lt;h3&gt;3.3\u3001\u83b7\u53d6access_token\u65b9\u6848\u4ee5\u53ca\u5177\u4f53\u5b9e\u73b0&lt;\/h3&gt;&lt;p&gt;\u3000\u3000\u8fd9\u91cc\u91c7\u7528\u7684\u65b9\u6848\u662f\u8fd9\u6837\u7684\uff0c\u5b9a\u4e49\u4e00\u4e2a\u9ed8\u8ba4\u542f\u52a8\u7684servlet\uff0c\u5728init\u65b9\u6cd5\u4e2d\u542f\u52a8\u4e00\u4e2aThread,\u8fd9\u4e2a\u8fdb\u7a0b\u4e2d\u5b9a\u4e49\u4e00\u4e2a\u65e0\u9650\u5faa\u73af\u7684\u65b9\u6cd5\uff0c\u7528\u6765\u83b7\u53d6access_token\uff0c\u5f53\u83b7\u53d6\u6210\u529f\u540e\uff0c\u6b64\u8fdb\u7a0b\u4f11\u77207000\u79d2(7000\u79d2=1.944444444444444\u5c0f\u65f6)\uff0c\u5426\u5219\u4f11\u77203\u79d2\u949f\u7ee7\u7eed\u83b7\u53d6\u3002\u6d41\u7a0b\u56fe\u5982\u4e0b\uff1a&lt;\/p&gt;&lt;p&gt;\u3000\u3000&lt;img src=\"https:\/\/img.php.cn\/\/upload\/image\/449\/246\/778\/1488849711189902.png\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\"    style=\"max-width:90%\"  style=\"max-width:90%\"&gt;&lt;\/p&gt;&lt;p&gt;\u3000\u3000\u4e0b\u9762\u6b63\u5f0f\u5f00\u59cb\u5728\u5de5\u7a0b\u4e2d\u5b9e\u73b0\u4ee5\u4e0a\u601d\u8def\uff0c\u56e0\u4e3a\u8fd4\u56de\u7684\u6570\u636e\u90fd\u662fjson\u683c\u5f0f\uff0c\u8fd9\u91cc\u4f1a\u7528\u5230\u963f\u91cc\u7684fastjson\u5e93\uff0c\u4e3a\u6784\u9020\u8bf7\u6c42\u548c\u5904\u7406\u8bf7\u6c42\u540e\u7684\u6570\u636e\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316\u63d0\u4f9b\u652f\u6301\u3002&lt;\/p&gt;&lt;p&gt;\u3000\u30001.\u5b9a\u4e49\u4e00\u4e2aAccessToken\u5b9e\u4f53\u7c7b&lt;\/p&gt;&lt;pre class=\"brush:c#;toolbar:false\"&gt;package&nbsp;me.gacl.wx.entry;\r\n\r\n\/**\r\n&nbsp;*&nbsp;AccessToken\u7684\u6570\u636e\u6a21\u578b\r\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/25.\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;AccessToken&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6\u5230\u7684\u51ed\u8bc1\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;accessToken;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u51ed\u8bc1\u6709\u6548\u65f6\u95f4\uff0c\u5355\u4f4d\uff1a\u79d2\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;expiresin;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getAccessToken()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;accessToken;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAccessToken(String&nbsp;accessToken)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.accessToken&nbsp;=&nbsp;accessToken;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getExpiresin()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;expiresin;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setExpiresin(int&nbsp;expiresin)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.expiresin&nbsp;=&nbsp;expiresin;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u30002.\u5b9a\u4e49\u4e00\u4e2aAccessTokenInfo\u7c7b,\u7528\u4e8e\u5b58\u653e\u83b7\u53d6\u5230\u7684AccessToken,\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>package&nbsp;me.gacl.wx.Common;\r\n\r\nimport&nbsp;me.gacl.wx.entry.AccessToken;\r\n\r\n\/**\r\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/25.\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;AccessTokenInfo&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6ce8\u610f\u662f\u9759\u6001\u7684\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;AccessToken&nbsp;accessToken&nbsp;=&nbsp;null;\r\n}<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u30003.\u7f16\u5199\u4e00\u4e2a\u7528\u4e8e\u53d1\u8d77https\u8bf7\u6c42\u7684\u5de5\u5177\u7c7bNetWorkHelper,\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>package&nbsp;me.gacl.wx.util;\r\n\r\nimport&nbsp;javax.net.ssl.*;\r\nimport&nbsp;java.io.BufferedReader;\r\nimport&nbsp;java.io.InputStream;\r\nimport&nbsp;java.io.InputStreamReader;\r\nimport&nbsp;java.net.URL;\r\nimport&nbsp;java.security.cert.CertificateException;\r\nimport&nbsp;java.security.cert.X509Certificate;\r\n\r\n\/**\r\n&nbsp;*&nbsp;\u8bbf\u95ee\u7f51\u7edc\u7528\u5230\u7684\u5de5\u5177\u7c7b\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;NetWorkHelper&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u53d1\u8d77Https\u8bf7\u6c42\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;reqUrl&nbsp;\u8bf7\u6c42\u7684URL\u5730\u5740\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;requestMethod\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;\u54cd\u5e94\u540e\u7684\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getHttpsResponse(String&nbsp;reqUrl,&nbsp;String&nbsp;requestMethod)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resultData&nbsp;=&nbsp;\"\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;=&nbsp;new&nbsp;URL(reqUrl);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpsURLConnection&nbsp;con&nbsp;=&nbsp;(HttpsURLConnection)&nbsp;url.openConnection();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TrustManager[]&nbsp;tm&nbsp;=&nbsp;{xtm};\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSLContext&nbsp;ctx&nbsp;=&nbsp;SSLContext.getInstance(\"TLS\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.init(null,&nbsp;tm,&nbsp;null);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setSSLSocketFactory(ctx.getSocketFactory());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setHostnameVerifier(new&nbsp;HostnameVerifier()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;verify(String&nbsp;arg0,&nbsp;SSLSession&nbsp;arg1)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setDoInput(true);&nbsp;\/\/\u5141\u8bb8\u8f93\u5165\u6d41\uff0c\u5373\u5141\u8bb8\u4e0b\u8f7d\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5728android\u4e2d\u5fc5\u987b\u5c06\u6b64\u9879\u8bbe\u7f6e\u4e3afalse\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setDoOutput(false);&nbsp;\/\/\u5141\u8bb8\u8f93\u51fa\u6d41\uff0c\u5373\u5141\u8bb8\u4e0a\u4f20\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setUseCaches(false);&nbsp;\/\/\u4e0d\u4f7f\u7528\u7f13\u51b2\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(null&nbsp;!=&nbsp;requestMethod&nbsp;&amp;amp;&amp;amp;&nbsp;!requestMethod.equals(\"\"))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.setRequestMethod(requestMethod);&nbsp;\/\/\u4f7f\u7528\u6307\u5b9a\u7684\u65b9\u5f0f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;con.setRequestMethod(\"GET\");&nbsp;\/\/\u4f7f\u7528get\u8bf7\u6c42\r\n&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;is&nbsp;=&nbsp;con.getInputStream();&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6\u8f93\u5165\u6d41\uff0c\u6b64\u65f6\u624d\u771f\u6b63\u5efa\u7acb\u94fe\u63a5\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;isr&nbsp;=&nbsp;new&nbsp;InputStreamReader(is);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;bufferReader&nbsp;=&nbsp;new&nbsp;BufferedReader(isr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;inputLine;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((inputLine&nbsp;=&nbsp;bufferReader.readLine())&nbsp;!=&nbsp;null)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultData&nbsp;+=&nbsp;inputLine&nbsp;+&nbsp;\"\n\";\r\n&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;System.out.println(resultData);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;resultData;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;X509TrustManager&nbsp;xtm&nbsp;=&nbsp;new&nbsp;X509TrustManager()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;X509Certificate[]&nbsp;getAcceptedIssuers()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;checkServerTrusted(X509Certificate[]&nbsp;arg0,&nbsp;String&nbsp;arg1)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;CertificateException&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;checkClientTrusted(X509Certificate[]&nbsp;arg0,&nbsp;String&nbsp;arg1)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;CertificateException&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;};\r\n}<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u3000getHttpsResponse\u65b9\u6cd5\u662f\u8bf7\u6c42\u4e00\u4e2ahttps\u5730\u5740\uff0c\u53c2\u6570requestMethod\u4e3a\u5b57\u7b26\u4e32\u201cGET\u201d\u6216\u8005\u201cPOST\u201d\uff0c\u4f20null\u6216\u8005\u201c\u201d\u9ed8\u8ba4\u4e3aget\u65b9\u5f0f\u3002<\/p>\n<p>\u3000\u30004.\u5b9a\u4e49\u4e00\u4e2a\u9ed8\u8ba4\u542f\u52a8\u7684servlet\uff0c\u5728init\u65b9\u6cd5\u4e2d\u542f\u52a8\u4e00\u4e2a\u65b0\u7684\u7ebf\u7a0b\u53bb\u83b7\u53d6accessToken<\/p>\n<pre>package&nbsp;me.gacl.wx.web.servlet;\r\n\r\nimport&nbsp;com.alibaba.fastjson.JSON;\r\nimport&nbsp;com.alibaba.fastjson.JSONObject;\r\nimport&nbsp;me.gacl.wx.Common.AccessTokenInfo;\r\nimport&nbsp;me.gacl.wx.entry.AccessToken;\r\nimport&nbsp;me.gacl.wx.util.NetWorkHelper;\r\n\r\nimport&nbsp;javax.servlet.ServletException;\r\nimport&nbsp;javax.servlet.annotation.WebInitParam;\r\nimport&nbsp;javax.servlet.annotation.WebServlet;\r\nimport&nbsp;javax.servlet.http.HttpServlet;\r\n\r\n\/**\r\n&nbsp;*&nbsp;\u7528\u4e8e\u83b7\u53d6accessToken\u7684Servlet\r\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/25.\r\n&nbsp;*\/\r\n@WebServlet(\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;\"AccessTokenServlet\",\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;urlPatterns&nbsp;=&nbsp;{\"\/AccessTokenServlet\"},\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadOnStartup&nbsp;=&nbsp;1,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initParams&nbsp;=&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@WebInitParam(name&nbsp;=&nbsp;\"appId\",&nbsp;value&nbsp;=&nbsp;\"wxbe4d433e857e8bb1\"),\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@WebInitParam(name&nbsp;=&nbsp;\"appSecret\",&nbsp;value&nbsp;=&nbsp;\"ccbc82d560876711027b3d43a6f2ebda\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\npublic&nbsp;class&nbsp;AccessTokenServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init()&nbsp;throws&nbsp;ServletException&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u542f\u52a8WebServlet\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.init();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;appId&nbsp;=&nbsp;getInitParameter(\"appId\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;appSecret&nbsp;=&nbsp;getInitParameter(\"appSecret\");\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5f00\u542f\u4e00\u4e2a\u65b0\u7684\u7ebf\u7a0b\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Thread(new&nbsp;Runnable()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(true)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&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;\/\/\u83b7\u53d6accessToken\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;AccessTokenInfo.accessToken&nbsp;=&nbsp;getAccessToken(appId,&nbsp;appSecret);\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;\/\/\u83b7\u53d6\u6210\u529f\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;if&nbsp;(AccessTokenInfo.accessToken&nbsp;!=&nbsp;null)&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;\/\/\u83b7\u53d6\u5230access_token&nbsp;\u4f11\u77207000\u79d2,\u5927\u7ea62\u4e2a\u5c0f\u65f6\u5de6\u53f3\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;Thread.sleep(7000&nbsp;*&nbsp;1000);\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;\/\/Thread.sleep(10&nbsp;*&nbsp;1000);\/\/10\u79d2\u949f\u83b7\u53d6\u4e00\u6b21\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;else&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;\/\/\u83b7\u53d6\u5931\u8d25\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;Thread.sleep(1000&nbsp;*&nbsp;3);&nbsp;\/\/\u83b7\u53d6\u7684access_token\u4e3a\u7a7a&nbsp;\u4f11\u77203\u79d2\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;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&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;System.out.println(\"\u53d1\u751f\u5f02\u5e38\uff1a\"&nbsp;+&nbsp;e.getMessage());\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;e.printStackTrace();\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;try&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;Thread.sleep(1000&nbsp;*&nbsp;10);&nbsp;\/\/\u53d1\u751f\u5f02\u5e38\u4f11\u77201\u79d2\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;catch&nbsp;(Exception&nbsp;e1)&nbsp;{\r\n\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;}\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;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).start();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u83b7\u53d6access_token\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;AccessToken\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;AccessToken&nbsp;getAccessToken(String&nbsp;appId,&nbsp;String&nbsp;appSecret)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetWorkHelper&nbsp;netHelper&nbsp;=&nbsp;new&nbsp;NetWorkHelper();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u63a5\u53e3\u5730\u5740\u4e3ahttps:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=APPID&amp;amp;secret=APPSECRET\uff0c\u5176\u4e2dgrant_type\u56fa\u5b9a\u5199\u4e3aclient_credential\u5373\u53ef\u3002\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;Url&nbsp;=&nbsp;String.format(\"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=%s&amp;amp;secret=%s\",&nbsp;appId,&nbsp;appSecret);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6b64\u8bf7\u6c42\u4e3ahttps\u7684get\u8bf7\u6c42\uff0c\u8fd4\u56de\u7684\u6570\u636e\u683c\u5f0f\u4e3a{\"access_token\":\"ACCESS_TOKEN\",\"expires_in\":7200}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;netHelper.getHttpsResponse(Url,&nbsp;\"\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u83b7\u53d6\u5230\u7684access_token=\"+result);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u4f7f\u7528FastJson\u5c06Json\u5b57\u7b26\u4e32\u89e3\u6790\u6210Json\u5bf9\u8c61\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;json&nbsp;=&nbsp;JSON.parseObject(result);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessToken&nbsp;token&nbsp;=&nbsp;new&nbsp;AccessToken();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token.setAccessToken(json.getString(\"access_token\"));\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token.setExpiresin(json.getInteger(\"expires_in\"));\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;token;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u3000AccessTokenServlet\u91c7\u7528\u6ce8\u89e3\u7684\u65b9\u5f0f\u8fdb\u884c\u914d\u7f6e<br \/>\u3000\u3000\u81f3\u6b64\u4ee3\u7801\u5b9e\u73b0\u5b8c\u6bd5\uff0c\u5c06\u9879\u76ee\u90e8\u7f72\uff0c\u770b\u5230\u63a7\u5236\u53f0\u8f93\u51fa\u5982\u4e0b\uff1a<\/p>\n<p>\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/584\/985\/437\/1488849839321625.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe4\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe4\" \/><\/p>\n<p>\u3000\u3000\u4e3a\u4e86\u65b9\u4fbf\u770b\u6548\u679c\uff0c\u53ef\u4ee5\u628a\u4f11\u7720\u65f6\u95f4\u8bbe\u7f6e\u77ed\u4e00\u70b9\uff0c\u6bd4\u598210\u79d2\u83b7\u53d6\u4e00\u6b21\uff0c\u7136\u540e\u5c06access_token\u8f93\u51fa\u3002<\/p>\n<p>\u3000\u3000\u4e0b\u9762\u505a\u4e00\u4e2a\u6d4b\u8bd5jsp\u9875\u9762\uff0c\u5e76\u628a\u4f11\u7720\u65f6\u95f4\u8bbe\u7f6e\u4e3a10\u79d2\uff0c\u8fd9\u6837\u8fc710\u79d2\u5237\u65b0\u9875\u9762\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u53d8\u5316<\/p>\n<pre>\r\n\r\n\r\n\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&lt;\/title&gt;\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\u5fae\u4fe1\u5b66\u4e60\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;hr&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;access_token\u4e3a\uff1a\r\n&nbsp;&nbsp;\r\n<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/320\/157\/743\/1488849860717736.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe5\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe5\" \/>\u3000<\/p>\n<p>\u3000\u300010\u79d2\u949f\u540e\u5237\u65b0\u9875\u9762,access_token\u53d8\u4e86,\u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p>\u3000\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/727\/713\/215\/1488849872554636.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe6\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe6\" \/><\/p>\n<h2>\u56db\u3001\u63a5\u6536\u5fae\u4fe1\u670d\u52a1\u5668\u53d1\u9001\u7684\u6d88\u606f\u5e76\u505a\u51fa\u54cd\u5e94<\/h2>\n<p>\u3000\u3000\u7ecf\u8fc7\u4e0a\u8ff0\u7684\u4e09\u6b65,\u6211\u4eec\u5f00\u53d1\u524d\u7684\u51c6\u5907\u5de5\u4f5c\u5df2\u7ecf\u5b8c\u6210\u4e86,\u63a5\u4e0b\u6765\u8981\u505a\u7684\u5c31\u662f\u63a5\u6536\u5fae\u4fe1\u670d\u52a1\u5668\u53d1\u9001\u7684\u6d88\u606f\u5e76\u505a\u51fa\u54cd\u5e94<\/p>\n<p>\u3000\u3000\u4ece\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u63a5\u53e3\u6d88\u606f\u6307\u5357\u4e2d\u53ef\u4ee5\u4e86\u89e3\u5230\uff0c<span style=\"color: #ff0000\">\u5f53\u7528\u6237\u5411\u516c\u4f17\u5e10\u53f7\u53d1\u6d88\u606f\u65f6\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u4f1a\u5c06\u6d88\u606f\u901a\u8fc7POST\u65b9\u5f0f\u63d0\u4ea4\u7ed9\u6211\u4eec\u5728\u63a5\u53e3\u914d\u7f6e\u4fe1\u606f\u4e2d\u586b\u5199\u7684URL\uff0c\u800c\u6211\u4eec\u5c31\u9700\u8981\u5728URL\u6240\u6307\u5411\u7684\u8bf7\u6c42\u5904\u7406\u7c7bWxServlet\u7684doPost\u65b9\u6cd5\u4e2d\u63a5\u6536\u6d88\u606f\u3001\u5904\u7406\u6d88\u606f\u548c\u54cd\u5e94\u6d88\u606f\u3002<\/span><\/p>\n<h3>4.1.\u7f16\u5199\u4e00\u4e2a\u7528\u4e8e\u5904\u7406\u6d88\u606f\u7684\u5de5\u5177\u7c7b<\/h3>\n<p>\u3000\u3000\u7f16\u5199\u5904\u7406\u6d88\u606f\u7684\u5de5\u5177\u680f,\u5de5\u5177\u7c7b\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>package&nbsp;me.gacl.wx.util;\r\n\r\nimport&nbsp;org.dom4j.Document;\r\nimport&nbsp;org.dom4j.Element;\r\nimport&nbsp;org.dom4j.io.SAXReader;\r\n\r\nimport&nbsp;javax.servlet.http.HttpServletRequest;\r\nimport&nbsp;java.io.InputStream;\r\nimport&nbsp;java.text.DateFormat;\r\nimport&nbsp;java.text.SimpleDateFormat;\r\nimport&nbsp;java.util.Date;\r\nimport&nbsp;java.util.HashMap;\r\nimport&nbsp;java.util.List;\r\nimport&nbsp;java.util.Map;\r\n\r\n\/**\r\n&nbsp;*&nbsp;\u6d88\u606f\u5904\u7406\u5de5\u5177\u7c7b\r\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/26.\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;MessageHandlerUtil&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u89e3\u6790\u5fae\u4fe1\u53d1\u6765\u7684\u8bf7\u6c42\uff08XML\uff09\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;map\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Map&lt;string&gt;&nbsp;parseXml(HttpServletRequest&nbsp;request)&nbsp;throws&nbsp;Exception&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5c06\u89e3\u6790\u7ed3\u679c\u5b58\u50a8\u5728HashMap\u4e2d\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;string&gt;&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u4ecerequest\u4e2d\u53d6\u5f97\u8f93\u5165\u6d41\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;request.getInputStream();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u83b7\u53d6\u8f93\u5165\u6d41\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u8bfb\u53d6\u8f93\u5165\u6d41\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;SAXReader();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;=&nbsp;reader.read(inputStream);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f97\u5230xml\u6839\u5143\u7d20\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;root&nbsp;=&nbsp;document.getRootElement();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f97\u5230\u6839\u5143\u7d20\u7684\u6240\u6709\u5b50\u8282\u70b9\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;element&gt;&nbsp;elementList&nbsp;=&nbsp;root.elements();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u904d\u5386\u6240\u6709\u5b50\u8282\u70b9\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Element&nbsp;e&nbsp;:&nbsp;elementList)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getName()&nbsp;+&nbsp;\"|\"&nbsp;+&nbsp;e.getText());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(e.getName(),&nbsp;e.getText());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u91ca\u653e\u8d44\u6e90\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream.close();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;map;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u6839\u636e\u6d88\u606f\u7c7b\u578b&nbsp;\u6784\u9020\u8fd4\u56de\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;buildXml(Map&lt;string&gt;&nbsp;map)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;msgType&nbsp;=&nbsp;map.get(\"MsgType\").toString();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"MsgType:\"&nbsp;+&nbsp;msgType);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msgType.toUpperCase().equals(\"TEXT\")){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;buildTextMessage(map,&nbsp;\"\u5b64\u50b2\u82cd\u72fc\u5728\u5b66\u4e60\u548c\u603b\u7ed3\u5fae\u4fe1\u5f00\u53d1\u4e86,\u6784\u5efa\u4e00\u6761\u6587\u672c\u6d88\u606f:Hello&nbsp;World!\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fromUserName&nbsp;=&nbsp;map.get(\"FromUserName\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;toUserName&nbsp;=&nbsp;map.get(\"ToUserName\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.format(\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;\"&lt;xml&gt;\"&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;\"&lt;tousername&gt;&lt;\/tousername&gt;\"&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;\"&lt;fromusername&gt;&lt;\/fromusername&gt;\"&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;\"&lt;createtime&gt;%s&lt;\/createtime&gt;\"&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;\"&lt;msgtype&gt;&lt;\/msgtype&gt;\"&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;\"&lt;content&gt;&lt;\/content&gt;\"&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;\"&lt;\/xml&gt;\",\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;fromUserName,&nbsp;toUserName,&nbsp;getUtcTime(),\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;\"\u8bf7\u56de\u590d\u5982\u4e0b\u5173\u952e\u8bcd\uff1a\n\u6587\u672c\n\u56fe\u7247\n\u8bed\u97f3\n\u89c6\u9891\n\u97f3\u4e50\n\u56fe\u6587\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6784\u9020\u6587\u672c\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;map\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;content\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;buildTextMessage(Map&lt;string&gt;&nbsp;map,&nbsp;String&nbsp;content)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u53d1\u9001\u65b9\u5e10\u53f7\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fromUserName&nbsp;=&nbsp;map.get(\"FromUserName\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;toUserName&nbsp;=&nbsp;map.get(\"ToUserName\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6587\u672c\u6d88\u606fXML\u6570\u636e\u683c\u5f0f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;xml&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tousername&gt;&lt;\/tousername&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fromusername&gt;&lt;\/fromusername&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;createtime&gt;1348831860&lt;\/createtime&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;msgtype&gt;&lt;\/msgtype&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content&gt;&lt;\/content&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;msgid&gt;1234567890123456&lt;\/msgid&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/xml&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;String.format(\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"&lt;xml&gt;\"&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;\"&lt;tousername&gt;&lt;\/tousername&gt;\"&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;\"&lt;fromusername&gt;&lt;\/fromusername&gt;\"&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;\"&lt;createtime&gt;%s&lt;\/createtime&gt;\"&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;\"&lt;msgtype&gt;&lt;\/msgtype&gt;\"&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;\"&lt;content&gt;&lt;\/content&gt;\"&nbsp;+&nbsp;\"&lt;\/xml&gt;\",\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fromUserName,&nbsp;toUserName,&nbsp;getUtcTime(),&nbsp;content);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;getUtcTime()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;dt&nbsp;=&nbsp;new&nbsp;Date();\/\/&nbsp;\u5982\u679c\u4e0d\u9700\u8981\u683c\u5f0f,\u53ef\u76f4\u63a5\u7528dt,dt\u5c31\u662f\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;=&nbsp;new&nbsp;SimpleDateFormat(\"yyyyMMddhhmm\");\/\/&nbsp;\u8bbe\u7f6e\u663e\u793a\u683c\u5f0f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;nowTime&nbsp;=&nbsp;df.format(dt);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;dd&nbsp;=&nbsp;(long)&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;=&nbsp;df.parse(nowTime).getTime();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;String.valueOf(dd);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}&lt;\/string&gt;&lt;\/string&gt;&lt;\/element&gt;&lt;\/string&gt;&lt;\/string&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u3000\u4e3a\u4e86\u65b9\u4fbf\u89e3\u6790\u5fae\u4fe1\u670d\u52a1\u5668\u53d1\u9001\u7ed9\u6211\u4eec\u7684xml\u683c\u5f0f\u7684\u6570\u636e,\u8fd9\u91cc\u6211\u4eec<span style=\"color: #ff0000\">\u501f\u52a9\u4e8e\u5f00\u6e90\u6846\u67b6dom4j\u53bb\u89e3\u6790xml\uff08\u8fd9\u91cc\u4f7f\u7528\u7684\u662fdom4j-2.0.0-RC1.jar\uff09<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/246\/823\/237\/1488849899781021.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe7\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe7\" \/>\u3000\u3000<\/p>\n<h3>4.2.\u5728WxServlet\u7684doPost\u65b9\u6cd5\u4e2d\u5904\u7406\u8bf7\u6c42<\/h3>\n<p>\u3000\u3000WxServlet\u7684doPost\u65b9\u6cd5\u7684\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u5904\u7406\u5fae\u4fe1\u670d\u52a1\u5668\u53d1\u6765\u7684\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;TODO&nbsp;\u63a5\u6536\u3001\u5904\u7406\u3001\u54cd\u5e94\u7531\u5fae\u4fe1\u670d\u52a1\u5668\u8f6c\u53d1\u7684\u7528\u6237\u53d1\u9001\u7ed9\u516c\u4f17\u5e10\u53f7\u7684\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5c06\u8bf7\u6c42\u3001\u54cd\u5e94\u7684\u7f16\u7801\u5747\u8bbe\u7f6e\u4e3aUTF-8\uff08\u9632\u6b62\u4e2d\u6587\u4e71\u7801\uff09\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(\"UTF-8\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setCharacterEncoding(\"UTF-8\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u8bf7\u6c42\u8fdb\u5165\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;\"\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;string&gt;&nbsp;map&nbsp;=&nbsp;MessageHandlerUtil.parseXml(request);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u5f00\u59cb\u6784\u9020\u6d88\u606f\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;MessageHandlerUtil.buildXml(map);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(result.equals(\"\")){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;\"\u672a\u6b63\u786e\u54cd\u5e94\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u53d1\u751f\u5f02\u5e38\uff1a\"+&nbsp;e.getMessage());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.getWriter().println(result);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&lt;\/string&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u3000\u5230\u6b64,\u6211\u4eec\u7684WxServlet\u5df2\u7ecf\u53ef\u4ee5\u6b63\u5e38\u5904\u7406\u7528\u6237\u7684\u8bf7\u6c42\u5e76\u505a\u51fa\u54cd\u5e94\u4e86.\u63a5\u4e0b\u6765\u6211\u4eec\u6d4b\u8bd5\u4e00\u4e0b\u6211\u4eec\u5f00\u53d1\u597d\u7684\u516c\u4f17\u53f7\u5e94\u7528\u662f\u5426\u53ef\u4ee5\u6b63\u5e38\u548c\u5fae\u4fe1\u7528\u6237\u4ea4\u4e92<\/p>\n<p>\u3000\u3000\u5c06WxStudy\u90e8\u7f72\u5230Tomcat\u670d\u52a1\u5668,\u542f\u52a8\u670d\u52a1\u5668,\u8bb0\u5f97\u4f7f\u7528ngrok\u5c06\u672c\u5730Tomcat\u670d\u52a1\u5668\u76848080\u7aef\u53e3\u6620\u5c04\u5230\u5916\u7f51,\u4fdd\u8bc1\u63a5\u53e3\u914d\u7f6e\u4fe1\u606f\u7684URL\u5730\u5740:http:\/\/xdp.ngrok.natapp.cn\/WxServlet\u53ef\u4ee5\u6b63\u5e38\u4e0e\u5fae\u4fe1\u670d\u52a1\u5668\u901a\u4fe1<\/p>\n<p>\u3000\u3000\u767b\u5f55\u5230\u6211\u4eec\u7684\u6d4b\u8bd5\u516c\u4f17\u53f7\u7684\u7ba1\u7406\u540e\u53f0,\u7136\u540e\u7528\u5fae\u4fe1\u626b\u63cf\u4e00\u4e0b\u6d4b\u8bd5\u53f7\u7684\u4e8c\u7ef4\u7801,\u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p>\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/421\/735\/818\/1488849925156840.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe8\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe8\" \/>\u3000<\/p>\n<p>&nbsp;<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/494\/504\/698\/1488849947398764.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe9\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe9\" \/><\/p>\n<p>\u3000\u3000<\/p>\n<p>\u3000\u3000<\/p>\n<p>\u3000\u3000\u5173\u6ce8\u6210\u529f\u540e,\u6211\u4eec\u5f00\u53d1\u597d\u7684\u516c\u4f17\u53f7\u5e94\u7528\u4f1a\u5148\u7ed9\u7528\u6237\u53d1\u4e00\u6761\u63d0\u793a\u7528\u6237\u64cd\u4f5c\u7684\u6587\u672c\u6d88\u606f,\u5fae\u4fe1\u7528\u6237\u6839\u636e\u63d0\u793a\u64cd\u4f5c\u8f93\u5165&#8221;\u6587\u672c&#8221;,\u6211\u4eec\u7684\u516c\u4f17\u53f7\u5e94\u7528\u63a5\u6536\u5230\u7528\u6237\u8bf7\u6c42\u540e\u5c31\u7ed9\u7528\u6237\u56de\u590d\u4e86\u4e00\u6761\u6211\u4eec\u81ea\u5df1\u6784\u5efa\u597d\u7684\u6587\u672c\u6d88\u606f,\u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/988\/897\/693\/1488849969973064.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe10\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe10\" \/>\u3000\u3000<\/p>\n<p>\u3000\u3000\u6211\u4eec\u7684\u516c\u4f17\u53f7\u5e94\u7528\u54cd\u5e94\u7ed9\u5fae\u4fe1\u7528\u6237\u7684\u6587\u672c\u6d88\u606f\u7684XML\u6570\u636e\u5982\u4e0b:<\/p>\n<pre>&lt;xml&gt;\r\n&nbsp;&nbsp;&lt;tousername&gt;&lt;\/tousername&gt;\r\n&nbsp;&nbsp;&lt;fromusername&gt;&lt;\/fromusername&gt;\r\n&nbsp;&nbsp;&lt;createtime&gt;1453755900000&lt;\/createtime&gt;\r\n&nbsp;&nbsp;&lt;msgtype&gt;&lt;\/msgtype&gt;\r\n&nbsp;&nbsp;&lt;content&gt;&lt;\/content&gt;&lt;\/xml&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u3000\u3000\u6d4b\u8bd5\u516c\u4f17\u53f7\u7684\u7ba1\u7406\u540e\u53f0\u4e5f\u53ef\u4ee5\u770b\u5230\u5173\u6ce8\u6d4b\u8bd5\u53f7\u7684\u7528\u6237\u5217\u8868,\u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p>\u3000<img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/718\/924\/720\/1488849997470364.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe11\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u63d2\u56fe11\" \/>\u3000<\/p>\n<p>\u3000\u3000\u901a\u8fc7\u8fd9\u4e2a\u7b80\u5355\u7684\u5165\u95e8\u7a0b\u5e8f,\u6211\u4eec\u63ed\u5f00\u4e86\u5fae\u4fe1\u5f00\u53d1\u7684\u795e\u79d8\u9762\u7eb1\u4e86.<\/p>\n<p>\u3000\u66f4\u591a\u5fae\u4fe1\u5f00\u53d1\u5165\u95e8\u5b66\u4e60\u603b\u7ed3\u76f8\u5173\u6587\u7ae0\u8bf7\u5173\u6ce8PHP\u4e2d\u6587\u7f51\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3000\u3000\u4e0a\u4e00\u7bc7\u300a\u5fae\u4fe1\u5f00\u53d1\u2014\u5fae\u4fe1\u5f00\u53d1\u73af\u5883\u642d\u5efa\u300b\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u4e86\u5fae\u4fe1\u5f00\u53d1\u7684\u51c6\u5907\u5de5\u4f5c\uff0c\u51c6\u5907\u5de5\u4f5c\u5b8c\u6210\u4e4b\u540e\uff0c\u5c31\u8981\u5f00\u59cb\u6b65\u5165\u6b63\u9898\u4e86\u3002 \u4e00\u3001\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u7684\u57fa\u672c\u539f\u7406 \u3000\u3000\u5728\u5f00\u59cb\u505a\u4e4b\u524d\uff0c\u5148\u7b80\u5355\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u7684\u57fa\u672c\u539f\u7406\u3002 \u3000\u3000\u5fae\u4fe1\u670d\u52a1\u5668\u5c31\u76f8\u5f53\u4e8e\u4e00\u4e2a\u8f6c\u53d1\u670d\u52a1\u5668\uff0c\u7ec8\u7aef\uff08\u624b\u673a\u3001Pad\u7b49\uff09\u53d1\u8d77\u8bf7\u6c42\u81f3\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u7136\u540e\u5c06\u8bf7\u6c42\u8f6c\u53d1\u7ed9\u6211\u4eec\u7684\u5e94\u7528\u670d\u52a1\u5668\u3002\u5e94\u7528\u670d\u52a1\u5668\u5904\u7406\u5b8c\u6bd5\u540e\uff0c\u5c06\u54cd\u5e94\u6570\u636e\u56de\u53d1\u7ed9\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u518d\u5c06\u5177\u4f53\u54cd\u5e94\u4fe1\u606f\u56de\u590d\u5230\u5fae\u4fe1App\u7ec8\u7aef\u3002 \u3000\u3000\u901a\u4fe1\u534f\u8bae\u4e3a\uff1aHTTP \u3000\u3000\u6570\u636e\u4f20\u8f93\u683c\u5f0f\u4e3a\uff1aXML \u3000\u3000\u5177\u4f53\u7684\u6d41\u7a0b\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u3000\u3000 \u3000\u3000\u6765\u4e00\u5f20\u66f4\u52a0\u76f4\u89c2\u7684\u56fe\u5427: \u3000\u3000 \u3000\u3000\u6211\u4eec\u9700\u8981\u505a\u7684\u4e8b\u60c5\uff0c\u5c31\u662f\u5bf9\u5fae\u4fe1\u670d\u52a1\u5668\u8f6c\u53d1\u7684HTTP\u8bf7\u6c42\u505a\u51fa\u54cd\u5e94\u3002\u5177\u4f53\u7684\u8bf7\u6c42\u5185\u5bb9\uff0c\u6211\u4eec\u6309\u7167\u7279\u5b9a\u7684XML\u683c\u5f0f\u53bb\u89e3\u6790\uff0c\u5904\u7406\u5b8c\u6bd5\u540e\uff0c\u4e5f\u8981\u6309\u7167\u7279\u5b9a\u7684XML\u683c\u5f0f\u8fd4\u56de\u3002 \u4e8c\u3001\u5fae\u4fe1\u516c\u4f17\u53f7\u63a5\u5165 \u3000\u3000\u5728\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u8005\u6587\u6863\u4e0a\uff0c\u5173\u4e8e\u516c\u4f17\u53f7\u63a5\u5165\u8fd9\u4e00\u8282\u5185\u5bb9\u5728\u63a5\u5165\u6307\u5357\u4e0a\u5199\u7684\u6bd4\u8f83\u8be6\u7ec6\u7684\uff0c\u6587\u6863\u4e2d\u8bf4\u63a5\u5165\u516c\u4f17\u53f7\u9700\u89813\u4e2a\u6b65\u9aa4\uff0c\u5206\u522b\u662f\uff1a \u3000\u30001\u3001\u586b\u5199\u670d\u52a1\u5668\u914d\u7f6e\u3000\u30002\u3001\u9a8c\u8bc1\u670d\u52a1\u5668\u5730\u5740\u7684\u6709\u6548\u6027\u3000\u30003\u3001\u4f9d\u636e\u63a5\u53e3\u6587\u6863\u5b9e\u73b0\u4e1a\u52a1\u903b\u8f91 \u3000\u3000\u5176\u5b9e\uff0c\u7b2c3\u6b65\u5df2\u7ecf\u4e0d\u80fd\u7b97\u505a\u516c\u4f17\u53f7\u63a5\u5165\u7684\u6b65\u9aa4\uff0c\u800c\u662f\u63a5\u5165\u4e4b\u540e\uff0c\u5f00\u53d1\u4eba\u5458\u53ef\u4ee5\u6839\u636e\u5fae\u4fe1\u516c\u4f17\u53f7\u63d0\u4f9b\u7684\u63a5\u53e3\u6240\u80fd\u505a\u7684\u4e00\u4e9b\u5f00\u53d1\u3002 \u3000\u3000\u7b2c1\u6b65\u4e2d\u670d\u52a1\u5668\u914d\u7f6e\u5305\u542b\u670d\u52a1\u5668\u5730\u5740\uff08URL\uff09\u3001Token\u548cEncodingAESKey\u3002 \u3000\u3000\u670d\u52a1\u5668\u5730\u5740\u5373\u516c\u4f17\u53f7\u540e\u53f0\u63d0\u4f9b\u4e1a\u52a1\u903b\u8f91\u7684\u5165\u53e3\u5730\u5740\uff0c\u76ee\u524d\u53ea\u652f\u630180\u7aef\u53e3\uff0c\u4e4b\u540e\u5305\u62ec\u63a5\u5165\u9a8c\u8bc1\u4ee5\u53ca\u4efb\u4f55\u5176\u5b83\u7684\u64cd\u4f5c\u7684\u8bf7\u6c42\uff08\u4f8b\u5982\u6d88\u606f\u7684\u53d1\u9001\u3001\u83dc\u5355\u7ba1\u7406\u3001\u7d20\u6750\u7ba1\u7406\u7b49\uff09\u90fd\u8981\u4ece\u8fd9\u4e2a\u5730\u5740\u8fdb\u5165\u3002\u63a5\u5165\u9a8c\u8bc1\u548c\u5176\u5b83\u8bf7\u6c42\u7684\u533a\u522b\u5c31\u662f\uff0c\u63a5\u5165\u9a8c\u8bc1\u65f6\u662fget\u8bf7\u6c42\uff0c\u5176\u5b83\u65f6\u5019\u662fpost\u8bf7\u6c42\uff1b \u3000\u3000Token\u53ef\u7531\u5f00\u53d1\u8005\u53ef\u4ee5\u4efb\u610f\u586b\u5199\uff0c\u7528\u4f5c\u751f\u6210\u7b7e\u540d\uff08\u8be5Token\u4f1a\u548c\u63a5\u53e3URL\u4e2d\u5305\u542b\u7684Token\u8fdb\u884c\u6bd4\u5bf9\uff0c\u4ece\u800c\u9a8c\u8bc1\u5b89\u5168\u6027\uff09\uff1b \u3000\u3000EncodingAESKey\u7531\u5f00\u53d1\u8005\u624b\u52a8\u586b\u5199\u6216\u968f\u673a\u751f\u6210\uff0c\u5c06\u7528\u4f5c\u6d88\u606f\u4f53\u52a0\u89e3\u5bc6\u5bc6\u94a5\u3002\u672c\u4f8b\u4e2d\u5168\u90e8\u4ee5\u672a\u52a0\u5bc6\u7684\u660e\u6587\u6d88\u606f\u65b9\u5f0f\uff0c\u4e0d\u6d89\u53ca\u6b64\u914d\u7f6e\u9879\u3002 \u3000\u3000\u7b2c2\u6b65\uff0c\u9a8c\u8bc1\u670d\u52a1\u5668\u5730\u5740\u7684\u6709\u6548\u6027\uff0c\u5f53\u70b9\u51fb\u201c\u63d0\u4ea4\u201d\u6309\u94ae\u540e\uff0c\u5fae\u4fe1\u670d\u52a1\u5668\u5c06\u53d1\u9001\u4e00\u4e2ahttp\u7684get\u8bf7\u6c42\u5230\u521a\u521a\u586b\u5199\u7684\u670d\u52a1\u5668\u5730\u5740\uff0c\u5e76\u4e14\u643a\u5e26\u56db\u4e2a\u53c2\u6570\uff1a \u3000\u3000 \u3000\u3000\u63a5\u5230\u8bf7\u6c42\u540e\uff0c\u6211\u4eec\u9700\u8981\u505a\u5982\u4e0b\u4e09\u6b65\uff0c\u82e5\u786e\u8ba4\u6b64\u6b21GET\u8bf7\u6c42\u6765\u81ea\u5fae\u4fe1\u670d\u52a1\u5668\uff0c\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u5426\u5219\u63a5\u5165\u5931\u8d25\u3002 \u3000\u30001. \u5c06token\u3001timestamp\u3001nonce\u4e09\u4e2a\u53c2\u6570\u8fdb\u884c\u5b57\u5178\u5e8f\u6392\u5e8f\u3000\u30002. \u5c06\u4e09\u4e2a\u53c2\u6570\u5b57\u7b26\u4e32\u62fc\u63a5\u6210\u4e00\u4e2a\u5b57\u7b26\u4e32\u8fdb\u884csha1\u52a0\u5bc6\u3000\u30003. \u5f00\u53d1\u8005\u83b7\u5f97\u52a0\u5bc6\u540e\u7684\u5b57\u7b26\u4e32\u53ef\u4e0esignature\u5bf9\u6bd4\uff0c\u6807\u8bc6\u8be5\u8bf7\u6c42\u6765\u6e90\u4e8e\u5fae\u4fe1 \u3000\u3000\u4e0b\u9762\u6211\u4eec\u7528Java\u4ee3\u7801\u6765\u6f14\u793a\u4e00\u4e0b\u8fd9\u4e2a\u9a8c\u8bc1\u8fc7\u7a0b \u3000\u3000\u4f7f\u7528IDE(Eclipse\u6216\u8005IntelliJ IDEA)\u521b\u5efa\u4e00\u4e2aJavaWeb\u9879\u76ee,\u8fd9\u91cc\u6211\u4f7f\u7528\u7684\u662fIntelliJ IDEA,\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a: \u3000\u3000 \u3000\u3000\u7f16\u5199\u4e00\u4e2aservlevt,\u5728\u5176\u4e2d\u7684doGet\u65b9\u6cd5\u4e2d\u5b9a\u4e49\u6821\u9a8c\u65b9\u6cd5,\u5177\u4f53\u4ee3\u7801\u5982\u4e0b: package&nbsp;me.gacl.wx.web.servlet; import&nbsp;javax.servlet.ServletException; import&nbsp;javax.servlet.annotation.WebServlet; import&nbsp;javax.servlet.http.HttpServlet; import&nbsp;javax.servlet.http.HttpServletRequest; import&nbsp;javax.servlet.http.HttpServletResponse; import&nbsp;java.io.IOException; import&nbsp;java.security.MessageDigest; import&nbsp;java.security.NoSuchAlgorithmException; import&nbsp;java.util.Arrays; \/** &nbsp;*&nbsp;Created&nbsp;by&nbsp;xdp&nbsp;on&nbsp;2016\/1\/25. &nbsp;*&nbsp;\u4f7f\u7528@WebServlet\u6ce8\u89e3\u914d\u7f6eWxServlet,urlPatterns\u5c5e\u6027\u6307\u660e\u4e86WxServlet\u7684\u8bbf\u95ee\u8def\u5f84 &nbsp;*\/ @WebServlet(urlPatterns=&#8221;\/WxServlet&#8221;) public&nbsp;class&nbsp;WxServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;\/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Token\u53ef\u7531\u5f00\u53d1\u8005\u53ef\u4ee5\u4efb\u610f\u586b\u5199\uff0c\u7528\u4f5c\u751f\u6210\u7b7e\u540d\uff08\u8be5Token\u4f1a\u548c\u63a5\u53e3URL\u4e2d\u5305\u542b\u7684Token\u8fdb\u884c\u6bd4\u5bf9\uff0c\u4ece\u800c\u9a8c\u8bc1\u5b89\u5168\u6027\uff09 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6bd4\u5982\u8fd9\u91cc\u6211\u5c06Token\u8bbe\u7f6e\u4e3agacl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;TOKEN&nbsp;=&nbsp;&#8220;gacl&#8221;; &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;} [&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-28709","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28709","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=28709"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28709\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=28709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=28709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=28709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}