spring mvc下微信网页授权出错 40163
微信网页授权时,获取了code,使用code获取用户信息时一直无法获取,接口返回数据为:
"errcode":40163,"errmsg":"code been used“
使用的是spring mvc框架处理回调的url,在回调的url中调用微信接口获取用户信息
具体的实现如下:
/*
* 生成微信授权请求地址
* 提供需要获取用户信息的请求地址,将其放入回调地址的请求参数中,在回调地址请求成功后,再跳转到该地址
*/
@RequestMapping("/wechat/home/oauth2")
public String Oauth2API(HttpServletRequest request, @RequestParam String resultUrl) {
String redirectUrl = "";
if (resultUrl != null) {
String reqUrl = request.getLocalAddr();
String backUrl = "http://" + reqUrl + "/wechat/home/oauth2url?oauth2url=" + resultUrl;
log.debug("授权回调地址: " + backUrl);
try {
redirectUrl = WxUtil.getOAuthUrl(backUrl, "snsapi_userinfo",new Date().getTime()+"");//生成授权地址,三个参数分别为 回调地址,授权方式,state参数
log.debug("微信授权请求地址: " + redirectUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
return "redirect:" + redirectUrl;
}
/*
* 访问微信授权后请求的地址
*
*/
@RequestMapping(value = { "/wechat/home/oauth2url" })
public String Oauth2MeUrl(HttpServletRequest req,HttpSession session, @RequestParam String code, @RequestParam String oauth2url) {
System.out.println("授权携带参数: "+req.getQueryString());
log.debug("code = 【" + code + "】, 跳转地址: 【" + oauth2url + "】");
JSONObject json = WxService.getWebAccessToken(code);//调用微信接口获取用户信息
if (json != null && json.containsKey("openid")) {
String openid = json.getString("openid");
System.out.println("保存openid到session: " + openid);
session.setAttribute("openid", openid);
}
return "redirect:" + oauth2url;
}