获取openid首先需要在微信官网申请一个小程序,然后把appid和secret放到配置文件里
@Value("${wchatapplet.http}")
private String http;
@Value("${wchatapplet.appid}")
private String appid;
@Value("${wchatapplet.secret}")
private String secret;
/**
* 验证是否绑定
*
* @param code
* @return
* @throws Exception
*/
@RequestMapping(value = "/v1.0/getOpenID", method = RequestMethod.POST)
@ResponseBody
public ResponseData getOpenID(@RequestBody String code, HttpServletRequest request) throws Exception {
String code1 = code.replace("{\"code\":\"", "");
String code2 = code1.replace("\"}", "");
System.out.println("code:" + code2);
//https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
StringBuffer sb = new StringBuffer(http);
sb.append("?appid=" + appid + "&secret=" + secret + "&js_code=" + code2 + "&grant_type=authorization_code");
//请求工具类
String result = HttpClientUtil.doGet(sb.toString());
if (StringUtils.isBlank(result)) {
logger.error("[WX-REQUEST-FAIL]URL:" + sb.toString());
return null;
}
//json工具
JSONObject json = JSONObject.fromObject(result);
if ("".equals(json.get("openid")) || json.get("openid") == null) {
logger.error("[WX-REQUEST-FAIL]URL:" + sb.toString());
logger.error("[WX-REQUEST-FAIL]URL:" + json.get("errcode"));
logger.error("[WX-REQUEST-FAIL]URL:" + json.get("errmsg"));
return null;
}
//用户唯一标识
String openId = (String) json.get("openid");
//会话密钥
String sessionKey = (String) json.get("session_key");
//这里可以写业务代码
Map<String, Object> data = new HashMap<>();
data.put("errCode", (Integer) json.get("errcode"));
data.put("errMsg", (String) json.get("errmsg"));
return new ResponseData(data);
}
public class HttpClientUtil {
private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
public static String doGet(String httpUrl) throws OperateFailtureException {
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null;// 返回结果字符串
try {
// 创建远程url连接对象
URL url = new URL(httpUrl);
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout(15000);
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout(60000);
// 发送请求
connection.connect();
// 通过connection连接,获取输入流
result = getResult(connection, is, br);
} catch (MalformedURLException e) {
logger.error("[REQUEST]URL:" + httpUrl + "ERROR:" + e.getMessage());
throw new OperateFailtureException("远程调用失败");
} catch (IOException e) {
logger.error("[REQUEST]URL:" + httpUrl + "ERROR:" + e.getMessage());
throw new OperateFailtureException("远程调用失败");
} finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect();// 关闭远程连接
}
return result;
}
}