微信pc端网站应用扫码授权登录
这是官方的文档
对接之前至少要先看下流程图
效果:用户点击微信登录跳出一个二维码,用户扫码授权后登录进去
1.
2.
需要做的事情
1.需要在微信开放平台上面注册账号,并认证企业,创建网站应用
2.认证网站应用300块每年,每个应用,也就是说如果你还同时开发小程序,公众号,app这些的话每个都要认证,而且是每个每年300;
认证成功的状态:
3.需要填写授权回调域:直接写域名就行,不用带方法的url。如果是本地调试的话需要用内网穿透工具。
准备工作完成,开始写代码了。
我用的是第三方的工具类JustAuth
me.zhyd.oauth
JustAuth
1.15.7
1.用户点击微信登录
@GetMapping("/render")@ApiOperation("微信pc端扫码授权登录")public void renderAuth(HttpServletResponse response) throws IOException {AuthRequest authRequest = getAuthRequest();response.sendRedirect(authRequest.authorize());}
private AuthRequest getAuthRequest() {return new AuthWeChatOpenRequest(AuthConfig.builder().clientId("wxca5e*****5c3a").clientSecret("efe7fc4200cd6******aa69af4fa2f").redirectUri("http://192.168.1.80:8881/callback").ignoreCheckState(true).build());}
redirectUri 为回调地址填写具体的请求你后端接口回调的地址。
成功后微信会返回一个html
将html渲染后是上面图中的二维码。
用户扫码授权后微信会根据你填写的回调地址申请你的接口也就是这个接口:
@GetMapping("/callback")@ApiOperation("微信pc端扫码授权登录")public QueryResult login(@RequestParam("code")String code,@RequestParam("state")String state) {AuthCallback callback=new AuthCallback();callback.setCode(code);callback.setState(state);log.info("进入callback:" + " callback params:" + JSONObject.toJSONString(callback));AuthRequest authRequest = getAuthRequest();AuthResponse login = authRequest.login(callback);log.info("-------------------------------------------------login="+JSONObject.toJSONString(login));String result = JSONObject.toJSONString(login);Map parse = (Map) JSON.parse(result);Map hashMap=(Map) parse.get("data");Map wxInfo=(Map)hashMap.get("rawUserInfo");WhatCatData whatCat=new WhatCatData();whatCat.setCity((String)wxInfo.get("city"));whatCat.setSex((Integer)wxInfo.get("sex"));whatCat.setHeadimgurl((String)wxInfo.get("headimgurl"));whatCat.setNickname((String)wxInfo.get("nickname"));whatCat.setOpenid((String)wxInfo.get("openid"));whatCat.setUnionid((String)wxInfo.get("unionid"));whatCat.setState((String)callback.getState());whatCat.setWxId(SnowflakeIdWorker.generateId()+"");log.info("-----------------------------------whatCat="+whatCat.toString());resWhatcatDataDao.save(whatCat);//查询该用户是否注册过账号User user=new User();user.setWxPcOpenid(whatCat.getOpenid());UserDTO userDTO =new UserDTO();try {userDTO = userClient.getUserByUserInfo(user).getData();} catch (Exception e) {ExceptionUtil.tryHandle(e);}//如果用户用pcOpenId登录过,则将其信息更新if (null!=userDTO){
// userDTO.setUnionid(whatCat.getUnionid());
// userDTO.setGender(whatCat.getSex()+"");
// userDTO.setAvatarUrl(whatCat.getHeadimgurl());
// userDTO.setCity(whatCat.getCity());
// userDTO.setNickName(whatCat.getNickname());
// try {
// userClient.updateUserInfo(userDTO);
// } catch (Exception e) {
// ExceptionUtil.tryHandle(e);
// }
// LoginRequest loginRequest=new LoginRequest();
// loginRequest.setPassword(userDTO.getPassword());
// loginRequest.setSite(userDTO.getSite());
// loginRequest.setUsername(userDTO.getUsername());
// LoginResult loginOne =new LoginResult();
// try {
// loginOne = authorityClient.login(loginRequest);
// } catch (Exception e) {
// ExceptionUtil.tryHandle(e);
// }return new QueryResult<>(ResponseEnum.SUCCESS,userDTO);}else {//如果找不到该用户,则将微信返回的信息返回给前端,并告诉前端需绑定手机号return new QueryResult<>(ResponseEnum.USER_BIND_PHONE, login);}}
code码可以看做是微信给你发的一次性的钥匙,state是你自己在上一步生成的,用来校验,安全的,防止被恶意攻击。state在生成的同时存到session里面,在请求回调这个接口时会拿state校验。
若不想用state在这里加上这个.ignoreCheckState(true)
private AuthRequest getAuthRequest() {return new AuthWeChatOpenRequest(AuthConfig.builder().clientId("wxca*******805c3a").clientSecret("efe7fc420*******9af4fa2f").redirectUri("http://192.168.1.80:8881/callback").ignoreCheckState(true).build());}
WhatCatData 是我接收微信消息的对象也可以不写,至此微信pc端网站应用扫码授权登录就成功了。
注意点:
如果你的项目是前后端分离的,那么很有可能前端拿不到state和code。从而你没办法将获取到的信息返给前端。那么就需要让前端来写一个接收微信授权访问的接口来替代后端的callback回调接口(就是像后端一样写一个接口,然后微信根据这个接口将参数传给前端),然后让前端传code和state就行啦
微信pc端网站应用扫码授权登录相关推荐
- 微信PC端网页扫码登陆
<html页面> redirect_uri不可用本地地址做测试,只能用服务器地址 //二维码显示 $(document).ready(function() {var obj = new W ...
- 企业微信H5_身份验证,PC网站企业微信扫码授权登录
企业微信H5_身份验证,PC网站企业微信扫码授权登录 文章目录 一.扫码登录配置 1. 企业微信扫码登录接入流程 2. 企业微信扫码登录接入流程拆解 3. 开启网页授权登录 二.实战演练 2.1. 用 ...
- 基于Spring Boot实现电脑端网页微信扫码授权登录方式一(附带完整源码)
简介 电脑端微信网页扫码授权登录有2种方式: 第一种:基于微信公众号,单独获取登录二维码扫码,然后扫码登录,程序控制跳转逻辑,例如CSDN: 第二种:基于微信开放平台,跳转到微信二维码页面进行扫码登录 ...
- 网站微信扫码授权登录
1.首先准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐 ...
- 网站上做企业微信扫码授权登录怎么做?(超详细教程)
企业微信已经搞了这一套完整的教程! https://developer.work.weixin.qq.com/tutorial/detail/56 第1步:企业微信自建应用 第2步:浏览企业微信开发文 ...
- 企业微信+esaywechat 扫码授权登录
企业微信+esaywechat 扫码授权登录 相关 相关 这里用的是 Yii2 框架. 安装easywechat: composer require overtrue/wechat:~4.0 -vvv ...
- 扫码授权登录最佳实践
目录 一 扫码授权登录应用场景 二 扫码授权登录交互流程 2.1 PC 端显示二维码 2.2 手机 APP 扫描二维码 2.3 手机 APP 确认授权登录 2.4 PC 端轮询二维码信息 一 扫码授权 ...
- PHP小程序码扫码登录网站,WeAuth微信小程序实现PC网站扫码授权登录
目前微信扫码登录的实现有以下2种方式: 1.微信服务号扫码网页授权登录 2.微信开放平台Oauth2.0授权登录 以上2种方式少不了微信认证,都是需要交300元认证后才可以获得开发能力.所以我就想到了 ...
- 微信公众号扫码授权登录思路
引言 上学期研究了一下微信登录相关内容,也写了两三篇笔记,但是最后实际登录流程没有写,主要因为感觉功能完成有所欠缺,一直也没有好的思路:这两天我又看了看官方文档,重新构思了一下微信公众号登录相关的内容 ...
最新文章
- Windows下的for
- web socket 心跳包的实现方案
- php 超全局变量(整理)
- java exe 返回值_java调用exe返回值
- Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点
- java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别
- nodejs+grunt配置记
- 如何使用 API 的方式给 SAP service cloud Registered product 上传图片
- linux管理外部工具,linux – 除了iptables之外的数据包管理工具?
- 主流芯片架构即将变天!
- 在64位操作系统上使用FlashDevelop的Debug功能
- SQL Server 数据库之字符串函数
- Ubuntu 如何更换软件源
- Web前端面试指导(四):面试前准备-有备而去百战百胜
- 学而思python培训班
- docker容器获取宿主机ip地址
- 【C++】Web服务器项目所用到的函数详解
- 使用canvas画网格
- Filter拦截过滤参数
- python 中文语音播报,用Python实现语音播报