一、需求

在PC端的登录页面加个微信扫码的按钮,点击按钮弹出二维码,实现微信扫码登录网站的功能。如图:

二、调研

扫码登录属于微信开放平台提供的API,不是微信公众平台。这里需要注册等配置,暂不赘述。

同时也要注意,如果你也需要微信公众号内的登录授权操作,那么用户唯一标识不应该是openId,而应该是unionId,因为微信公众平台和微信开放平台的openId是不一样的。

三、开始开发

1.后台新增生成二维码图片的接口,因为我这里扫码后跳转的地址不是固定的,所以也用到了这个state参数,如果固定可以写死这个跳转地址。

 /*** 返回二维码** @param state 扫码成功后跳转的链接* @return*/@ResponseBody@RequestMapping(value = "/getQrCode", method = RequestMethod.GET)public String getQrCode(String state) {try {state = StringUtils.isBlank(state) ? "state" : state;//redirectUri 是扫码回调的地址 下一个方法oauthString encodeUri = URLEncoder.encode(redirectUri, "UTF-8");String url = "https://open.weixin.qq.com/connect/qrconnect?" +"appid={appId}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_login&state={state}#wechat_redirect";String urlReplace = url.replace("{appId}", appId).replace("{redirect_uri}", encodeUri).replace("{state}", state);log.info("-----微信开放平台扫码登录url-----" + urlReplace);return urlReplace;} catch (Exception e) {e.printStackTrace();return null;}}

2.前端调用接口,打开二维码的页面

   //wx_login 是按钮的id$("#wx_login").on("click", function () {$.ajax({url: '二维码接口/getQrCode',async: true,dataType: 'json',type: 'get',success: function (data) {location.href = data;}});});

3.后端新增扫描二维码回调的方法,其中主要做了:

①:微信后台回调该方法,传入code参数,用来获取 accessToken和openId

②:调用微信授权接口即getUserAuthInfo,获取 accessToken和openId

请求方式:GET

URL:   https://api.weixin.qqcom/sns/oauth2/access_token?appid={APP_ID}&secret={APP_SECRET}&code={CODE}&grant_type=authorization_code

③:调用微信用户信息接口即getWxAuthUser,获取用户的unionId,昵称等信息。

请求方式:GET

URL:  https://api.weixin.qq.com/sns/userinfo?access_token={ACCESS_TOKEN}&openid={OPENID}&lang=zh_CN

/*** pc扫码登录跳转** @return*/@RequestMapping(value = "/oauth", method = RequestMethod.GET)public RedirectView oauth(HttpServletRequest request, HttpServletResponse response) {String code = request.getParameter("code");String state = request.getParameter("state");//appId appSecret 在微信开放平台找到Map<String, String> userAuthMap = userInfoService.getUserAuthInfo(code, appId, appSecret);String accessToken = userAuthMap.get("access_token");String openid = userAuthMap.get("openid");WxAuthUser wxAuthUser = WechatUtil.getWxAuthUser(accessToken, openid);if (wxAuthUser == null) {return null;}//你的登录逻辑String jsonResult = doLogin(wxAuthUser);log.info("-----微信开放平台扫码跳转url-----" + state);RedirectView redirectView = new RedirectView(state);redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY);return redirectView;}

最后:总体来说流程比较简单,所以代码贴的不是很全,但是都有讲到。

有一些注意的点比如微信开放平台需要绑定公众号回调域名等配置。

微信扫码登录_JAVA相关推荐

  1. 网站使用微信扫码登录流程

    微信扫码登录是一个标准的oauth 2.0的过程. 1.用户请求访问网站,选择微信登录. 2.redirect到微信二维码页面 3.获取微信登录二维码,请求参数包括本网站的appId和登录成功后跳转回 ...

  2. Vue+abp微信扫码登录

    最近系统中要使用微信扫码登录,根据微信官方文档和网络搜索相关文献实现了.分享给需要的人,也作为自己的一个笔记.后端系统是基于ABP的,所以部分代码直接使用了abp的接口,直接拷贝代码编译不通过. 注册 ...

  3. 微信扫码登录网页实现原理

    扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用"扫一扫"功能扫描网页上的二维码 手机扫描成功后,提示"登录网 ...

  4. 微信扫码登录实现原理

    二维码这把利刃,产品应该用到极致 微信扫码登录实现原理 转载于:https://www.cnblogs.com/gym333/p/7699885.html

  5. (转)微信扫码登录网页实现原理

    扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用"扫一扫"功能扫描网页上的二维码 手机扫描成功后,提示"登录网 ...

  6. 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  7. SpringBoot整合微信扫码登录

    SpringBoot整合微信扫码登录 准备工作 基本思路流程 搭建SpringBoot 引入依赖 加入配置文件 代码实现 工具类 controller层 结果 准备工作 1.登录官网了解到,学习者想本 ...

  8. 项目整合微信扫码登录功能

    项目整合微信登录功能 一.准备工作 https://open.weixin.qq.com 1.注册 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5 ...

  9. Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo

    目录 微信扫码登录介绍 开发步骤 微信扫码登录示例 微信开放文档 遇到的问题 使用第三方工具实现网站微信扫码登录 开发前介绍 开发步骤 微信扫码登录获取微信用户信息Demo实现流程 实现效果 实现过程 ...

最新文章

  1. python计算文件中字母出现次数_python – 计算文本文件中字母的频率
  2. 诺奖得主本庶佑:CNS这些顶刊观点有九成不正确,不要盲从迷信,搞科研做到六个C更重要...
  3. 【错误记录】前台进程报错 ( Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE )
  4. 成功解决Exception “unhandled ImportError“cannot import name ‘imread‘ from ‘scipy.misc‘
  5. 不安全的发布 java_如何在没有安全警告的情况下发布Java Web S...
  6. 【POJ - 3169】 Layout(差分约束+spfa)(当板子记?)
  7. 实践实战:在PoC中的Oracle 12c优化器参数推荐(含PPT)
  8. fast.ai 深度学习笔记:第一部分第四课
  9. (转)HapMap简介
  10. [vscode] 显示空格
  11. [渝粤教育] 广东-国家-开放大学 21秋期末考试市场营销10256k2
  12. Quest2有线串联steamVR
  13. 计算机在材料科学中的应用上机二,计算机在材料科学与工程中应用综合实验
  14. 一封来自 1985 年程序员的辞职信
  15. Unity摄像机画面制作全景图片|截图制作全景图
  16. 测试ipad屏幕软件叫什么,附:屏幕专业测试方法简介_苹果 The new iPad_液晶显示器评测-中关村在线...
  17. UE4材质—UV和贴图坐标系
  18. 怎么用计算机解锁,一加6T解锁BL教程,利用电脑进行一键解锁Bootloader操作
  19. RGB图像卷积生成Feature map特征图过程
  20. 中国大学慕课——程序设计与算法(一)第三周测验

热门文章

  1. java学习笔记第三部分
  2. neo4j java json_如何将Neo4j JSON转换为Java Object
  3. Linux系统重装时保留重要分区
  4. 输入圆锥体的半径和高,并求体积
  5. 安阳工学院计算机类宿舍,2021年安阳工学院新生宿舍条件和宿舍环境图片
  6. Vue + vite 切换 favicon图标
  7. 用python绘制y=x,y=1+sinx,编写Python程序,使用numpy、pandas、matplotlib三个扩展库在一个画布中绘制4个子图.
  8. 【英语:基础进阶_核心词汇扩充】E4.常见词根拓词
  9. Entity Framework Core系列教程-23-原生SQL查询
  10. Lottie 免费动画、在线预览