失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 关于网页版微信扫码登录以及获取用户信息

关于网页版微信扫码登录以及获取用户信息

时间:2021-08-20 01:20:18

相关推荐

关于网页版微信扫码登录以及获取用户信息

由于我只研究了1天时间,可能有些地方认知错误

1:网页版微信扫码登录的流程

① 点击扫码登录按钮

② qrAuthorize(访问微信接口,如果微信接口判断有权限生成二维码的话,跳转到二维码页面。)

在这两个方法里面要有两个返回路径,第一个是获取权限以后生成二维码的页面,第二个是扫码用户授权以后要跳转 的方法

③ 在用户授权以后跳转到指定的方法,获取到code,根据code和openid访问微信接口,从而获取用户信息

2:要注意的地方

①:如果是测试的话需要用到内网穿透,这个网上的教程很多

②:获取用户信息的路径要注意

我这里是:https://api./sns

3:下面是完整的代码:

① 创建一个访问用户信息的工具栏,返回的是一个jsonObject

public class HttpClientTools {/*** Http Get 请求方法* @param url* @return* @throws Exception*/public static JSONObject doGet(String url){JSONObject json = null;HttpGet httpGet = new HttpGet(url);// 创建httpClientBuilderHttpClientBuilder clientBuilder = HttpClientBuilder.create();// httpclientCloseableHttpClient httpClient = clientBuilder.build();try {HttpResponse httpResponse = httpClient.execute(httpGet);HttpEntity entity = httpResponse.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");json = JSONObject.fromObject(result);}} catch (ClientProtocolException e) {} catch (IOException e) {}return json;}}

② 创建一个实体类,用于将获取到的用户信息封装到实体当中去

public class WeixinUserInfo {// 用户的标识private String openId;// 昵称private String nickname;// 用户的性别(1是男性,2是女性,0是未知)private int sex;// 用户所在国家private String country;// 用户所在省份private String province;// 用户所在城市private String city;// 用户的语言,简体中文为zh_CNprivate String language;// 用户头像private String headImgUrl;public String getOpenId() {return openId;}public void setOpenId(String openId) {this.openId = openId;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}public String getHeadImgUrl() {return headImgUrl;}public void setHeadImgUrl(String headImgUrl) {this.headImgUrl = headImgUrl;}}

③ control方法的第一个,用户点击扫码登录的时候,也就是上面流程的第二步

@ApiOperation(value="登录跳转,调用微信开放平台二维码")@GetMapping("/qrAuthorize")public String qrAuthorize(@RequestParam("returnUrl") String returnUrl){String url=projectUrlConfig.getWechatOpenAuthorize()+"要返回的路径";String redirectUrl=wxOpenService.buildQrConnectUrl(url,WxConsts.QrConnectScope.SNSAPI_LOGIN, URLDecoder.decode(returnUrl,"UTF-8"));return "redirect:"+redirectUrl;}

④ control的第二个方法,获取用户的信息

@ApiOperation(value="获取用户扫码信息")@GetMapping("/qrUserInfo")public String qrUserInfo(@RequestParam("code") String code){WxMpOAuth2AccessToken wxMpOAuth2AccessToken=new WxMpOAuth2AccessToken();try{wxMpOAuth2AccessToken=wxOpenService.oauth2getAccessToken(code);}catch (WxErrorException e){e.printStackTrace();}String returnUrl = "https://api./sns/userinfo?";String openId=wxMpOAuth2AccessToken.getOpenId();String accessToken = wxMpOAuth2AccessToken.getAccessToken();WeixinUserInfo user= getUserInfo(accessToken, openId);System.out.println("OpenID:" + user.getOpenId());System.out.println("昵称:" + user.getNickname());System.out.println("性别:" + user.getSex());System.out.println("国家:" + user.getCountry());System.out.println("省份:" + user.getProvince());System.out.println("城市:" + user.getCity());System.out.println("语言:" + user.getLanguage());System.out.println("头像:" + user.getHeadImgUrl());System.out.println(wxMpOAuth2AccessToken);return "redirect:"+returnUrl+"access_token="+accessToken+"&openid="+openId;}

⑤ 这里是调用方法获取用户的信息,并且将用户信息封装到实体里面去

public static WeixinUserInfo getUserInfo(String accessToken, String openId) {WeixinUserInfo weixinUserInfo = null;// 拼接请求地址String requestUrl = "https://api./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);// 获取用户信息JSONObject jsonObject = HttpClientTools.doGet(requestUrl);if (jsonObject!=null) {try {weixinUserInfo = new WeixinUserInfo();// 用户的标识weixinUserInfo.setOpenId(jsonObject.getString("openid"));// 昵称weixinUserInfo.setNickname(jsonObject.getString("nickname"));// 用户的性别(1是男性,2是女性,0是未知)weixinUserInfo.setSex(jsonObject.getInt("sex"));// 用户所在国家weixinUserInfo.setCountry(jsonObject.getString("country"));// 用户所在省份weixinUserInfo.setProvince(jsonObject.getString("province"));// 用户所在城市weixinUserInfo.setCity(jsonObject.getString("city"));// 用户的语言,简体中文为zh_CNweixinUserInfo.setLanguage(jsonObject.getString("language"));// 用户头像weixinUserInfo.setHeadImgUrl(jsonObject.getString("headimgurl"));} catch (Exception e) {throw new RuntimeException();}}return weixinUserInfo;}

如果觉得《关于网页版微信扫码登录以及获取用户信息》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。