微信登录注册

微信登录是一个基于网页的一个扫码登录,用户可以通过扫码可以登录平台,通过微信开放平台可以找到对应的接口书写规则,这里我只是做个简单的代码书写,话不多说干活

 /*微信登录控制页面*/
    @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="****************************************************";

这里代码是一个微信的一些配置信息,通过注册微信开发账号可以获取,设置的是一个微信跳转的一个页面和用户登录的参数

以上是个人的代码的书写,如有不到之处,请指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值