1.获取access_token(偷懒没有转实体类,直接string截取的,感谢微信这个接口很规范)
public String getToken(String url, String appId, String appSecret){
// 获取token
String getTokenUrl = url+ "&appid=" + appId + "&secret=" + appSecret;
LOGGER.debug("wx get access token is [{}]", getTokenUrl);
RequestDTO requestDTO = new RequestDTO(getTokenUrl);
ResponseDTO responseDTO = HttpClientUtils.get(requestDTO);
LOGGER.debug("wx get access token data is [{}]", responseDTO.getContent());
int end = responseDTO.getContent().lastIndexOf(",")-1;
int start = responseDTO.getContent().indexOf(":") + 2;
String token = responseDTO.getContent().substring(start, end);
ACCESS_TOKEN = token;
return token;
}
2.请求获取ticket
public String getWxTicket(Integer projectId, Integer type, String url, String accessToken, String tokenUrl,
String appId, String appSecret) {
// 获取ticket
if (accessToken.contains("\"")) {
accessToken = "";
}
String ticketURL= url + accessToken;
LOGGER.debug("wx get ticket token is [{}]", ticketURL);
RequestDTO requestDTO = new RequestDTO(ticketURL);
requestDTO.setContent("{\n" +
" \"action_name\": \"QR_LIMIT_STR_SCENE\",\n" +
" \"action_info\": {\n" +
" \"scene\": {\n" +
" \"scene_str\": 自定义的内容" +
" }\n" +
" }\n" +
"}");
ResponseDTO responseDTO = HttpClientUtils.post(requestDTO);
LOGGER.debug("wx get ticket data is [{}]", responseDTO.getContent());
if (responseDTO.getContent().contains("access_token")) { // token 有问题,重新请求
String token = this.getToken(tokenUrl, appId, appSecret);
ticketURL = url + token;
requestDTO = new RequestDTO(ticketURL);
requestDTO.setContent("{\n" +
" \"action_name\": \"QR_LIMIT_STR_SCENE\",\n" +
" \"action_info\": {\n" +
" \"scene\": {\n" +
" \"scene_str\": 自定义内容" +
" }\n" +
" }\n" +
"}");
responseDTO = HttpClientUtils.post(requestDTO);
} else {
ACCESS_TOKEN = accessToken;
}
int start = responseDTO.getContent().lastIndexOf("url") + 6;
int end = responseDTO.getContent().lastIndexOf("\"");
String res = responseDTO.getContent().substring(start, end) + "," + ACCESS_TOKEN;
return res;
}
ps:本来想用前端请求,因为感觉前端更方便简单,但是尝试过程中,微信一直返回跨域拦截问题,说因为我的请求从某个域名发出,所以被微信拦截了,该问题未能找到比较好的解决办法,所以选择了从后端发起请求。