微信授权登录,可以帮助服务号应用实现免登陆(实质上通过code换取access_token),即使换个手机登录微信,应用仍然是登录状态。 本文简单讲下微信网页授权登录。

首先,用户网页授权,调用微信接口获取code。然后,用得到的code,调用微信接口换取网页授权的access_token,这个获取的是临时的网页授权的access_token。通过code获取access_token接口,没有使用次数限制。调用这个接口,可以获取到access_token和openid。网页授权登录,即应用免登陆,以我们公司的服务号作为案例说一下。我们公司的微信服务号,是有注册和登录功能的,想使用我们的一些特殊服务,例如充值和查询消费流水,就需要注册和登录。用户关注我们服务号后,点击菜单会引导新用户注册。

我们的微信工程,微信菜单的链接都是经过微信网页授权接口包装的,同时是将微信登录用户信息(包含openid)userVO存入session中。当用户在我们的微信服务号里注册或登录后,openid会存在我们的用户表中。当用户注册或登录后,我们会将用户信息存入session中,1小时候session超时自动清除。当用户点击微信菜单的链接时,会判断session中是否有userVO,有就保持登录状态自动跳转至目标地址。若没有用户信息,则根据网页授权接口获取的code,调用微信接口获取access_token,最重要的是其中的openid。然后,利用此openid查询我们的用户表,用户存在则将用户信息存入session,跳至目标地址。若根据openid查询不到用户,跳转至注册/登录页面,让用户选择注册或登录。

对于非微信菜单的链接,网页内的链接,也是采取授权跳转的形式。用户网页授权,获取code,接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect。例如,用户在某个页面停留超过了1小时,且没有操作动作。这个时候用户session已经清除,用户如果点击页面内的链接,这个时候要实现自动登录并跳转至用户目标地址。我们是用过滤器监控所有的跳转,将我们的免登陆处理方法的链接赋值给redirect_uri,将目标地址赋值给state。这样过滤器捕获到请求后,拼接访问微信网页授权接口,成功后重定向到redirect_uri,即我们的免登陆方法。在这个方法里,用得到的code换取access_token(主要是里面的openid),接着使用openid查询用户信息存入session中。再取出放入state里的目标地址,重定向到此地址即可。

/*** 去授权* @return* @throws UnsupportedEncodingException */public String toAuth() throws UnsupportedEncodingException{HttpServletRequest request = ServletActionContext.getRequest();//取得微信网页授权的接口地址String authorize_url = SystemConstants.getAuthorize_url();String appid=SystemConstants.APPID;//回调地址,免登陆处理地址,微信网页授权接口成功会主动会调至改地址String redirect_uri=WebUtils.getHomeUrl(request)+"/wx/toRedirect.action";//state,微信接口为开发者留的字段,此时存入目标地址,授权后可以利用此参数跳转至目标地址String state=(String)request.getAttribute("currentUrl");if(StringUtils.isNotEmpty(state)){state=URLEncoder.encode(state,"utf-8");}authorize_url=MessageFormat.format(authorize_url, appid,URLEncoder.encode(redirect_uri,"utf-8"),state);setAuthorize_url(authorize_url);//success,Struts配置跳转至authorize_url,即执行微信网页授权接口的跳转return "success";}/*** 回调函数* @return* @throws IOException * @throws ParseException */@SuppressWarnings({ "unchecked", "rawtypes" })public String toRedirect() throws ParseException, IOException{//授权成功后回调此请求,从request中取出code和stateString code =request.getParameter("code");String state =request.getParameter("state");logger.info("code="+code+",state="+state);if(StringUtils.isNotEmpty(code)){//code换取access_token接口AccessToken token = WeixinUtil.codeGetAccessToken(code);if(token == null) {throw new IllegalAccessError("无法获得用户授权!");}String openId = token.getOpenId();//授权token存入sessionsession.setAttribute("token", token);//weixinUser存入sessionWeixinUser weixinUser = WeixinUtil.getUserByOpenid(token.getOpenId());if(weixinUser.getHeadimgurl()==null){weixinUser.setHeadimgurl(request.getContextPath()+"/image/mobile/noHeadImage.png");}if(null==weixinUser.getNickname()){weixinUser.setNickname("--");}session.setAttribute("WeixinUser", weixinUser);Map<String, Object> map = null;try {//调用接口,获取用户信息JSONObject jsonObject=WeixinUtil.doGetStr(SystemConstants.wangTingUrl+"do/securityInfo/selectUserByOpenId?appInterface=0&openId=" + openId);map = (Map) jsonObject; if(map == null) {throw new IllegalAccessError("获取不到登录权限,不能访问该链接!");}}catch(Exception e){throw new IllegalAccessError("获取不到登录权限,不能访问该链接!");}//确认用户是否绑定过if("have".equals(map.get("message"))){Map mapuserMap = jasonToMap(map.get("data").toString());UserVO user = new UserVO();String username = new String(URLDecoder.decode(URLDecoder.decode(mapuserMap.get("userName").toString(), "UTF-8"), "UTF-8"));user.setDisplayName(username);user.setUserId(mapuserMap.get("userId").toString());user.setUserPwd(mapuserMap.get("pwd").toString());user.setMobileNum(mapuserMap.get("mobile").toString());session.setAttribute("user", user);              }else{
//              response.sendRedirect(request.getContextPath()+"/login/toRegister.action");return "register";}}

以上,微信注册、登录、网页内的链接,授权登录,到此全部讲完。

微信公众号授权登录(应用免登陆)相关推荐

  1. 微信公众号授权登录(asp.net + angular)

    微信是时下最火的,上面有数以亿计的用户,如果能接入微信将大大减低注册门槛,当然,接入微信登录是有门槛的.微信登录一般有两个,一个是微信开放平台授权登录,一个是微信公众号授权登录,两者都需要认证才可以继 ...

  2. vue移动端项目微信公众号授权登录

    前言 在我们做移动端项目时, 很多功能是以登录后才能进行后续的操作, 并且许多pc端的网页都有微信扫码登录功能, 为了做到pc与移动端统一, 往往移动端项目需要添加微信登录功能, 那么为什么手机端不能 ...

  3. H5 微信公众号 授权登录 前后端分离篇(资料准备+前端01)

    实现微信公众号授权登录,很简单,但是注意的地方要细心,小伙伴们跟着我的思路一起实现吧! 文章目录 一.帐号申请 1. 正式账号 2. 测试帐号 二.微信文档 2.1. 文档主页 2.2. 授权流程 2 ...

  4. RuoYi-App移动版(uni-app)微信公众号授权登录

    前言 略 uni-app 未提供微信公众号授权登录 uni.login是一个客户端API,统一封装了各个平台的各种常见的登录方式,包括App手机号一键登陆.三方登录(微信.微博.QQ.Apple.go ...

  5. Java在Web端微信公众号授权登录

    Java在Web端微信公众号授权登录 1.需要在微信开发平台配置 url:是自己服务中的微信需要推给你的地址(需要使用二级域名,可以去添加链接描述)购买9块钱1个月使用权或者白嫖都可 token 这个 ...

  6. 【SpringBoot学习】46、SpringBoot 集成 Uniapp 实现微信公众号授权登录

    文章目录 一.公众号环境搭建 二.Spring Boot 集成微信公众号 1.application.yml 微信配置 2.控制层接口 三.Uniapp 实现授权登录 一.公众号环境搭建 本篇文章使用 ...

  7. uni-app 对FastAdmin微信公众号授权登录实例

    uni-app 对FastAdmin微信公众号授权登录实例 uniapp 微信公众号授权登录代码 跳转获取code 提交fastadmin 第三方登录插件 进行登录验证 存储token onLoad( ...

  8. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  9. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  10. uniapp微信公众号授权登录,本地调试

    在项目如何集中微信公众号授权登录 后端跳转获取code码,最后拼接, //保留登录前的页面参数.为了不让参数传到后台,并且在微信授权链接带来带去,可以将参数和登录前的地址存到本地缓存let route ...

最新文章

  1. Linus Torvalds 谈居家办公:不要在家中重新搞一个办公室
  2. java八种语言_Java语言八种基本类型
  3. [BZOJ 1124][POI 2008] 枪战 Maf
  4. JAVA的思维逻辑_[Java教程]计算机程序的思维逻辑
  5. 同一个页面多个按钮,根据按钮名字执行相应功能
  6. 简单代码生成器原理剖析(一)
  7. python3 内置方法
  8. Azure ARM 上传自定义镜像
  9. zz机器学习与人工智能学习资源导引
  10. 【运维技术】数据库主从同步搭建
  11. 07 SQL优化技术
  12. python第三方库安装位置_python第三方库安装在哪
  13. 【DP】桐桐的递归函数
  14. 火车时刻表又更新了!
  15. 凉凉,第1个倒闭的投资项目,比呀比,海外直邮电商
  16. CSS设置打印时的页边距和多余空白页问题
  17. thinkpad x61-lg2装XP
  18. CSDN的第一篇文章——聊聊股市
  19. 捷径系统-健身房管理系统怎么选择?
  20. 后台登入万能密码合集

热门文章

  1. 抖音怎么发起挑战 发起挑战怎么玩
  2. repo sync repo reset: error: entry ‘comand.py ‘ not uptodate . cannot merge
  3. SecureCRT 64位 安装破解版v8.1.4
  4. 自相关法谱估计matlab,自相关法估计功率谱密度
  5. 计算机专业要考哪些证书?这5种证书含金量最高,拿到就是高薪
  6. 知识图谱下图神经网络、图计算、图数据、图数据库未来发展趋势如何?
  7. PHY卡 网卡区别联系
  8. IAR各版本下载链接
  9. Photoshop 更改图片颜色
  10. BIP学习第一课,创建一个应用和实体并设计页面(图文)