微信登录是一个基于网页的一个扫码登录,用户可以通过扫码可以登录平台,通过微信开放平台可以找到对应的接口书写规则,这里我只是做个简单的代码书写,话不多说干活
/*微信登录控制页面*/
@RequestMapping(value = "/p/getByWxUserId",method = RequestMethod.GET)
public void userLogin(HttpServletResponse response) throws IOException {
StringBuffer getcode=new StringBuffer("https://open.weixin.qq.com/connect/qrconnect?");
getcode.append("appid="+appid);
getcode.append("&redirect_uri="+redirect_uri);
getcode.append("&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect");
response.sendRedirect(getcode.toString());
}
这里的代码都是一个固定的写法,通过访问当前的controller可以跳转到扫码登录的界面中
/*微信用户登录注册具体控制器*/
@RequestMapping(value = "/logincallback",method = RequestMethod.GET)
public Dto getByWxUserId(@RequestParam(value = "code") String code,HttpServletRequest request) throws Exception {
StringBuffer getToken =new StringBuffer("https://api.weixin.qq.com/sns/oauth2/access_token?");
getToken.append("appid="+appid);
getToken.append("&secret="+secret);
getToken.append("&code="+code);
getToken.append("&grant_type=authorization_code");
/*获取到token*/
String token = UrlUtils.loadURL(getToken.toString());
/*将token保存到对象中*/
AccessTokenBean accessTokenBean= JSONObject.parseObject(token, AccessTokenBean.class);
/*获取用户信息*/
StringBuffer getUser=new StringBuffer("https://api.weixin.qq.com/sns/userinfo?");
getUser.append("access_token="+accessTokenBean.getAccess_token());
getUser.append("&openid="+accessTokenBean.getOpenid());
String user= UrlUtils.loadURL(getUser.toString());
UserInfo userInfo = JSONObject.parseObject(user, UserInfo.class);
/*创建dto返回对象*/
Dto dto=new Dto();
Token redisToken=new Token();
/*进行微信id查询*/
DmUser byWxUserId = userService.getByWxUserId(userInfo.getOpenid());
String token1=null;
List list = new ArrayList();
String userAgent=request.getHeader("user-agent");
/*判断微信用户是存在*/
if(byWxUserId==null){/*不存在,创建一个微信用户数据*/
DmUser weiXinUser=new DmUser();
weiXinUser.setRealName(userInfo.getNickname());
weiXinUser.setWxUserId(userInfo.getOpenid());//微信注册用户
weiXinUser.setCreatedTime(new Date());
weiXinUser.setSex(userInfo.getSex());
weiXinUser.setUpdatedTime(new Date());
/*用户注册到数据库中*/
Integer save = userService.save(weiXinUser);
if (save==0){/*注册判断*/
dto.setMsg("登录失败!");
return dto;
}else{
/*注册成功后进行生成token*/
token1 = tokenService.generateToken(userAgent, weiXinUser);
tokenService.save(token1, weiXinUser);
list.add(weiXinUser);
}
}else{
/*微信用户存在时,进行生成token*/
token1 = tokenService.generateToken(userAgent, byWxUserId);
tokenService.save(token1, byWxUserId);
list.add(byWxUserId);
}
/*将token保存到redis中*/
redisToken.setToken(token1);
redisToken.setExtTime(TokenService.SESSION_TIMEOUT);
String[] tokenDetials = token1.split("-");//拆分token为tokenDetials数组
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");//获取当前时间
Date tokenGenTime = format.parse(tokenDetials[2]);//获取token中的token生成的时间
long passed = tokenGenTime.getTime();
redisToken.setGenTime(passed);
list.add(redisToken);
dto.setMsg("登录成功!");
dto.setDate(list);
return dto;
}
这里的代码是获取到微信登录的微信用户的信息,并且进行了redis用户登录的一个token的生成和保存
private String appid="*****************************";
private String redirect_uri="***********************************";
private String secret="****************************************************";
这里代码是一个微信的一些配置信息,通过注册微信开发账号可以获取,设置的是一个微信跳转的一个页面和用户登录的参数
以上是个人的代码的书写,如有不到之处,请指正!