{"id":29507,"date":"2024-11-25T11:06:52","date_gmt":"2024-11-25T03:06:52","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29507\/"},"modified":"2024-11-25T11:06:52","modified_gmt":"2024-11-25T03:06:52","slug":"%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%b9%b3%e5%8f%b0%e5%bc%80%e5%8f%91%e4%b9%8b%e8%8e%b7%e5%be%97accesstoken-net%e8%af%a6%e8%a7%a3%e5%8f%8a%e5%ae%9e%e4%be%8b","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29507\/","title":{"rendered":"\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u4e4b\u83b7\u5f97ACCESSTOKEN .Net\u8be6\u89e3\u53ca\u5b9e\u4f8b"},"content":{"rendered":"<p style=\"text-align: left\">\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u5b9e\u6218Java\u7248\u4e4b\u5fae\u4fe1\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f \u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b<\/p>\n<p style=\"text-align: left\">\u5728\u5173\u6ce8\u8005\u4e0e\u516c\u4f17\u53f7\u4ea7\u751f\u6d88\u606f\u4ea4\u4e92\u540e\uff0c\u516c\u4f17\u53f7\u53ef\u83b7\u5f97\u5173\u6ce8\u8005\u7684OpenID\uff08\u52a0\u5bc6\u540e\u7684\u5fae\u4fe1\u53f7\uff0c\u6bcf\u4e2a\u7528\u6237\u5bf9\u6bcf\u4e2a\u516c\u4f17\u53f7\u7684OpenID\u662f\u552f\u4e00\u7684\u3002\u5bf9\u4e8e\u4e0d\u540c\u516c\u4f17\u53f7\uff0c\u540c\u4e00\u7528\u6237\u7684openid\u4e0d\u540c\uff09\u3002<\/p>\n<p style=\"text-align: left\">\u516c\u4f17\u53f7\u53ef\u901a\u8fc7\u672c\u6765\u6839\u636eOpenID\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f\uff0c\u5305\u62ec\u6635\u79f0\u3001\u5934\u50cf\u3001\u6027\u522b\u3001\u6240\u5728\u57ce\u5e02\u3001\u8bed\u8a00\u548c\u5173\u6ce8\u65f6\u95f4\u3002<\/p>\n<p style=\"text-align: left\">\u5f00\u53d1\u8005\u53ef\u901a\u8fc7OpenID\u6765\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f\u3002\u8bf7\u4f7f\u7528https\u534f\u8bae\u3002<\/p>\n<p style=\"text-align: left\">\u6211\u4eec\u53ef\u4ee5\u770b\u770b\u5b98\u65b9\u7684\u6587\u6863\uff1a\u83b7\u53d6\u7528\u6237\u7684\u57fa\u672c\u4fe1\u606f\u3002<\/p>\n<p style=\"text-align: left\">\u63a5\u53e3\u8c03\u7528\u8bf7\u6c42\u8bf4\u660e<\/p>\n<p style=\"text-align: left\">&nbsp;http\u8bf7\u6c42\u65b9\u5f0f: GET<\/p>\n<p style=\"text-align: left\">api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&amp;openid=OPENID&amp;lang=zh_CN<\/p>\n<p style=\"text-align: left\"><strong>\u53c2\u6570\u8bf4\u660e<\/strong><\/p>\n<table border=\"1\" style=\"width: 640px\">\n<tbody>\n<tr>\n<th>\u53c2\u6570<\/th>\n<th>\u662f\u5426\u5fc5\u987b<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<tr>\n<td>access_token<\/td>\n<td>\u662f<\/td>\n<td>\u8c03\u7528\u63a5\u53e3\u51ed\u8bc1<\/td>\n<\/tr>\n<tr>\n<td>openid<\/td>\n<td>\u662f<\/td>\n<td>\u666e\u901a\u7528\u6237\u7684\u6807\u8bc6\uff0c\u5bf9\u5f53\u524d\u516c\u4f17\u53f7\u552f\u4e00<\/td>\n<\/tr>\n<tr>\n<td>lang<\/td>\n<td>\u5426<\/td>\n<td>\u8fd4\u56de\u56fd\u5bb6\u5730\u533a\u8bed\u8a00\u7248\u672c\uff0czh_CN \u7b80\u4f53\uff0czh_TW \u7e41\u4f53\uff0cen \u82f1\u8bed<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: left\"><strong>\u8fd4\u56de\u8bf4\u660e<\/strong><\/p>\n<p style=\"text-align: left\">\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u5fae\u4fe1\u4f1a\u8fd4\u56de\u4e0b\u8ff0\u6570\u636e\u5305\u7ed9\u516c\u4f17\u53f7\uff1a<\/p>\n<pre> {\r\n  \"subscribe\": 1, \r\n  \"openid\": \"o6_bmjrPTlm6_2sgVt7hMZOPfL2M\", \r\n  \"nickname\": \"Band\", \r\n  \"sex\": 1, \r\n  \"language\": \"zh_CN\", \r\n  \"city\": \"\u5e7f\u5dde\", \r\n  \"province\": \"\u5e7f\u4e1c\", \r\n  \"country\": \"\u4e2d\u56fd\", \r\n  \"headimgurl\":  \"http:\/\/wx.qlogo.cn\/mmopen\/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe\/0\", \r\n  \"subscribe_time\": 1382694957,\r\n  \"unionid\": \" o6_bmasdasdsad6_2sgVt7hMZOPfL\"\r\n  \"remark\": \"\",\r\n  \"groupid\": 0\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\"><strong>\u53c2\u6570\u8bf4\u660e<\/strong><\/p>\n<table border=\"1\" style=\"width: 640px\">\n<tbody>\n<tr>\n<th>\u53c2\u6570<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<tr>\n<td>subscribe<\/td>\n<td>\u7528\u6237\u662f\u5426\u8ba2\u9605\u8be5\u516c\u4f17\u53f7\u6807\u8bc6\uff0c\u503c\u4e3a0\u65f6\uff0c\u4ee3\u8868\u6b64\u7528\u6237\u6ca1\u6709\u5173\u6ce8\u8be5\u516c\u4f17\u53f7\uff0c\u62c9\u53d6\u4e0d\u5230\u5176\u4f59\u4fe1\u606f\u3002<\/td>\n<\/tr>\n<tr>\n<td>openid<\/td>\n<td>\u7528\u6237\u7684\u6807\u8bc6\uff0c\u5bf9\u5f53\u524d\u516c\u4f17\u53f7\u552f\u4e00<\/td>\n<\/tr>\n<tr>\n<td>nickname<\/td>\n<td>\u7528\u6237\u7684\u6635\u79f0<\/td>\n<\/tr>\n<tr>\n<td>sex<\/td>\n<td>\u7528\u6237\u7684\u6027\u522b\uff0c\u503c\u4e3a1\u65f6\u662f\u7537\u6027\uff0c\u503c\u4e3a2\u65f6\u662f\u5973\u6027\uff0c\u503c\u4e3a0\u65f6\u662f\u672a\u77e5<\/td>\n<\/tr>\n<tr>\n<td>city<\/td>\n<td>\u7528\u6237\u6240\u5728\u57ce\u5e02<\/td>\n<\/tr>\n<tr>\n<td>country<\/td>\n<td>\u7528\u6237\u6240\u5728\u56fd\u5bb6<\/td>\n<\/tr>\n<tr>\n<td>province<\/td>\n<td>\u7528\u6237\u6240\u5728\u7701\u4efd<\/td>\n<\/tr>\n<tr>\n<td>language<\/td>\n<td>\u7528\u6237\u7684\u8bed\u8a00\uff0c\u7b80\u4f53\u4e2d\u6587\u4e3azh_CN<\/td>\n<\/tr>\n<tr>\n<td>headimgurl<\/td>\n<td>\u7528\u6237\u5934\u50cf\uff0c\u6700\u540e\u4e00\u4e2a\u6570\u503c\u4ee3\u8868\u6b63\u65b9\u5f62\u5934\u50cf\u5927\u5c0f\uff08\u67090\u300146\u300164\u300196\u3001132\u6570\u503c\u53ef\u9009\uff0c0\u4ee3\u8868640*640\u6b63\u65b9\u5f62\u5934\u50cf\uff09\uff0c\u7528\u6237\u6ca1\u6709\u5934\u50cf\u65f6\u8be5\u9879\u4e3a\u7a7a\u3002\u82e5\u7528\u6237\u66f4\u6362\u5934\u50cf\uff0c\u539f\u6709\u5934\u50cfURL\u5c06\u5931\u6548\u3002<\/td>\n<\/tr>\n<tr>\n<td>subscribe_time<\/td>\n<td>\u7528\u6237\u5173\u6ce8\u65f6\u95f4\uff0c\u4e3a\u3002\u5982\u679c\u7528\u6237\u66fe\u591a\u6b21\u5173\u6ce8\uff0c\u5219\u53d6\u6700\u540e\u5173\u6ce8\u65f6\u95f4<\/td>\n<\/tr>\n<tr>\n<td>unionid<\/td>\n<td>\u53ea\u6709\u5728\u7528\u6237\u5c06\u516c\u4f17\u53f7\u7ed1\u5b9a\u5230\u5fae\u4fe1\u5f00\u653e\u5e73\u53f0\u5e10\u53f7\u540e\uff0c\u624d\u4f1a\u51fa\u73b0\u8be5\u5b57\u6bb5\u3002\u8be6\u89c1\uff1a\u83b7\u53d6\u7528\u6237\u4e2a\u4eba\u4fe1\u606f\uff08UnionID\u673a\u5236\uff09<\/td>\n<\/tr>\n<tr>\n<td>remark<\/td>\n<td>\u516c\u4f17\u53f7\u8fd0\u8425\u8005\u5bf9\u7c89\u4e1d\u7684\u5907\u6ce8\uff0c\u516c\u4f17\u53f7\u8fd0\u8425\u8005\u53ef\u5728\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u754c\u9762\u5bf9\u7c89\u4e1d\u6dfb\u52a0\u5907\u6ce8<\/td>\n<\/tr>\n<tr>\n<td>groupid<\/td>\n<td>\u7528\u6237\u6240\u5728\u7684ID<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: left\">\u9519\u8bef\u65f6\u5fae\u4fe1\u4f1a\u8fd4\u56de\u9519\u8bef\u7801\u7b49\u4fe1\u606f\uff0cJSON\u6570\u636e\u5305\u793a\u4f8b\u5982\u4e0b\uff08\u8be5\u793a\u4f8b\u4e3aAppID\u65e0\u6548\u9519\u8bef\uff09:<\/p>\n<pre> {\"errcode\":40013,\"errmsg\":\"invalid appid\"}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\">\u6839\u636e\u4e0a\u9762\u7684\u4fe1\u606f\uff0c\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u7528\u6237\u4fe1\u606f\u7c7b\u6765\u5b58\u653e\u7528\u6237\u7684\u57fa\u672c\u4fe1\u606f\u3002<\/p>\n<pre>package com.souvc.weixin.pojo;\r\n\/**\r\n* \u7c7b\u540d: WeixinUserInfo &lt;\/br&gt;\r\n* \u63cf\u8ff0: \u5fae\u4fe1\u7528\u6237\u7684\u57fa\u672c\u4fe1\u606f &lt;\/br&gt;\r\n* \u5f00\u53d1\u4eba\u5458\uff1a souvc &lt;\/br&gt;\r\n* \u521b\u5efa\u65f6\u95f4\uff1a 2015-11-27 &lt;\/br&gt;\r\n* \u53d1\u5e03\u7248\u672c\uff1aV1.0 &lt;\/br&gt;\r\n *\/\r\npublic class WeixinUserInfo {\r\n  \/\/ \u7528\u6237\u7684\u6807\u8bc6\r\n  private String openId;\r\n  \/\/ \u5173\u6ce8\u72b6\u6001\uff081\u662f\u5173\u6ce8\uff0c0\u662f\u672a\u5173\u6ce8\uff09\uff0c\u672a\u5173\u6ce8\u65f6\u83b7\u53d6\u4e0d\u5230\u5176\u4f59\u4fe1\u606f\r\n  private int subscribe;\r\n  \/\/ \u7528\u6237\u5173\u6ce8\u65f6\u95f4\uff0c\u4e3a\u65f6\u95f4\u6233\u3002\u5982\u679c\u7528\u6237\u66fe\u591a\u6b21\u5173\u6ce8\uff0c\u5219\u53d6\u6700\u540e\u5173\u6ce8\u65f6\u95f4\r\n  private String subscribeTime;\r\n  \/\/ \u6635\u79f0\r\n  private String nickname;\r\n  \/\/ \u7528\u6237\u7684\u6027\u522b\uff081\u662f\u7537\u6027\uff0c2\u662f\u5973\u6027\uff0c0\u662f\u672a\u77e5\uff09\r\n  private int sex;\r\n  \/\/ \u7528\u6237\u6240\u5728\u56fd\u5bb6\r\n  private String country;\r\n  \/\/ \u7528\u6237\u6240\u5728\u7701\u4efd\r\n  private String province;\r\n  \/\/ \u7528\u6237\u6240\u5728\u57ce\u5e02\r\n  private String city;\r\n  \/\/ \u7528\u6237\u7684\u8bed\u8a00\uff0c\u7b80\u4f53\u4e2d\u6587\u4e3azh_CN\r\n  private String language;\r\n  \/\/ \u7528\u6237\u5934\u50cf\r\n  private String headImgUrl;\r\n  public String getOpenId() {\r\n    return openId;\r\n  }\r\n  public void setOpenId(String openId) {\r\n    this.openId = openId;\r\n  }\r\n  public int getSubscribe() {\r\n    return subscribe;\r\n  }\r\n  public void setSubscribe(int subscribe) {\r\n    this.subscribe = subscribe;\r\n  }\r\n  public String getSubscribeTime() {\r\n    return subscribeTime;\r\n  }\r\n  public void setSubscribeTime(String subscribeTime) {\r\n    this.subscribeTime = subscribeTime;\r\n  }\r\n  public String getNickname() {\r\n    return nickname;\r\n  }\r\n  public void setNickname(String nickname) {\r\n    this.nickname = nickname;\r\n  }\r\n  public int getSex() {\r\n    return sex;\r\n  }\r\n  public void setSex(int sex) {\r\n    this.sex = sex;\r\n  }\r\n  public String getCountry() {\r\n    return country;\r\n  }\r\n  public void setCountry(String country) {\r\n    this.country = country;\r\n  }\r\n  public String getProvince() {\r\n    return province;\r\n  }\r\n  public void setProvince(String province) {\r\n    this.province = province;\r\n  }\r\n  public String getCity() {\r\n    return city;\r\n  }\r\n  public void setCity(String city) {\r\n    this.city = city;\r\n  }\r\n  public String getLanguage() {\r\n    return language;\r\n  }\r\n  public void setLanguage(String language) {\r\n    this.language = language;\r\n  }\r\n  public String getHeadImgUrl() {\r\n    return headImgUrl;\r\n  }\r\n  public void setHeadImgUrl(String headImgUrl) {\r\n    this.headImgUrl = headImgUrl;\r\n  }\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\">\u6211\u4eec\u5148\u6765\u770b\u770b\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u7684\u63a5\u53e3\uff1a<\/p>\n<p style=\"text-align: left\">https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&#038;openid=OPENID&#038;lang=zh_CN<\/p>\n<p style=\"text-align: left\">\u6839\u636e\u5206\u6790\uff0c\u83b7\u53d6\u7528\u6237\u7684\u57fa\u672c\u4fe1\u606f\u9700\u8981\u4e00\u4e2atoken\u3002<\/p>\n<pre>package com.souvc.weixin.pojo;\r\n\/**\r\n* \u7c7b\u540d: Token &lt;\/br&gt;\r\n* \u63cf\u8ff0: \u51ed\u8bc1 &lt;\/br&gt;\r\n* \u5f00\u53d1\u4eba\u5458\uff1a souvc &lt;\/br&gt;\r\n* \u521b\u5efa\u65f6\u95f4\uff1a 2015-11-27 &lt;\/br&gt;\r\n* \u53d1\u5e03\u7248\u672c\uff1aV1.0 &lt;\/br&gt;\r\n *\/\r\npublic class Token {\r\n  \/\/ \u63a5\u53e3\u8bbf\u95ee\u51ed\u8bc1\r\n  private String accessToken;\r\n  \/\/ \u51ed\u8bc1\u6709\u6548\u671f\uff0c\u5355\u4f4d\uff1a\u79d2\r\n  private int expiresIn;\r\n  public String getAccessToken() {\r\n    return accessToken;\r\n  }\r\n  public void setAccessToken(String accessToken) {\r\n    this.accessToken = accessToken;\r\n  }\r\n  public int getExpiresIn() {\r\n    return expiresIn;\r\n  }\r\n  public void setExpiresIn(int expiresIn) {\r\n    this.expiresIn = expiresIn;\r\n  }\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\">https\u8bf7\u6c42\uff0c\u9700\u8981\u7684\u4fe1\u4efb\u7ba1\u7406\u5668<\/p>\n<pre>package com.souvc.weixin.util;\r\nimport java.security.cert.CertificateException;\r\nimport java.security.cert.X509Certificate;\r\nimport javax.net.ssl.X509TrustManager;\r\n\/**\r\n* \u7c7b\u540d: MyX509TrustManager &lt;\/br&gt;\r\n* \u63cf\u8ff0:\u4fe1\u4efb\u7ba1\u7406\u5668 &lt;\/br&gt;\r\n* \u5f00\u53d1\u4eba\u5458\uff1a souvc &lt;\/br&gt;\r\n* \u521b\u5efa\u65f6\u95f4\uff1a 2015-11-27 &lt;\/br&gt;\r\n* \u53d1\u5e03\u7248\u672c\uff1aV1.0 &lt;\/br&gt;\r\n *\/\r\npublic class MyX509TrustManager implements X509TrustManager {\r\n  \/\/ \u68c0\u67e5\u5ba2\u6237\u7aef\u8bc1\u4e66\r\n  public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {\r\n  }\r\n  \/\/ \u68c0\u67e5\u670d\u52a1\u5668\u7aef\u8bc1\u4e66\r\n  public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {\r\n  }\r\n  \/\/ \u8fd4\u56de\u53d7\u4fe1\u4efb\u7684X509\u8bc1\u4e66\u6570\u7ec4\r\n  public X509Certificate[] getAcceptedIssuers() {\r\n    return null;\r\n  }\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\">\u5c01\u88c5\u4e86\u4e00\u4e2a\u516c\u5171\u7c7b\uff1a<\/p>\n<pre>package com.souvc.weixin.util;\r\nimport java.io.BufferedReader;\r\nimport java.io.InputStream;\r\nimport java.io.InputStreamReader;\r\nimport java.io.OutputStream;\r\nimport java.io.UnsupportedEncodingException;\r\nimport java.net.ConnectException;\r\nimport java.net.URL;\r\nimport javax.net.ssl.HttpsURLConnection;\r\nimport javax.net.ssl.SSLContext;\r\nimport javax.net.ssl.SSLSocketFactory;\r\nimport javax.net.ssl.TrustManager;\r\nimport net.sf.json.JSONException;\r\nimport net.sf.json.JSONObject;\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\nimport com.souvc.weixin.pojo.Token;\r\n\/**\r\n* \u7c7b\u540d: CommonUtil &lt;\/br&gt;\r\n* \u63cf\u8ff0: \u901a\u7528\u5de5\u5177\u7c7b &lt;\/br&gt;\r\n* \u5f00\u53d1\u4eba\u5458\uff1a souvc &lt;\/br&gt;\r\n* \u521b\u5efa\u65f6\u95f4\uff1a 2015-11-27 &lt;\/br&gt;\r\n* \u53d1\u5e03\u7248\u672c\uff1aV1.0 &lt;\/br&gt;\r\n *\/\r\npublic class CommonUtil {\r\n  private static Logger log = LoggerFactory.getLogger(CommonUtil.class);\r\n  \/\/ \u51ed\u8bc1\u83b7\u53d6\uff08GET\uff09\r\n  public final static String token_url = \"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;appid=APPID&amp;secret=APPSECRET\";\r\n  \/**\r\n   * \u53d1\u9001https\u8bf7\u6c42\r\n   * \r\n   * @param requestUrl \u8bf7\u6c42\u5730\u5740\r\n   * @param requestMethod \u8bf7\u6c42\u65b9\u5f0f\uff08GET\u3001POST\uff09\r\n   * @param outputStr \u63d0\u4ea4\u7684\u6570\u636e\r\n   * @return JSONObject(\u901a\u8fc7JSONObject.get(key)\u7684\u65b9\u5f0f\u83b7\u53d6json\u5bf9\u8c61\u7684\u5c5e\u6027\u503c)\r\n   *\/\r\n  public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {\r\n    JSONObject jsonObject = null;\r\n    try {\r\n      \/\/ \u521b\u5efaSSLContext\u5bf9\u8c61\uff0c\u5e76\u4f7f\u7528\u6211\u4eec\u6307\u5b9a\u7684\u4fe1\u4efb\u7ba1\u7406\u5668\u521d\u59cb\u5316\r\n      TrustManager[] tm = { new MyX509TrustManager() };\r\n      SSLContext sslContext = SSLContext.getInstance(\"SSL\", \"SunJSSE\");\r\n      sslContext.init(null, tm, new java.security.SecureRandom());\r\n      \/\/ \u4ece\u4e0a\u8ff0SSLContext\u5bf9\u8c61\u4e2d\u5f97\u5230SSLSocketFactory\u5bf9\u8c61\r\n      SSLSocketFactory ssf = sslContext.getSocketFactory();\r\n      URL url = new URL(requestUrl);\r\n      HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();\r\n      conn.setSSLSocketFactory(ssf);\r\n      conn.setDoOutput(true);\r\n      conn.setDoInput(true);\r\n      conn.setUseCaches(false);\r\n      \/\/ \u8bbe\u7f6e\u8bf7\u6c42\u65b9\u5f0f\uff08GET\/POST\uff09\r\n      conn.setRequestMethod(requestMethod);\r\n      \/\/ \u5f53outputStr\u4e0d\u4e3anull\u65f6\u5411\u8f93\u51fa\u6d41\u5199\u6570\u636e\r\n      if (null != outputStr) {\r\n        OutputStream outputStream = conn.getOutputStream();\r\n        \/\/ \u6ce8\u610f\u7f16\u7801\u683c\u5f0f\r\n        outputStream.write(outputStr.getBytes(\"UTF-8\"));\r\n        outputStream.close();\r\n      }\r\n      \/\/ \u4ece\u8f93\u5165\u6d41\u8bfb\u53d6\u8fd4\u56de\u5185\u5bb9\r\n      InputStream inputStream = conn.getInputStream();\r\n      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, \"utf-8\");\r\n      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);\r\n      String str = null;\r\n      StringBuffer buffer = new StringBuffer();\r\n      while ((str = bufferedReader.readLine()) != null) {\r\n        buffer.append(str);\r\n      }\r\n      \/\/ \u91ca\u653e\u8d44\u6e90\r\n      bufferedReader.close();\r\n      inputStreamReader.close();\r\n      inputStream.close();\r\n      inputStream = null;\r\n      conn.disconnect();\r\n      jsonObject = JSONObject.fromObject(buffer.toString());\r\n    } catch (ConnectException ce) {\r\n      log.error(\"\u8fde\u63a5\u8d85\u65f6\uff1a{}\", ce);\r\n    } catch (Exception e) {\r\n      log.error(\"https\u8bf7\u6c42\u5f02\u5e38\uff1a{}\", e);\r\n    }\r\n    return jsonObject;\r\n  }\r\n  \/**\r\n   * \u83b7\u53d6\u63a5\u53e3\u8bbf\u95ee\u51ed\u8bc1\r\n   * \r\n   * @param appid \u51ed\u8bc1\r\n   * @param appsecret \u5bc6\u94a5\r\n   * @return\r\n   *\/\r\n  public static Token getToken(String appid, String appsecret) {\r\n    Token token = null;\r\n    String requestUrl = token_url.replace(\"APPID\", appid).replace(\"APPSECRET\", appsecret);\r\n    \/\/ \u53d1\u8d77GET\u8bf7\u6c42\u83b7\u53d6\u51ed\u8bc1\r\n    JSONObject jsonObject = httpsRequest(requestUrl, \"GET\", null);\r\n    if (null != jsonObject) {\r\n      try {\r\n        token = new Token();\r\n        token.setAccessToken(jsonObject.getString(\"access_token\"));\r\n        token.setExpiresIn(jsonObject.getInt(\"expires_in\"));\r\n      } catch (JSONException e) {\r\n        token = null;\r\n        \/\/ \u83b7\u53d6token\u5931\u8d25\r\n        log.error(\"\u83b7\u53d6token\u5931\u8d25 errcode:{} errmsg:{}\", jsonObject.getInt(\"errcode\"), jsonObject.getString(\"errmsg\"));\r\n      }\r\n    }\r\n    return token;\r\n  }\r\n  \/**\r\n   * URL\u7f16\u7801\uff08utf-8\uff09\r\n   * \r\n   * @param source\r\n   * @return\r\n   *\/\r\n  public static String urlEncodeUTF8(String source) {\r\n    String result = source;\r\n    try {\r\n      result = java.net.URLEncoder.encode(source, \"utf-8\");\r\n    } catch (UnsupportedEncodingException e) {\r\n      e.printStackTrace();\r\n    }\r\n    return result;\r\n  }\r\n  \/**\r\n   * \u6839\u636e\u5185\u5bb9\u7c7b\u578b\u5224\u65ad\u6587\u4ef6\u6269\u5c55\u540d\r\n   * \r\n   * @param contentType \u5185\u5bb9\u7c7b\u578b\r\n   * @return\r\n   *\/\r\n  public static String getFileExt(String contentType) {\r\n    String fileExt = \"\";\r\n    if (\"image\/jpeg\".equals(contentType))\r\n      fileExt = \".jpg\";\r\n    else if (\"audio\/mpeg\".equals(contentType))\r\n      fileExt = \".mp3\";\r\n    else if (\"audio\/amr\".equals(contentType))\r\n      fileExt = \".amr\";\r\n    else if (\"video\/mp4\".equals(contentType))\r\n      fileExt = \".mp4\";\r\n    else if (\"video\/mpeg4\".equals(contentType))\r\n      fileExt = \".mp4\";\r\n    return fileExt;\r\n  }\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\"><strong>\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f\u7684\u65b9\u6cd5\uff1a<\/strong><\/p>\n<pre>\/**\r\n   * \u83b7\u53d6\u7528\u6237\u4fe1\u606f\r\n   * \r\n   * @param accessToken \u63a5\u53e3\u8bbf\u95ee\u51ed\u8bc1\r\n   * @param openId \u7528\u6237\u6807\u8bc6\r\n   * @return WeixinUserInfo\r\n   *\/\r\n  public static WeixinUserInfo getUserInfo(String accessToken, String openId) {\r\n    WeixinUserInfo weixinUserInfo = null;\r\n    \/\/ \u62fc\u63a5\u8bf7\u6c42\u5730\u5740\r\n    String requestUrl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&amp;openid=OPENID\";\r\n    requestUrl = requestUrl.replace(\"ACCESS_TOKEN\", accessToken).replace(\"OPENID\", openId);\r\n    \/\/ \u83b7\u53d6\u7528\u6237\u4fe1\u606f\r\n    JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, \"GET\", null);\r\n    if (null != jsonObject) {\r\n      try {\r\n        weixinUserInfo = new WeixinUserInfo();\r\n        \/\/ \u7528\u6237\u7684\u6807\u8bc6\r\n        weixinUserInfo.setOpenId(jsonObject.getString(\"openid\"));\r\n        \/\/ \u5173\u6ce8\u72b6\u6001\uff081\u662f\u5173\u6ce8\uff0c0\u662f\u672a\u5173\u6ce8\uff09\uff0c\u672a\u5173\u6ce8\u65f6\u83b7\u53d6\u4e0d\u5230\u5176\u4f59\u4fe1\u606f\r\n        weixinUserInfo.setSubscribe(jsonObject.getInt(\"subscribe\"));\r\n        \/\/ \u7528\u6237\u5173\u6ce8\u65f6\u95f4\r\n        weixinUserInfo.setSubscribeTime(jsonObject.getString(\"subscribe_time\"));\r\n        \/\/ \u6635\u79f0\r\n        weixinUserInfo.setNickname(jsonObject.getString(\"nickname\"));\r\n        \/\/ \u7528\u6237\u7684\u6027\u522b\uff081\u662f\u7537\u6027\uff0c2\u662f\u5973\u6027\uff0c0\u662f\u672a\u77e5\uff09\r\n        weixinUserInfo.setSex(jsonObject.getInt(\"sex\"));\r\n        \/\/ \u7528\u6237\u6240\u5728\u56fd\u5bb6\r\n        weixinUserInfo.setCountry(jsonObject.getString(\"country\"));\r\n        \/\/ \u7528\u6237\u6240\u5728\u7701\u4efd\r\n        weixinUserInfo.setProvince(jsonObject.getString(\"province\"));\r\n        \/\/ \u7528\u6237\u6240\u5728\u57ce\u5e02\r\n        weixinUserInfo.setCity(jsonObject.getString(\"city\"));\r\n        \/\/ \u7528\u6237\u7684\u8bed\u8a00\uff0c\u7b80\u4f53\u4e2d\u6587\u4e3azh_CN\r\n        weixinUserInfo.setLanguage(jsonObject.getString(\"language\"));\r\n        \/\/ \u7528\u6237\u5934\u50cf\r\n        weixinUserInfo.setHeadImgUrl(jsonObject.getString(\"headimgurl\"));\r\n      } catch (Exception e) {\r\n        if (0 == weixinUserInfo.getSubscribe()) {\r\n          log.error(\"\u7528\u6237{}\u5df2\u53d6\u6d88\u5173\u6ce8\", weixinUserInfo.getOpenId());\r\n        } else {\r\n          int errorCode = jsonObject.getInt(\"errcode\");\r\n          String errorMsg = jsonObject.getString(\"errmsg\");\r\n          log.error(\"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25 errcode:{} errmsg:{}\", errorCode, errorMsg);\r\n        }\r\n      }\r\n    }\r\n    return weixinUserInfo;\r\n  }<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\"><strong>\u6d4b\u8bd5\u7684\u65b9\u6cd5\uff1a\u6ce8\u610f\u5c06\u4ee5\u4e0b\u66ff\u6362\u4e3a\u81ea\u5df1\u7684appid\u548c\u79d8\u94a5\u3002<\/strong><\/p>\n<pre>public static void main(String args[]) {\r\n    \/\/ \u83b7\u53d6\u63a5\u53e3\u8bbf\u95ee\u51ed\u8bc1\r\n    String accessToken = CommonUtil.getToken(\"xxxx\", \"xxxx\").getAccessToken();\r\n    \/**\r\n     * \u83b7\u53d6\u7528\u6237\u4fe1\u606f\r\n     *\/\r\n    WeixinUserInfo user = getUserInfo(accessToken, \"ooK-yuJvd9gEegH6nRIen-gnLrVw\");\r\n    System.out.println(\"OpenID\uff1a\" + user.getOpenId());\r\n    System.out.println(\"\u5173\u6ce8\u72b6\u6001\uff1a\" + user.getSubscribe());\r\n    System.out.println(\"\u5173\u6ce8\u65f6\u95f4\uff1a\" + user.getSubscribeTime());\r\n    System.out.println(\"\u6635\u79f0\uff1a\" + user.getNickname());\r\n    System.out.println(\"\u6027\u522b\uff1a\" + user.getSex());\r\n    System.out.println(\"\u56fd\u5bb6\uff1a\" + user.getCountry());\r\n    System.out.println(\"\u7701\u4efd\uff1a\" + user.getProvince());\r\n    System.out.println(\"\u57ce\u5e02\uff1a\" + user.getCity());\r\n    System.out.println(\"\u8bed\u8a00\uff1a\" + user.getLanguage());\r\n    System.out.println(\"\u5934\u50cf\uff1a\" + user.getHeadImgUrl());\r\n  }<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p style=\"text-align: left\"><strong>\u6548\u679c\u5982\u4e0b\uff1a <\/strong><\/p>\n<p style=\"text-align: left\">OpenID\uff1aooK-yuJvd9gEegH6nRIen-gnLrVw<br \/>\u5173\u6ce8\u72b6\u6001\uff1a1<br \/>\u5173\u6ce8\u65f6\u95f4\uff1a1449021142<br \/>\u6635\u79f0\uff1a\u98ce\u5c11<br \/>\u6027\u522b\uff1a1<br \/>\u56fd\u5bb6\uff1a\u4e2d\u56fd<br \/>\u7701\u4efd\uff1a\u5e7f\u4e1c<br \/>\u57ce\u5e02\uff1a\u5e7f\u5dde<br \/>\u8bed\u8a00\uff1azh_CN<br \/>\u5934\u50cf\uff1ahttp:\/\/wx.qlogo.cn\/mmopen\/lOZIEvyfCa7aZQ7CkiamdpQicUDnGDEC0nzb7ZALjdl3TzFVFEHWM1AFqEXnicNIDeh0IQYTt0NrIP06ibg4W5WflASfFfX9qqib0\/0<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u4e4b\u83b7\u5f97ACCESSTOKEN .Net\u8be6\u89e3\u53ca\u5b9e\u4f8b\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u5b9e\u6218Java\u7248\u4e4b\u5fae\u4fe1\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f \u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b \u5728\u5173\u6ce8\u8005\u4e0e\u516c\u4f17\u53f7\u4ea7\u751f\u6d88\u606f\u4ea4\u4e92\u540e\uff0c\u516c\u4f17\u53f7\u53ef\u83b7\u5f97\u5173\u6ce8\u8005\u7684OpenID\uff08\u52a0\u5bc6\u540e\u7684\u5fae\u4fe1\u53f7\uff0c\u6bcf\u4e2a\u7528\u6237\u5bf9\u6bcf\u4e2a\u516c\u4f17\u53f7\u7684OpenID\u662f\u552f\u4e00\u7684\u3002\u5bf9\u4e8e\u4e0d\u540c\u516c\u4f17\u53f7\uff0c\u540c\u4e00\u7528\u6237\u7684openid\u4e0d\u540c\uff09\u3002 \u516c\u4f17\u53f7\u53ef\u901a\u8fc7\u672c\u6765\u6839\u636eOpenID\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f\uff0c\u5305\u62ec\u6635\u79f0\u3001\u5934\u50cf\u3001\u6027\u522b\u3001\u6240\u5728\u57ce\u5e02\u3001\u8bed\u8a00\u548c\u5173\u6ce8\u65f6\u95f4\u3002 \u5f00\u53d1\u8005\u53ef\u901a\u8fc7OpenID\u6765\u83b7\u53d6\u7528\u6237\u57fa\u672c\u4fe1\u606f\u3002\u8bf7\u4f7f\u7528https\u534f\u8bae\u3002 \u6211\u4eec\u53ef\u4ee5\u770b\u770b\u5b98\u65b9\u7684\u6587\u6863\uff1a\u83b7\u53d6\u7528\u6237\u7684\u57fa\u672c\u4fe1\u606f\u3002 \u63a5\u53e3\u8c03\u7528\u8bf7\u6c42\u8bf4\u660e &nbsp;http\u8bf7\u6c42\u65b9\u5f0f: GET api.weixin.qq.com\/cgi-bin\/user\/info?access_token=ACCESS_TOKEN&amp;openid=OPENID&amp;lang=zh_CN \u53c2\u6570\u8bf4\u660e \u53c2\u6570 \u662f\u5426\u5fc5\u987b \u8bf4\u660e access_token \u662f \u8c03\u7528\u63a5\u53e3\u51ed\u8bc1 openid \u662f \u666e\u901a\u7528\u6237\u7684\u6807\u8bc6\uff0c\u5bf9\u5f53\u524d\u516c\u4f17\u53f7\u552f\u4e00 lang \u5426 \u8fd4\u56de\u56fd\u5bb6\u5730\u533a\u8bed\u8a00\u7248\u672c\uff0czh_CN \u7b80\u4f53\uff0czh_TW \u7e41\u4f53\uff0cen \u82f1\u8bed \u8fd4\u56de\u8bf4\u660e \u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u5fae\u4fe1\u4f1a\u8fd4\u56de\u4e0b\u8ff0\u6570\u636e\u5305\u7ed9\u516c\u4f17\u53f7\uff1a { &#8220;subscribe&#8221;: 1, &#8220;openid&#8221;: &#8220;o6_bmjrPTlm6_2sgVt7hMZOPfL2M&#8221;, &#8220;nickname&#8221;: &#8220;Band&#8221;, &#8220;sex&#8221;: 1, &#8220;language&#8221;: &#8220;zh_CN&#8221;, &#8220;city&#8221;: &#8220;\u5e7f\u5dde&#8221;, &#8220;province&#8221;: &#8220;\u5e7f\u4e1c&#8221;, &#8220;country&#8221;: &#8220;\u4e2d\u56fd&#8221;, &#8220;headimgurl&#8221;: &#8220;http:\/\/wx.qlogo.cn\/mmopen\/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe\/0&#8221;, &#8220;subscribe_time&#8221;: 1382694957, &#8220;unionid&#8221;: &#8221; o6_bmasdasdsad6_2sgVt7hMZOPfL&#8221; &#8220;remark&#8221;: &#8220;&#8221;, &#8220;groupid&#8221;: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-29507","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29507","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=29507"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29507\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}