基于springboot框架的微信公众号基础开发(二)----用户授权和微信公众号登录。
转载需注明:https://blog.csdn.net/juan1997/article/details/90645553
/**
* 一、第一步:用户同意授权,获取code code说明 :
* code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
*
* @param returnUrl
* @return
*/
@GetMapping("/authorize")
public String authorize(@RequestParam("returnUrl") String returnUrl) {
// String url = "http://www.lovezhj.cn";
String url = returnUrl;
String redirectURL = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO,
URLEncoder.encode(returnUrl));
log.info("【微信网页授权】获取code,redirectURL={}", redirectURL);
return returnUrl;
}
/**
* 微信公众号登录
*
* @param code
* @param state
* @return
* @throws Exception
*/
@GetMapping("/login")
public R login(@RequestParam("code") String code, @RequestParam("state") String state) throws Exception {
R result = null;
log.info("【微信网页授权】code={}", code);
log.info("【微信网页授权】state={}", state);
WxMpOAuth2AccessToken wxMpOAuth2AccessToken;
try {
// 第二步:通过code换取网页授权access_token
// 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
} catch (WxErrorException e) {
log.info("【微信网页授权异常】{}", e);
throw new Exception(e.getError().getErrorMsg());
}
// 第三步:刷新token(如果有需要的时候)
// 第四步: 用oauth2获取用户信息.拉取用户信息(需scope为 snsapi_userinfo)
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
return result;
}