公众号授权登录

/**
     *
     * @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&timestamp=%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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值