微信扫码登录_JAVA

一、需求

 在PC端的登录页面加个微信扫码的按钮,点击按钮弹出二维码,实现微信扫码登录网站的功能。如图:

二、调研

扫码登录属于微信开放平台提供的API,不是微信公众平台。这里需要注册等配置,暂不赘述。

同时也要注意,如果你也需要微信公众号内的登录授权操作,那么用户唯一标识不应该是openId,而应该是unionId,因为微信公众平台和微信开放平台的openId是不一样的。

三、开始开发

1.后台新增生成二维码图片的接口,因为我这里扫码后跳转的地址不是固定的,所以也用到了这个state参数,如果固定可以写死这个跳转地址。

 /**
     * 返回二维码
     *
     * @param state 扫码成功后跳转的链接
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/getQrCode", method = RequestMethod.GET)
    public String getQrCode(String state) {
        try {
            state = StringUtils.isBlank(state) ? "state" : state;
            //redirectUri 是扫码回调的地址 下一个方法oauth
            String encodeUri = URLEncoder.encode(redirectUri, "UTF-8");
            String url = "https://open.weixin.qq.com/connect/qrconnect?" +
                    "appid={appId}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_login&state={state}#wechat_redirect";
            String urlReplace = url.replace("{appId}", appId).replace("{redirect_uri}", encodeUri)
                    .replace("{state}", state);
            log.info("-----微信开放平台扫码登录url-----" + urlReplace);
            return urlReplace;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

2.前端调用接口,打开二维码的页面

   //wx_login 是按钮的id
 $("#wx_login").on("click", function () {
            $.ajax({
                url: '二维码接口/getQrCode',
                async: true,
                dataType: 'json',
                type: 'get',
                success: function (data) {
                    location.href = data;
                }
            });
        });

3.后端新增扫描二维码回调的方法,其中主要做了:

 

①:微信后台回调该方法,传入code参数,用来获取 accessToken和openId

②:调用微信授权接口即getUserAuthInfo,获取 accessToken和openId

请求方式:GET

URL:   https://api.weixin.qqcom/sns/oauth2/access_token?appid={APP_ID}&secret={APP_SECRET}&code={CODE}&grant_type=authorization_code

 

③:调用微信用户信息接口即getWxAuthUser,获取用户的unionId,昵称等信息。

请求方式:GET

URL:  https://api.weixin.qq.com/sns/userinfo?access_token={ACCESS_TOKEN}&openid={OPENID}&lang=zh_CN

/**
     * pc扫码登录跳转
     *
     * @return
     */
    @RequestMapping(value = "/oauth", method = RequestMethod.GET)
    public RedirectView oauth(HttpServletRequest request, HttpServletResponse response) {
        String code = request.getParameter("code");
        String state = request.getParameter("state");
        //appId appSecret 在微信开放平台找到
        Map<String, String> userAuthMap = userInfoService.getUserAuthInfo(code, appId, appSecret);
        String accessToken = userAuthMap.get("access_token");
        String openid = userAuthMap.get("openid");
        WxAuthUser wxAuthUser = WechatUtil.getWxAuthUser(accessToken, openid);
        if (wxAuthUser == null) {
            return null;
        }
        //你的登录逻辑
        String jsonResult = doLogin(wxAuthUser);
        log.info("-----微信开放平台扫码跳转url-----" + state);
        RedirectView redirectView = new RedirectView(state);
        redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
        return redirectView;
    }

 

最后:总体来说流程比较简单,所以代码贴的不是很全,但是都有讲到。

有一些注意的点比如微信开放平台需要绑定公众号回调域名等配置。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值