java+vue简单的微信登录授权获取OpenId

查看微信公众号开发文档
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

5 第五步:检验授权凭证(access_token)是否有效

简单的微信登录授权获取openId存入数据库
1、扫码二维码,二维码的文本内容是vue中的页面方法的url地址。

return{
	id: this.$route.query.id //获取url地址上的拼接的id
}

2、先调用用户授权获取code,调用之后微信接口会回调传入的回调url地址,通过获取url地址中的code和需要的参数值,调用controller方法。

methods: {
            getCode() { // 非静默授权,第一次有弹框
                this.code = '';
                var local = window.location.href; // 获取页面url
                const appid = 'wx123456789123456789';//微信公号的开发者ID
                const secret = '123456789abcdefghjklmn';//微信公众号的开发者密码
                const url = "http://域名/方法名";//回调方法的url地址
                //回调回来的的url地址后面会拼接上code和你传入的一直参数值
                const UrlEncode = encodeURIComponent(url);//js的urlencode编码
                this.code = this.getUrlCode().code;// 截取code
                this.state = this.getUrlCode().state;//我需要的参数值
                if (this.code == null || this.code === '') { // 如果没有code,则去请求
                    window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid + '&redirect_uri=' + UrlEncode + '&response_type=code&scope=snsapi_base&state=' + this.merId + 'M' + this.exhiId + '#wechat_redirect'
                } else {
                    getGainOpenId(this.code,this.state).then(response => {
                        const msg = response.msg;
                        if (msg == "授权成功"){//授权成功
                            window.location.href = '提醒页面';
                        }else if (msg == "授权失败"){//授权失败
                            window.location.href = '提醒页面';
                        }
                    });
                }
            },
            getUrlCode() { // 截取url中的code方法
                var url = location.search;
                this.winUrl = url;
                var theRequest = new Object();
                if (url.indexOf("?") != -1) {
                    var str = url.substr(1);
                    var strs = str.split("&");
                    for (var i = 0; i < strs.length; i++) {
                        theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
                    }
                }
                return theRequest;
            }
        }

3、调用微信accessToken接口获取openid

//appid是微信公众号开发者ID,appSecret是微信公众号开发者密码
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appId+"&secret="+appSecret+"&code=" + code + "&grant_type=authorization_code";
        String info = restTemplate.getForObject(url, String.class);//调用方法
   
        ObjectMapper mapper = new ObjectMapper();
        try {
            Map<?, ?> accessToken = mapper.readValue(info, Map.class);
            if (accessToken.get("access_token") == null) {//未获取access_token
                return AjaxResult.success("授权失败");
            }
            String openId = (String) accessToken.get("openid");
        
            //将openId存入数据库
            xxMapper.update(id,openId);
        
            return AjaxResult.success("授权成功");
        } catch (JsonProcessingException e) {//返回结果转换map失败
            return AjaxResult.success("授权失败");
        }
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值