1.使用get请求获取access_token
2.使用post请求发送json获取接口json
private AccessToken getAccessToken(String appId, String appSecret) {
NetWorkUtil netHelper = new NetWorkUtil();
/**
* 接口地址为https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,其中grant_type固定写为client_credential即可。
*/
String Url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
//此请求为https的get请求,返回的数据格式为{"access_token":"ACCESS_TOKEN","expires_in":7200}
String result = netHelper.getHttpsResponse(Url, "");
System.out.println("获取到的access_token="+result);
//使用FastJson将Json字符串解析成Json对象
JSONObject json = JSON.parseObject(result);
AccessToken token = new AccessToken();
token.setTokenName(json.getString("access_token"));
token.setExpireSecond(json.getInteger("expires_in"));
return token;
}
private AccessToken postAccessToken(AccessToken token) {
NetWorkUtil netHelper = new NetWorkUtil();
/**
* 接口地址为https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,其中grant_type固定写为client_credential即可。
*/
String Url = String.format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s", token.getTokenName());
//此请求为https的get请求,返回的数据格式为{"access_token":"ACCESS_TOKEN","expires_in":7200}
String result = netHelper.getHttpsResponse(Url, "POST");
System.out.println("获取到的json"+result);
//使用FastJson将Json字符串解析成Json对象
JSONObject json = JSON.parseObject(result);
return token;
}
public class NetWorkUtil {
/**
* 发起HTTPS请求
* @param reqUrl
* @param requestMethod
* @return 相应字符串
*/
public String getHttpsResponse(String reqUrl, String requestMethod) {
URL url;
InputStream is;
PrintWriter pw = null;
String result ="";
try {
url = new URL(reqUrl);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
TrustManager[] tm = {xtm};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tm, null);
con.setSSLSocketFactory(ctx.getSocketFactory());
con.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
con.setDoInput(true); //允许输入流,即允许下载
con.setDoOutput(true);//允许输出
//在android中必须将此项设置为false
con.setDoOutput(true); //允许输出流,即允许上传
con.setUseCaches(false); //不使用缓冲
if (null != requestMethod && !requestMethod.equals("")) {
con.setRequestMethod(requestMethod); //使用指定的方式
con.setRequestProperty("contentType", "application/json");
pw = new PrintWriter(new OutputStreamWriter(con.getOutputStream(),"utf-8"));
String jsonstr = "{\"action_name\": \"QR_LIMIT_STR_SCENE\",\"action_info\": {\"scene\": {\"scene_str\": \"bookshelf_001\"}}}";
JSONObject json = JSONObject.fromObject(jsonstr);
//发送的post请求内容
pw.print(json);
pw.flush();
} else {
con.setRequestMethod("GET"); //使用get请求
}
is = con.getInputStream(); //获取输入流,此时才真正建立链接
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferReader = new BufferedReader(isr);
String inputLine;
while ((inputLine = bufferReader.readLine()) != null) {
result += inputLine + "\n";
}
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
X509TrustManager xtm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
};
}