微信公众平台技术文档
1. 用户同意授权,获取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
2 通过code换取网页授权access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
正确时返回的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE" }
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
案例
/**
* 入口
*/
@RequestMapping("/login")
public ModelAndView login(HttpServletRequest request) {
logger.info(">>>>>>>>>>>>>>>>进入绑定页面>>>>>>>>>>>>>>>>");
ModelAndView modelAndView = new ModelAndView();
// 部署服务器开启
String code = request.getParameter("code");
logger.info("code为:{}", code);
if (StringUtils.isBlank(code)) {
logger.info("进来这人没code,有问题");
modelAndView.addObject("openId", "");
modelAndView.addObject("errorInfo", "openId为空");
modelAndView.setViewName("/mobile/404");
return modelAndView;
}
String openid = "";
try {
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + ParamesAPI.appId+ "&secret=" + ParamesAPI.secret + "&code=" + code + "&grant_type=authorization_code";
logger.info("url:{}", url);
JSONObject result = HttpsClient.httpRequest(url, "GET", null);
logger.info("获取openId的json:{}", result);
openid = (String) result.get("openid");
if (StringUtils.isEmpty(openid)) {
logger.info("openid为空:{}", openid);
/**
* 跳转错误页面
*/
modelAndView.setViewName("/mobile/404");
return modelAndView;
}
request.getSession().setAttribute("openId", openid);
} catch (Exception e) {
logger.info("未知错误:{}", e);
modelAndView.addObject("openId", "");
modelAndView.addObject("errorInfo", "openId为空");
modelAndView.setViewName("/mobile/404");
return modelAndView;
}
modelAndView.setViewName("mobile/bindUser");
return modelAndView;
}