{"id":29046,"date":"2024-11-25T11:37:26","date_gmt":"2024-11-25T03:37:26","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29046\/"},"modified":"2024-11-25T11:37:26","modified_gmt":"2024-11-25T03:37:26","slug":"%e5%be%ae%e4%bf%a1%e5%bc%80%e5%8f%91%e4%b9%8b%e4%bd%bf%e7%94%a8java%e8%8e%b7%e5%8f%96%e7%ad%be%e5%90%8dsignature%e5%9b%be%e6%96%87%e4%bb%8b%e7%bb%8d","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29046\/","title":{"rendered":"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b<\/p>\n<p><strong>\u4e00\u3001\u524d\u8a00<\/strong><\/p>\n<p>\u5fae\u4fe1\u8c03\u7528\u9a8c\u8bc1\u6700\u7ec8\u9700\u8981\u7528\u5230\u7684\u4e09\u4e2a\u53c2\u6570noncestr\u3001stamp\u3001signature\uff1a<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/013\/70d920cac84300ebc8ef957c098a3309-0.jpg\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd\u63d2\u56fe\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd\u63d2\u56fe\" \/><\/p>\n<p>\u63a5\u4e0b\u6765\u5c06\u4f1a\u7ed9\u51fa\u83b7\u53d6\u8fd9\u4e09\u4e2a\u53c2\u6570\u7684\u8be6\u7ec6\u4ee3\u7801 <br \/>\u672c\u6587\u7684\u73af\u5883 + maven <br \/>\u672c\u6587\u4f7f\u7528\u5230\u7684\u6280\u672fHttpClient\u3001\u8f6c\u3001\u52a0\u5bc6<\/p>\n<p><strong>\u4e8c\u3001\u9700\u8981\u7528\u5230\u7684jar\u5305<\/strong><\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<p>maven\u4f9d\u8d56\u7684\u5305\u6709\uff1a<\/p>\n<p>1\u3001HttpClient\u5305\u4f9d\u8d56<\/p>\n<\/p>\n<pre>&lt;dependency&gt;\r\n&nbsp;&lt;groupid&gt;org.apache.httpcomponents&lt;\/groupid&gt;\r\n&nbsp;&lt;artifactid&gt;httpcore&lt;\/artifactid&gt;\r\n&nbsp;&lt;version&gt;4.4.3&lt;\/version&gt;&lt;\/dependency&gt;&lt;dependency&gt;\r\n&nbsp;&lt;groupid&gt;org.apache.httpcomponents&lt;\/groupid&gt;\r\n&nbsp;&lt;artifactid&gt;httpclient&lt;\/artifactid&gt;\r\n&nbsp;&lt;version&gt;4.5.1&lt;\/version&gt;&lt;\/dependency&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>2\u3001json\u8f6cmap\u76f8\u5173\u5305\u4f9d\u8d56<\/p>\n<\/p>\n<pre>&lt;dependency&gt;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&lt;groupid&gt;net.sf.json-lib&lt;\/groupid&gt;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&lt;artifactid&gt;json-lib&lt;\/artifactid&gt;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&lt;version&gt;2.4&lt;\/version&gt;&nbsp;\r\n&nbsp;&nbsp;&lt;classifier&gt;jdk15&lt;\/classifier&gt;&nbsp;\r\n&lt;\/dependency&gt;&lt;dependency&gt;\r\n&nbsp;&nbsp;&lt;groupid&gt;xom&lt;\/groupid&gt;\r\n&nbsp;&nbsp;&lt;artifactid&gt;xom&lt;\/artifactid&gt;\r\n&nbsp;&nbsp;&lt;version&gt;1.2.5&lt;\/version&gt;&lt;\/dependency&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\u4e09\u3001\u8fd0\u884c\u7ed3\u679c<\/strong><\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/013\/27580f4f46549f9857f4bf000e03229b-1.jpg\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd\u63d2\u56fe1\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd\u63d2\u56fe1\" \/><\/p>\n<p><strong>\u56db\u3001\u8be6\u7ec6\u4ee3\u7801<\/strong><\/p>\n<\/p>\n<pre>package&nbsp;com.luo.util;\r\n\r\nimport&nbsp;java.io.IOException;\r\nimport&nbsp;java.io.UnsupportedEncodingException;\r\nimport&nbsp;java.security.MessageDigest;\r\nimport&nbsp;java.security.NoSuchAlgorithmException;\r\nimport&nbsp;java.util.ArrayList;\r\nimport&nbsp;java.util.HashMap;\r\nimport&nbsp;java.util.Iterator;\r\nimport&nbsp;java.util.List;\r\nimport&nbsp;java.util.Map;\r\nimport&nbsp;java.util.Set;\r\nimport&nbsp;java.util.UUID;\r\nimport&nbsp;net.sf.json.JSONObject;\r\nimport&nbsp;org.apache.http.HttpEntity;\r\nimport&nbsp;org.apache.http.HttpResponse;\r\nimport&nbsp;org.apache.http.NameValuePair;\r\nimport&nbsp;org.apache.http.ParseException;\r\nimport&nbsp;org.apache.http.client.ClientProtocolException;\r\nimport&nbsp;org.apache.http.client.entity.UrlEncodedFormEntity;\r\nimport&nbsp;org.apache.http.client.methods.HttpGet;\r\nimport&nbsp;org.apache.http.client.methods.HttpPost;\r\nimport&nbsp;org.apache.http.client.methods.HttpUriRequest;\r\nimport&nbsp;org.apache.http.impl.client.DefaultHttpClient;\r\nimport&nbsp;org.apache.http.message.BasicNameValuePair;\r\nimport&nbsp;org.apache.http.protocol.HTTP;\r\nimport&nbsp;org.apache.http.util.EntityUtils;\r\n\r\npublic&nbsp;class&nbsp;HttpXmlClient&nbsp;{\r\n\r\n&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;post(String&nbsp;url,&nbsp;Map&lt;string&gt;&nbsp;params)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;DefaultHttpClient&nbsp;httpclient&nbsp;=&nbsp;new&nbsp;DefaultHttpClient();\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;body&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpPost&nbsp;post&nbsp;=&nbsp;postForm(url,&nbsp;params);\r\n&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;=&nbsp;invoke(httpclient,&nbsp;post);\r\n&nbsp;&nbsp;&nbsp;&nbsp;httpclient.getConnectionManager().shutdown();\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;body;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;get(String&nbsp;url)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;DefaultHttpClient&nbsp;httpclient&nbsp;=&nbsp;new&nbsp;DefaultHttpClient();\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;body&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;get&nbsp;=&nbsp;new&nbsp;HttpGet(url);\r\n&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;=&nbsp;invoke(httpclient,&nbsp;get);\r\n&nbsp;&nbsp;&nbsp;&nbsp;httpclient.getConnectionManager().shutdown();\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;body;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;invoke(DefaultHttpClient&nbsp;httpclient,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpUriRequest&nbsp;httpost)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse&nbsp;response&nbsp;=&nbsp;sendRequest(httpclient,&nbsp;httpost);\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;body&nbsp;=&nbsp;paseResponse(response);\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;body;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;paseResponse(HttpResponse&nbsp;response)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity&nbsp;entity&nbsp;=&nbsp;response.getEntity();\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;charset&nbsp;=&nbsp;EntityUtils.getContentCharSet(entity);\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;body&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;=&nbsp;EntityUtils.toString(entity);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(ParseException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;body;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;private&nbsp;static&nbsp;HttpResponse&nbsp;sendRequest(DefaultHttpClient&nbsp;httpclient,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpUriRequest&nbsp;httpost)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse&nbsp;response&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;httpclient.execute(httpost);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(ClientProtocolException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;response;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;private&nbsp;static&nbsp;HttpPost&nbsp;postForm(String&nbsp;url,&nbsp;Map&lt;string&gt;&nbsp;params)&nbsp;{\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;HttpPost&nbsp;httpost&nbsp;=&nbsp;new&nbsp;HttpPost(url);\r\n&nbsp;&nbsp;&nbsp;&nbsp;List&lt;namevaluepair&gt;&nbsp;nvps&nbsp;=&nbsp;new&nbsp;ArrayList&lt;namevaluepair&gt;();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;Set&lt;string&gt;&nbsp;keySet&nbsp;=&nbsp;params.keySet();\r\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;key&nbsp;:&nbsp;keySet)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nvps.add(new&nbsp;BasicNameValuePair(key,&nbsp;params.get(key)));\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpost.setEntity(new&nbsp;UrlEncodedFormEntity(nvps,&nbsp;HTTP.UTF_8));\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;httpost;\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6access_token\r\n&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;string&gt;&nbsp;params&nbsp;=&nbsp;new&nbsp;HashMap&lt;string&gt;();\r\n&nbsp;&nbsp;&nbsp;&nbsp;params.put(\"corpid\",\"wx5f24fa0db1819ea2\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;params.put(\"corpsecret\",\"uQtWzF0bQtl2KRHX0amekjpq8L0aO96LSpSNfctOBLRbuYPO4DUBhMn0_v2jHS-9\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xml&nbsp;=&nbsp;HttpXmlClient.post(\"https:\/\/qyapi.weixin.qq.com\/cgi-bin\/gettoken\",params);\r\n&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;jsonMap&nbsp;=&nbsp;JSONObject.fromObject(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;string&gt;&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap&lt;string&gt;();\r\n&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;string&gt;&nbsp;it&nbsp;=&nbsp;jsonMap.keys();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;while(it.hasNext())&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;(String)&nbsp;it.next();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;u&nbsp;=&nbsp;jsonMap.get(key).toString();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(key,&nbsp;u);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;access_token&nbsp;=&nbsp;map.get(\"access_token\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"access_token=\"&nbsp;+&nbsp;access_token);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6ticket\r\n&nbsp;&nbsp;&nbsp;&nbsp;params.put(\"access_token\",access_token);\r\n&nbsp;&nbsp;&nbsp;&nbsp;xml&nbsp;=&nbsp;HttpXmlClient.post(\"https:\/\/qyapi.weixin.qq.com\/cgi-bin\/get_jsapi_ticket\",params);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;jsonMap&nbsp;=&nbsp;JSONObject.fromObject(xml);\r\n&nbsp;&nbsp;&nbsp;&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap&lt;string&gt;();\r\n&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;=&nbsp;jsonMap.keys();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;while(it.hasNext())&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;(String)&nbsp;it.next();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;u&nbsp;=&nbsp;jsonMap.get(key).toString();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(key,&nbsp;u);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jsapi_ticket&nbsp;=&nbsp;map.get(\"ticket\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"jsapi_ticket=\"&nbsp;+&nbsp;jsapi_ticket);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6\u7b7e\u540dsignature\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;noncestr&nbsp;=&nbsp;UUID.randomUUID().toString();\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;timestamp&nbsp;=&nbsp;Long.toString(System.currentTimeMillis()&nbsp;\/&nbsp;1000);\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url=\"http:\/\/mp.weixin.qq.com\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;\"jsapi_ticket=\"&nbsp;+&nbsp;jsapi_ticket&nbsp;+\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"&amp;amp;noncestr=\"&nbsp;+&nbsp;noncestr&nbsp;+\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"&amp;amp;timestamp=\"&nbsp;+&nbsp;timestamp&nbsp;+\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"&amp;amp;url=\"&nbsp;+&nbsp;url;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/sha1\u52a0\u5bc6\r\n&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;signature&nbsp;=&nbsp;SHA1(str);\r\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"noncestr=\"&nbsp;+&nbsp;noncestr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"timestamp=\"&nbsp;+&nbsp;timestamp);\r\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"signature=\"&nbsp;+&nbsp;signature);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6700\u7ec8\u83b7\u5f97\u8c03\u7528\u5fae\u4fe1js\u63a5\u53e3\u9a8c\u8bc1\u9700\u8981\u7684\u4e09\u4e2a\u53c2\u6570noncestr\u3001timestamp\u3001signature\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**&nbsp;\r\n&nbsp;&nbsp;&nbsp;*&nbsp;@author\uff1a\u7f57\u56fd\u8f89&nbsp;\r\n&nbsp;&nbsp;&nbsp;*&nbsp;@date\uff1a&nbsp;2015\u5e7412\u670817\u65e5&nbsp;\u4e0a\u53489:24:43&nbsp;\r\n&nbsp;&nbsp;&nbsp;*&nbsp;@description\uff1a&nbsp;SHA\u3001SHA1\u52a0\u5bc6\r\n&nbsp;&nbsp;&nbsp;*&nbsp;@parameter\uff1a&nbsp;&nbsp;str\uff1a\u5f85\u52a0\u5bc6\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;&nbsp;*&nbsp;@return\uff1a&nbsp;\u52a0\u5bc6\u4e32\r\n&nbsp;&nbsp;**\/\r\n&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;SHA1(String&nbsp;str)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;digest&nbsp;=&nbsp;java.security.MessageDigest\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getInstance(\"SHA-1\");&nbsp;\/\/\u5982\u679c\u662fSHA\u52a0\u5bc6\u53ea\u9700\u8981\u5c06\"SHA-1\"\u6539\u6210\"SHA\"\u5373\u53ef\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digest.update(str.getBytes());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;messageDigest[]&nbsp;=&nbsp;digest.digest();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;Create&nbsp;Hex&nbsp;String\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;hexStr&nbsp;=&nbsp;new&nbsp;StringBuffer();\r\n&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;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;p&gt;&lt;\/p&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/string&gt;&lt;\/namevaluepair&gt;&lt;\/namevaluepair&gt;&lt;\/string&gt;&lt;\/string&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\u56fe\u6587\u4ecb\u7ecd\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\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5f00\u53d1\u4e4b\u4f7f\u7528java\u83b7\u53d6\u7b7e\u540dsignature\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b \u4e00\u3001\u524d\u8a00 \u5fae\u4fe1\u8c03\u7528\u9a8c\u8bc1\u6700\u7ec8\u9700\u8981\u7528\u5230\u7684\u4e09\u4e2a\u53c2\u6570noncestr\u3001stamp\u3001signature\uff1a \u63a5\u4e0b\u6765\u5c06\u4f1a\u7ed9\u51fa\u83b7\u53d6\u8fd9\u4e09\u4e2a\u53c2\u6570\u7684\u8be6\u7ec6\u4ee3\u7801 \u672c\u6587\u7684\u73af\u5883 + maven \u672c\u6587\u4f7f\u7528\u5230\u7684\u6280\u672fHttpClient\u3001\u8f6c\u3001\u52a0\u5bc6 \u4e8c\u3001\u9700\u8981\u7528\u5230\u7684jar\u5305 \u7acb\u5373\u5b66\u4e60\u201c\u201d\uff1b maven\u4f9d\u8d56\u7684\u5305\u6709\uff1a 1\u3001HttpClient\u5305\u4f9d\u8d56 &lt;dependency&gt; &nbsp;&lt;groupid&gt;org.apache.httpcomponents&lt;\/groupid&gt; &nbsp;&lt;artifactid&gt;httpcore&lt;\/artifactid&gt; &nbsp;&lt;version&gt;4.4.3&lt;\/version&gt;&lt;\/dependency&gt;&lt;dependency&gt; &nbsp;&lt;groupid&gt;org.apache.httpcomponents&lt;\/groupid&gt; &nbsp;&lt;artifactid&gt;httpclient&lt;\/artifactid&gt; &nbsp;&lt;version&gt;4.5.1&lt;\/version&gt;&lt;\/dependency&gt; \u767b\u5f55\u540e\u590d\u5236 2\u3001json\u8f6cmap\u76f8\u5173\u5305\u4f9d\u8d56 &lt;dependency&gt;&nbsp;&nbsp; &nbsp;&nbsp;&lt;groupid&gt;net.sf.json-lib&lt;\/groupid&gt;&nbsp;&nbsp; &nbsp;&nbsp;&lt;artifactid&gt;json-lib&lt;\/artifactid&gt;&nbsp;&nbsp; &nbsp;&nbsp;&lt;version&gt;2.4&lt;\/version&gt;&nbsp; &nbsp;&nbsp;&lt;classifier&gt;jdk15&lt;\/classifier&gt;&nbsp; &lt;\/dependency&gt;&lt;dependency&gt; &nbsp;&nbsp;&lt;groupid&gt;xom&lt;\/groupid&gt; &nbsp;&nbsp;&lt;artifactid&gt;xom&lt;\/artifactid&gt; &nbsp;&nbsp;&lt;version&gt;1.2.5&lt;\/version&gt;&lt;\/dependency&gt; \u767b\u5f55\u540e\u590d\u5236 \u4e09\u3001\u8fd0\u884c\u7ed3\u679c \u56db\u3001\u8be6\u7ec6\u4ee3\u7801 package&nbsp;com.luo.util; import&nbsp;java.io.IOException; import&nbsp;java.io.UnsupportedEncodingException; import&nbsp;java.security.MessageDigest; import&nbsp;java.security.NoSuchAlgorithmException; import&nbsp;java.util.ArrayList; import&nbsp;java.util.HashMap; import&nbsp;java.util.Iterator; import&nbsp;java.util.List; import&nbsp;java.util.Map; import&nbsp;java.util.Set; import&nbsp;java.util.UUID; import&nbsp;net.sf.json.JSONObject; import&nbsp;org.apache.http.HttpEntity; import&nbsp;org.apache.http.HttpResponse; import&nbsp;org.apache.http.NameValuePair; import&nbsp;org.apache.http.ParseException; import&nbsp;org.apache.http.client.ClientProtocolException; import&nbsp;org.apache.http.client.entity.UrlEncodedFormEntity; import&nbsp;org.apache.http.client.methods.HttpGet; import&nbsp;org.apache.http.client.methods.HttpPost; import&nbsp;org.apache.http.client.methods.HttpUriRequest; [&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-29046","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29046","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=29046"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29046\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}