/**
*
* @param backUrl 授权登录完成跳转的页面
* @param response
*/
@RequestMapping(value = "/AppHome")
public void AppHome(String backUrl, HttpServletResponse response) {
try {
String backUrlKey = UUID.randomUUID().toString();
TempData.put(backUrlKey, StringUtil.splicingString(weiXin.getHomeUrl(),weiXin.getRedirectUrl(),backUrl));
String redirect_uri = URLEncoder.encode(StringUtil.splicingString(weiXin.getHomeUrl(), "/auth/appLogin"), "UTF-8");
//微信公众平台登录(微信浏览器打开使用)
String res = StringUtil.splicingString(
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=",
Constant.WX_LOGIN_APPID,
"&redirect_uri=",
redirect_uri,
"&response_type=code&scope=snsapi_userinfo&state=",
backUrlKey,
"#wechat_redirect");
response.sendRedirect(res);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param code
* @param state 授权登录完成跳转的页面
* @param response
*/
@RequestMapping(value = "/appLogin")
public void appLogin(String code, String state, HttpServletResponse response) {
try {
if (TempData.containsKey(state)) {
state = TempData.get(state);
}
// String transferUrl = StringUtil.splicingString("/auth/AppHome?backUrl=", URLEncoder.encode(state, "UTF-8"));
String transferUrl = URLEncoder.encode(state, "UTF-8");
//获取微信登录accessToken
// 2.开发者服务器 登录凭证校验接口 appi + appsecret + code
JSONObject jsonResult = WechatUtil.getAccessTokenOrOpenId(code);
// 3.接收微信接口服务 获取返回的参数
String openid = jsonResult.getString("openid");
String accessToken = jsonResult.getString("access_token");
Baseuser baseuser = baseuserService.getByOpenid(openid);
//未注册
if (baseuser == null) {
//获取微信用户信息
String url = StringUtil.splicingString(
"https://api.weixin.qq.com/sns/userinfo?access_token=",
accessToken,
"&openid=",
openid
);
WeixinBaseUser weixinBaseUser = JSON.parseObject(HttpClientUtil.doGet(url), WeixinBaseUser.class);
//添加微信登录的用户信息
baseuser = sysAuthenticationService.InnerRegisterForWeChart(weixinBaseUser);
if (baseuser != null && baseuser.getId() != null) {
transferUrl = state;
} else {
log.error(String.format("添加微信登录的用户信息失败:用户OPENID:%s-用户昵称:%s", weixinBaseUser.getOpenid(), weixinBaseUser.getNickname()));
}
} else { //已经注册
transferUrl = state;
}
List<String> authorities = new ArrayList<String>();
authorities.add("user");
String token = JwtTokenUtils.create(baseuser.getId(), baseuser.getUserName(), new HashSet<String>(authorities),"127.0.0.1");
//TODO 把token拼接到URL中
transferUrl = StringUtil.splicingString(transferUrl,"?token=",token);
response.sendRedirect(transferUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
/// <summary>
/// 获取jsapi通过config接口注入权限验证配置信息
/// </summary>
/// <returns></returns>
@RequestMapping(value = "/GetWxJsApiConfig", method = RequestMethod.POST)
public MessageBean GetWxJsApiConfig(String url) {
String noncestr = WechatUtil.GenerateNonceStr();
String timestamp = WechatUtil.GenerateTimeStamp();
String jsapi_ticket = WechatUtil.getCachedJsApiTicket().getTicket();
String strSha1 = WechatUtil.getSHA1String(String.format("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s", jsapi_ticket, noncestr, timestamp, url)).toLowerCase();
Map<String, Object> info = new HashMap<>();
info.put("appId", Constant.WX_LOGIN_APPID);//公众账号ID
info.put("timestamp", timestamp);//生成签名的时间戳
info.put("nonceStr", noncestr);//随机字符串
info.put("signature", strSha1);//签名
return MessageBean.success(info);
}
公众号授权登录
最新推荐文章于 2024-07-03 19:13:37 发布