美文网首页
Spring Boot 实现微信扫码登陆方法

Spring Boot 实现微信扫码登陆方法

作者: 刘小刀tina | 来源:发表于2020-03-07 22:42 被阅读0次

1. 调用微信开放平台的接口 按照如下步骤操作:

image.png

1. 控制类


/**
* (1)调用微信平台提供的接口生成二维码
* (2)用户扫描二维码后 调用回调函数 返回扫描之后的票据
* (3)拿到票据之后请求微信地址 获取到一个凭证
* (4)拿到凭证后请求微信地址 获取到用户的相关信息
**/
@Controller
@RequestMapping(value = "/api/ucenter/wx")
@CrossOrigin

public class WxApiController {


   @Autowired
   private UcenterMemberService ucenterMemberService ;//


   //第一步 : 生成二维码
   @GetMapping(value = "login") // /api/ucenter/wx/login
  // @ResponseBody
   public String getQrConnect(HttpSession session){

       //1. 微信开放平台授权baseUrl
        String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
                "?appid=%s" +
                "&redirect_uri=%s" +
                "&response_type=code" +
                "&scope=snsapi_login" +
                "&state=%s" +
                "#wechat_redirect";

        //2. 扫描之后的回调地址
       String  redirectUrl=null;
       try {
           //3. 对回调的url进行编码
           redirectUrl =  URLEncoder.encode(ConstantPropertiesUtil.WX_OPEN_REDIRECT_URL, "UTF-8");
       } catch (Exception e) {
           e.printStackTrace();
       }
       //4 拼接出来最终生成二维码的地址
       String state = "tina";//TODD 为了测试:这个值传递是注册内网穿透的域名名称 实现域名跳转
       String qrcodeUrl = String.format(baseUrl,ConstantPropertiesUtil.WX_OPEN_APP_ID,redirectUrl,state);
       // 5重定向到二维码的地址
       return "redirect:"+qrcodeUrl;
   }


   //用户扫描二维码会调用该回调函数获取到用户的相关信息
   @GetMapping(value = "callback")
   public String callback(String code,String state){
       //获取扫描之后的票据code

       //拿到票据之后去请求微信地址
       String baseAccessTokenUrl = "https://api.weixin.qq.com/oauth2/access_token" +
               "?appid=%s" +
               "&secret=%s" +
               "&code=%s" +
               "&grant_type=authorization_code";
       String accessTokenUrl = String.format(baseAccessTokenUrl,ConstantPropertiesUtil.WX_OPEN_APP_ID,ConstantPropertiesUtil.WX_OPEN_APP_SECRET,code); //拼接出最终的微信地址

       //请求微信地址获取凭证
      String result =  HttpClientUtils.get(accessTokenUrl);//HttpClientUtils这个工具需要额外引入 此次为贴代码

       //将获取的凭证信息进行解析
       Gson gson = new Gson();
       HashMap map = gson.fromJson(result, HashMap.class);
       String accessToken =  (String)map.get("access_token");
       String  openid = (String)map.get("openid");
       UcenterMember member = ucenterMemberService.getById(openid);

       if(member == null ){
           //为空则说明是新用户,则拿着凭证和微信ID请求微信地址获取用户的相关信息
           String baseUrlInfoUrl =  "https://api.weixin.qq.com/sns/userinfo" +
                   "?access_token=%s" +
                   "&openid=%s";
           //拼接成最终的微信地址
           String userInfoUrl = String.format(baseUrlInfoUrl,accessToken,openid);
           String resultUserInfo =  HttpClientUtils.get(userInfoUrl) ;
           //将获取的用户信息转换json
           HashMap userInfomap = gson.fromJson(resultUserInfo, HashMap.class);
           String  nickname = (String)userInfomap.get("nickname");//用户的微信昵称
           String headimgurl = (String)userInfomap.get("headimgurl");//用户的微信头像
           //TODD 将新获取的用户信息调用sql方法存储到数据库中, 然后标记登陆状态


       }
       //否则说名是老用户 用户的相关信息为member,标记登陆状态

       //重定义向到前端页面中
       return "redirect:http://3000";
   }

   

}

2. 配置

#微信开发平台的appid
wx.open.app_id=wxc606fb748aedee7c
#微信开放平台
wx.open.app_secret=6c94e426cc7f49e29b42231ee202b1a3
#微信开放平台 重定向url
wx.open.redirect_url=http://yaohuan.work/api/ucenter/wx/callback

相关文章

网友评论

      本文标题:Spring Boot 实现微信扫码登陆方法

      本文链接:https://www.haomeiwen.com/subject/snrkdhtx.html