微信相关接口调用
1.HttpUtil -- 接口调用工具类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class HttpUtil { private static final int TIMEOUT_IN_MILLIONS = 30000; private static final String CONN = "connection"; private static final String KA = "Keep-Alive"; public static String sendGet(String url) { String result = ""; BufferedReader in = null; try { String urlNameString = url; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty(CONN, KA); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.setRequestMethod("GET"); connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { } } return result; } /** * 向指定URL发送GET方法的请求 * * @param url 发送请求的URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String encoding = new String(Base64.encode(new String("jshxwlw" + ":" + "JSHXwlw_0616").getBytes())); String urlNameString = url ; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("Authorization", "Basic " + encoding); connection.setRequestProperty(CONN, KA); // 建立实际的连接 connection.setRequestMethod("GET"); connection.connect(); // 获取所有响应头字段 // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty(CONN, KA); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); //1.获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); //2.中文有乱码的需要将PrintWriter改为如下 // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { } } System.out.println("post推送结果:" + result); return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 * @throws Exception */ public static String doPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty(CONN, KA); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("charset", "utf-8"); conn.setUseCaches(false); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setReadTimeout(TIMEOUT_IN_MILLIONS); conn.setConnectTimeout(TIMEOUT_IN_MILLIONS); if (param != null && !param.trim().equals("")) { // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); } // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { } } return result; }
2.获取token
public String getAccessToken() {
String access_token;
String accessUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID + "&secret=" + SECRET;
JSONObject accessJson = (JSONObject) JSONObject.parse(HttpUtil.sendGet(accessUrl));
access_token = accessJson.getString("access_token");
return access_token;
}
3.获取openid
private String getOpenid(@RequestParam("code") String code) {
StringBuffer sb = new StringBuffer();
sb.append(wechatUrl).append(APPID).append("&secret=").append(SECRET).append("&js_code=")
.append(code).append("&grant_type=authorization_code");
String url = sb.toString();
JSONObject jsonObject = (JSONObject) JSONObject.parse(HttpUtil.sendGet(url));
log.info("请求路径:{},appid:{},secret:{},返回信息:{}", url, APPID, SECRET, jsonObject);
String openid = jsonObject.getString("openid") ;
return openid;
}
4.获取手机号
public String getPhone(@RequestBody JSONObject jsonObject) {
String access_token = this.getAccessToken();
String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + access_token;
Map<String, String> map = new HashMap<>();
map.put("code", jsonObject.getString("code"));
String param = JSONObject.toJSONString(map);
JSONObject data = (JSONObject) JSONObject.parse(HttpUtil.sendPost(url, param));
String phoneNumber = data.getJSONObject("phone_info").getString("phoneNumber");
return data;
}