在web端用到weChat扫码登录,在手机扫码登陆成功后,跳转到相应的界面。

1、第一步请求code

  调用接口:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect;

  参数信息说明:

参数 是否必须 说明
appid 应用唯一标识
redirect_uri 请使用urlEncode对链接进行处理
response_type 填code
scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即
state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
前端代码信息如下(通过后台controller层返回url,来显示二维码):
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>微信扫码登录</title>    <script type="text/javascript" src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>    <script type="text/javascript">        $().ready(function() {          $.ajax({             url: "${base}/weChat",              type: "post",              dataType: "json",              success: function(data) {                var div = document.getElementById("login_container");                 div.innerHTML = "";                 var iframe = document.createElement("iframe");                 var url = data.url;                 var redirect_uri = data.redirect_uri;                 var code = url+encodeURIComponent(redirect_uri);                 iframe.setAttribute("src",code);                 iframe.style.width = "100%";                 iframe.style.height = "100%";                 div.appendChild(iframe);        }      });    });    </script></head><body>  <!--内容-->  <div class="content">    <div id="login_container" class="login_container"></div>  </div></body></html>

  后台代码(controller层获取code的url信息)

    /*** 微信扫码登录二维码显示*/@PostMapping("/weChat")publicResponseEntity weChat(HttpServletRequest request) {Map<String, Object> map = new HashMap<>(5);String state = DigestUtils.md5Hex(UUID.randomUUID() + RandomStringUtils.randomAlphabetic(30));request.getSession().setAttribute(STATE_ATTRIBUTE_NAME, state);String redirect_uri= "http://hbbdjw.nat300.top/social_user_login/get_sign_in_weixinQrCodeLoginPlugin";//红色部分改为自己的redirect_url,蓝色部分改为自己的扫码后需要跳转的页面String url= "https://open.weixin.qq.com/connect/qrconnect?appid=【自己的appid】&scope=snsapi_login&response_type=code&state=" + state + "&redirect_uri=";map.put("url", url);map.put("redirect_uri", redirect_uri);returnResponseEntity.ok(map);}

2、第二步:通过code获取access_token

  登陆后处理(判断access_token是否为null,不为空,则验证成功,否则失败)

  /*** 登录后处理*/@GetMapping({"/get_sign_in_weixinQrCodeLoginPlugin"})public ModelAndView getSignin(@PathVariable String loginPluginId, @PathVariable(required = false) String extra, HttpServletRequest request, HttpServletResponse response, ModelMap model, RedirectAttributes redirectAttributes) throwsException {String getTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=【自己的appid】&secret=【自己的secret】&code=" + code + "&grant_type=authorization_code";     // 获取网页授权凭证     JSONObject jsonObject = JSONObject.fromObject(HttpUtil.Get(getTokenUrl));//get方法是自己写的     if (jsonObject != null) {       String openId = jsonObject.getString("access_token");       String accessToken = jsonObject.getString("openid");       String uniqueId = jsonObject.getString("openid");     }        SocialUser socialUser = socialUserService.find(uniqueId); //从数据库中查找用户,if (socialUser != null) { //当数据库中不存在该user的时候,事件处理 } else { //当数据库中存在该user的时候,事件处理(一般情况下新建user信息数据在数据库) }return modelAndView; }

  GET请求方法

  /*** 向指定URL发送GET方法的请求**@paramurl   发送请求的URL*@paramparam 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。*@returnURL 所代表远程资源的响应结果*/public staticString Get(String url) {int connectionTimeOut=HTTP_CONNECTION_TIMEOUT,  readTimeOut =HTTP_READ_TIMEOUT;String result= "";BufferedReader in= null;String urlNameString=url;try{logger.info("请求url+参数:" +urlNameString);URL realUrl= newURL(urlNameString);//打开和URL之间的连接URLConnection connection =realUrl.openConnection();//设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setConnectTimeout(connectionTimeOut);connection.setReadTimeout(readTimeOut);//建立实际的连接
connection.connect();//获取所有响应头字段//定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(newInputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result+=line;}}catch(Exception e) {logger.error("发送GET请求出现异常!url: " + urlNameString + ", " +e);}//使用finally块来关闭输入流finally{try{if (in != null) {in.close();}}catch(Exception e2) {logger.error("close exception", e2);}}returnresult;}

到此结束。

转载于:https://www.cnblogs.com/g-smile/p/9096493.html

微信扫码登陆(JAVA)相关推荐

  1. java实现PC网站实现微信扫码登陆

    近期,开发一个项目要求PC网站可以进行扫码登陆. 1.前期工作 需要先在微信开放平台进行注册(https://open.weixin.qq.com/),并认证一个网站应用. 点击查看按钮,我们需要记录 ...

  2. 第六天 黑马十次方 用户注册、用户登陆掌握js-cookie、微信扫码登陆、nuxt嵌套路由

    学习目标: ** 完成用户注册功能 完成用户登陆功能,掌握js-cookie的使用 完成微信扫码登陆的功能 完成用户中心嵌套布局,掌握nuxt嵌套路由的使用 ** 1 用户注册 1.1 页面构建 创建 ...

  3. 网站微信扫码支付java开发

    网站微信扫码支付java开发 一.网站微信扫码支付开发并没有现成的java示例,总结一下自己微信扫码支付心得 二.首先去微信公众平台申请账户 https://mp.weixin.qq.com ** 三 ...

  4. 微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户

    <?php namespace Topxia\Component\OAuthClient; /**  * 微信扫码登陆  * Enter description here ...  * @aut ...

  5. 微信扫码登陆在chrome浏览器失败

    浏览器会提示:(新版本的浏览器会提示) Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://www. ...

  6. 微信扫码登陆在chrome浏览器被拦截

    浏览器会提示:(新版本的浏览器会提示) Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://www. ...

  7. Android 微信扫码登陆

    最近项目需求中有一个微信扫码登陆功能,即用手机微信扫码功能扫描终端二维码实现登陆的功能 随即打开微信开发者文档查看,不亏为官方,简洁明了,看得我是一脸懵逼,踩了N多坑,太不友好了,言归正传,希望对一些 ...

  8. php 微信登陆unionid,微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户

    标签:php<?php namespace Topxia\Component\OAuthClient; /** * 微信扫码登陆 * Enter description here ... * @ ...

  9. 微信扫码登陆功能(保姆级)

    微信官网文档 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 一.申 ...

  10. 账号与微信绑定,微信扫码登陆

    今天完成了pc端微信相关功能的开发,主要是账号与微信绑定,微信扫码登陆. 流程,用户登陆后,在个人中心里有一个和微信绑定界面,用户使用微信扫描后,当前账号和微信账号绑定,可以用来微信扫描登陆. 在登陆 ...

最新文章

  1. QuestMobile 2017年中国移动互联网年度报告
  2. stella forum v1.2的开发报告1-spl数据操作层的使用
  3. boot.asm文件注释
  4. 作者:​刘新海(1976-),男,博士,中国人民银行征信中心副研究员。
  5. springmvc的ModelAttribute注解
  6. 泛型技巧系列:类型字典和Type Traits
  7. Android Webview实现有道电子词典
  8. Logback的配置说明
  9. 第8-9讲 视觉里程计2
  10. Java执行jar总结
  11. 吉米多维奇数学分析每日一题--习题1382
  12. 安装bt5到u盘方法与步骤
  13. python 实现使用163邮箱发送有图片的邮件
  14. python3携程_python携程
  15. bboss quartz定时任务使用案例介绍
  16. Course 1 神经网络和深度学习 Week4 搭建多层神经网络识别猫图
  17. 比尔盖兹CES的最后语录
  18. form-generator扩展原生表格,element-table,子表单等组件
  19. BZOJ 2277 Poi2011 Strongbox
  20. 杂谈:硬件和软件接口选择

热门文章

  1. 2010年全球移动行业回顾:iPad大热 中国崛起
  2. 每日一佳——A Support Vector Method for Multivariate Performance Measures(Thorsten Joachims,ICML,2005)
  3. 数组里的字符串转换成数字或者把数字转换成字符串
  4. STC8PMW波输出
  5. GOCAD如何导出voxet
  6. 大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践 @推荐与计算广告系列
  7. 【斯坦福21秋(李沐)】实用机器学习(学习笔记)——1.1课程介绍
  8. vs code无法输入汉语
  9. js实现活动时间倒计时
  10. idea插件安装包下载