在做微信小程序开发中获取openid时,有这么一段代码:
//获取openid
public static JSONObject getWxUserOpenid(String code) {
String appId =“********************”;
String secret = “*******************”;
logger.info("appId:"+appId+",secret:"+secret);
JSONObject res = new JSONObject();
StringBuilder url = new StringBuilder("https://api.weixin.qq.com/sns/jscode2session?");
url.append("appid=");//appid设置
url.append(appId);
url.append("&secret=");//secret设置
url.append(secret);
url.append("&js_code=");//code设置
url.append(code);
url.append("&grant_type=authorization_code");
try {
HttpClient client =HttpClientBuilder.create().build();//构建一个Client
HttpGet get = new HttpGet(url.toString()); //构建一个GET请求
HttpResponse response = client.execute(get);//提交GET请求
HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"实体"
String content = EntityUtils.toString(result);
res = JSONObject.fromObject(content);//把信息封装为json
logger.info("content:"+content+"res:"+res);//记录返回的信息
} catch (Exception e) {
logger.error("获取openid时遇到异常:"+e);
}
return res;
}
此时HttpClientBuilder类报红线错误,原来是我的相关jar包版本太低了,没有这个类,
后来是我把httpclient的jar包从4.2.5升级到4.5.2后,红线消失了,可以正常引用了,项目启动后,当前端向服务器发送相关
请求时,系统报了这个异常:java.lang.ClassNotFoundException: org.apache.http.config.Lookup
,经过一番思考和网上搜
索,我越来越怀疑是项目中httpcore jar包版本太低了,我原来的版本是4.2.4,会不会是版本冲突导致的异常,因为httpclient
已经升级到较高的版本,而httpcore还是之前的版本,而这两个jar 有一定的关联。为了验证这种想法,到网上下想下载对应的4.5.2版本的
httpcore.jar, 进去后,发现httpcore.jar最新的也才到4.4.10版本,不管怎样,总比我之前的那个要新一些,于是把
4.4.10下载好并替换掉原先的4.2.4版本的,重新启动服务器并请求,之前的异常不再报了,不过出来一个新的异
常:javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
,看到异常中带net.ssl和
Remote host ,我怀疑是因为我本地服务器请求微信服务器的原因,本地服务器无法与远程的微信服务器进行通
讯。抱着这样的想法,把代码更新到外网服务器,启动后果然没有再这个异常,还返回了openid,如下:
{“session_key”:“qY0IuJgfA",“openid”:"orTk*”}