微信扫码登录

前端代码

<div id="login_container"></div>
<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
        
var obj = new WxLogin
    ({
      id: "login_container",//div的id
      self_redirect: true,//true将页面跳转放在ifream里面   false直接跳转到要跳转的页面
      appid: "",//应用唯一标识,在微信开放平台提交应用审核通过后获得
      scope: "snsapi_login",//用户授权的作用域
      redirect_uri: window._CONFIG['domianURL'] + "/constant/weChat/callback_wechat?token=1",//回调域
      state: "",
      style: "black",//二维码黑白风格
      href: ""
    });

后端代码

/**
     * 微信回调&微信登陆
     *
     * @param
     * @param callback
     * @return
     * @Author TWH
     */
    @RequestMapping("weChat/callback_wechat")
    @Transactional
    public void callback_wechat(HttpServletRequest request,HttpServletResponse response,AuthCallback callback, String token) throws JSONException, IOException {

        AuthRequest authRequest = new AuthWeChatRequest(AuthConfig.builder()
                .clientId(appID)
                .clientSecret(appSecret)
                .redirectUri("http://" + authorizedCallbackDomain + ":" + request.getServerPort() + "/jeecg-boot/constant/weChat/callback_wechat")
                .build());
        AuthResponse authResponse = authRequest.login(callback);
        String data = com.alibaba.fastjson.JSONObject.toJSONString(authResponse.getData());

        org.json.JSONObject obj = new org.json.JSONObject(data);

        //获取用户token信息
        org.json.JSONObject tokenObj = new org.json.JSONObject(obj.get("token").toString());
        String openId = tokenObj.getString("openId");
        //获取用户个人信息
        String uuid = obj.getString("uuid");
        String nickname = obj.getString("nickname");
        String gender = obj.getString("gender");
        String avatar = obj.getString("avatar");
        String location = obj.getString("location");

        SysUserWechat sysUserWechat = new SysUserWechat();
        sysUserWechat.setOpenId(openId);
        sysUserWechat.setUuid(uuid);
        sysUserWechat.setNickname(nickname);
        sysUserWechat.setGender(gender);
        sysUserWechat.setLocation(location);
        sysUserWechat.setAvatar(avatar);

        //获取当前登录用户
        String loginName =JwtUtil.getUsername(token);
        //查询是否存在系统用户
        SysUser sysUser = sysUserService.getUserByName(loginName);

        Result result = new Result<SysUser>();
        Map map = new HashMap();

        //判断用户是否已登录
        if (sysUser == null) {

            //通过微信openId获取数据库微信账号信息
            QueryWrapper<SysUserWechat> queryWrapper = QueryGenerator.initQueryWrapper(new SysUserWechat(),request.getParameterMap());
            queryWrapper.eq("open_id",sysUserWechat.getOpenId());
            queryWrapper.eq("del_flag",0);
            SysUserWechat wechat = sysUserWechatService.getOne(queryWrapper);

            //如果没有微信账号信息就让其重新选择其他方式登录
            if (wechat == null) {
                //response.setHeader("Content-Type", "text/html;charset=utf-8");
                result.setSuccess(false);
                result.setMessage("请先绑定微信账号再进行登陆!");
                httpMethod(request,map,result);
            }else{
                QueryWrapper<SysUser> queryWrapper2 = QueryGenerator.initQueryWrapper(new SysUser(),request.getParameterMap());
                queryWrapper2.eq("id",wechat.getUserId());
                SysUser sysUser1 =  sysUserService.getOne(queryWrapper2);

                sysBaseAPI.addLog("用户名: " + sysUser1.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
                userInfo(sysUser1, result);
                httpMethod(request,map,result);
            }
        }else {
            //通过微信openId获取数据库微信账号信息
            QueryWrapper<SysUserWechat> queryWrapper2 = QueryGenerator.initQueryWrapper(new SysUserWechat(),request.getParameterMap());
            queryWrapper2.eq("open_id",sysUserWechat.getOpenId());
            queryWrapper2.eq("del_flag",0);
            Page<SysUserWechat> page = new Page<>(10, 20);
            IPage<SysUserWechat> pageList = sysUserWechatService.page(page, queryWrapper2);

            if (pageList.getTotal()>0) {
                result.setSuccess(false);
                result.setMessage("此微信号已被绑定,请选择其他微信账号!");
                httpMethod(request,map,result);
            }else {
                //保存用户信息到微信绑定表
                sysUserWechat.setUserId(sysUser.getId());
                sysUserWechat.setCreateBy(sysUser.getUsername());
                sysUserWechat.setDelFlag(0);
                //更改用户微信状态字段为已绑定
                sysUser.setBindingWechat(1);
                try {
                    //保存微信平台账号信息到数据库微信绑定表
                    sysUserWechatService.save(sysUserWechat);
                    sysUserService.updateById(sysUser);
                } catch (Exception e) {
                    log.error(e.getMessage(),e);
                }
                // 登录成功后,清除state
                AuthState.delete("weChat");
                result.setSuccess(true);
                result.setMessage("绑定成功!");
                httpMethod(request,map,result);
            }
        }
    }

    private  void  httpMethod(HttpServletRequest request,Map map,Result resultTest){
        String json = JSON.toJSONString(resultTest);
        map.put("userid","weChat");
        map.put("json",json);
        String params = JSON.toJSONString(map);
        try {
            //这里是将结果通过websocket返回给前端
            HttpUtil.doPostJson("http://" + authorizedCallbackDomain + ":" + request.getServerPort() +"/constant/sendPost",params);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值