`
xt_yangjie
  • 浏览: 39531 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

网站web端二维码扫码登录

 
阅读更多

总体流程

1.  要通过网站扫码登录的话需要先去微信开放平台申请一个网站APP 

     网站APP需要提交一些资料。地址是https://open.weixin.qq.com/

     是开放平台,不是公众平台

     公众平台是公众号,订阅号,

     开放平台,是可以绑定多个公众号,小程序,以及网站APP的

     且开放平台需要认证,每年要交钱。

     

2. 审核通过以后 就会生成appid 以及 secret

 

注:. 微信公众号是不能通过网站扫码登录的。(当然也可以绕路走,也能实现关注公众号登录,这里我就不套讨论这个问题,只是有一点思路,具体行不行我也不太清楚)

 

1.1 去  https://open.weixin.qq.com/ 创建网站APP应用

 

1.2 提交资料审核,需要盖公章

 

 

 

 

3. 接下来就是获取appid 和 secret做扫码登录

 

 

第一步在需要显示二维码的页面添加js

 

 

function showWechatEr () {
	  var s = document.createElement('script')
	  s.type = 'text/javascript'
	  s.src = 'https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js'
	  var wxElement = document.body.appendChild(s)
	  wxElement.onload = function () {
	    new WxLogin({
	      id: 'fisrt-shade-main', // 需要显示的容器id
	      appid: '', // 公众号appid wx******* 
	      scope: 'snsapi_login', // 网页默认即可
	      redirect_uri: encodeURIComponent(''), // 授权成功后回调的url 
	      state: Math.ceil(Math.random() * 1000), // 可设置为简单的随机数加session用来校验
	      style: 'black', // 提供"black"、"white"可选。二维码的样式
	      href: '' // 外部css文件url,需要https
	    })
	}
	shadeFn('fisrt-shade',{width:340}).open()
}
 这里重点讲一下redirect_uri 这里的URL需要和你提交资料审核的域名一致 不然二维码不显示

 

 

这个URL是当你扫描二维码确认授权以后页面会转跳到该页面,并且会带上CODE以及STATUS两个参数

http://demo.baidu.com/website/web/wechat/bindAccount.html?code=011MWMSj1aSnHo0YAWQj1DdUSj1MWMSP&state=721

就像这样转跳的URL,你需要后台在bindAccount这个方法里面通过通过code换取微信用户信息

 

 

 

/**
	 * 通过 code换取用户基础信息 openid  unionid  昵称 头像
	 * @author YangJie
	 * 2019年11月26日 下午4:35:16
	 */
	public WeixinUserInfo getWechatUserInfo(HttpServletRequest request, HttpServletResponse response) {
		WeixinUserInfo weixinUserInfo = new WeixinUserInfo();
		weixinUserInfo.setType(3);
		String code = request.getParameter("code");
		if (code == null || "".equals(code))
			return null;
		String openid = null;
		String accessToken = null;
		String appId =SystemParams.getProperty("wechat.web.appid"); //这里是你的appid 
		String secret = SystemParams.getProperty("wechat.web.secret");//这里是生成的secret
		//获取token
		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
                //httpClientUtils是我自己封装的一个发送get和post的类 这里就不贴出来了,自己写一个就行了
		String result = httpClientUtils.getSimple(url);
		try {
			JsonParser jsonParser = new JsonParser();
			JsonElement jsonElement = jsonParser.parse(result);
			openid = jsonElement.getAsJsonObject().get("openid").getAsString();
			accessToken = jsonElement.getAsJsonObject().get("access_token").getAsString();
		} catch (Exception e) {
			log.error("--------------------");
			log.error("获取web端二维码登录openid 异常");
			log.error(url);
			log.error(result);
			log.error("--------------------");
			//e.printStackTrace();
			return null;
		}

		//通过token获取用户基础信息
		try {
			url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN";
			result = httpClientUtils.getSimple(url);
			JsonParser jsonParser = new JsonParser();
			JsonElement jsonElement = jsonParser.parse(result);
			String unionid = jsonElement.getAsJsonObject().get("unionid").getAsString();
			String nickname = jsonElement.getAsJsonObject().get("nickname").getAsString();
			String headimgurl = jsonElement.getAsJsonObject().get("headimgurl").getAsString();
			weixinUserInfo.setUnionid(unionid);
			weixinUserInfo.setOpenid(openid);
			weixinUserInfo.setNickname(nickname);
			weixinUserInfo.setHeadimgurl(headimgurl);
		} catch (Exception e) {
			log.info("--------------------");
			log.info("获取web端二维码登录用户基础信息异常");
			log.info(url);
			log.info(result);
			log.info("--------------------");
			//e.printStackTrace();
			return null;
		}
		return weixinUserInfo;
	}
 

 

这样就在bindAccount方法里面通过code兑换到微信用户信息了,该code只能用一次,兑换成功后失效,不能再次通过该code获取微信用户信息
在该方法里面做自己的判断  如果有绑定用户直接自动登录,转跳
如果没有绑定过,需要转跳到绑定页面,并且把微信用户信息带过去,在绑定页面绑定时把用户名 密码 以及微信用户信息传递到后台验证 验证
完用户密码在绑定到该微信上
 
 
微信的很多授权都是通过这种方式获取微信用户信息的, 通过code兑换微信用户信息
1. https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code
通过第一步获取access_token 以及 openid
2.https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN
通过前面的access_token 和 openid获取微信用户信息
分享到:
评论

相关推荐

    PHP二维码扫码登录完整版,附带数据库sql文件

    【PHP二维码扫码登录完整版,附带数据库sql文件】是一个基于PHP编程语言和ThinkPHP框架实现的二维码扫码登录系统。这个系统提供了用户通过扫描二维码快速完成登录的功能,大大提升了用户体验,同时也增强了系统的...

    vue2 扫码获取二维码内容

    扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取二维码内容扫码扫码扫码获取...

    C# winform设计 钉钉 微信 二维码 扫码登录登录客户端 源码文件 CS架构

    本项目是基于C# WinForm设计的一个客户端应用程序,实现了钉钉和微信的二维码扫码登录功能。下面将详细阐述相关知识点。 1. **C#语言**:C#是由微软开发的一种面向对象的编程语言,它以其简洁、类型安全和性能强大...

    springboot实现web端微信扫码登录项目(基于微信开放平台)

    在本文中,我们将深入探讨如何使用SpringBoot框架来实现一个基于微信开放平台的Web端扫码登录功能。微信扫码登录是一种安全、便捷的用户身份验证方式,它允许用户通过扫描二维码来授权登录,而无需输入用户名和密码...

    C# aps.net MVC web微信三方扫码登录与授权登录

    4. **Web端扫码登录**:扫码登录是微信提供的一种安全验证方式,用户通过扫描二维码将微信账号与网站账号关联。开发者需要调用微信API生成二维码,然后处理扫码后的回调事件,完成登录过程。 5. **授权登录**:授权...

    基于SpringBoot+Vue+Android的二维码扫码登录;服务器端、网页前端和安卓端源码【二维码登录】

    【作品名称】:基于SpringBoot+Vue+Android的二维码扫码登录;服务器端、网页前端和安卓端源码【二维码登录】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、...

    基于SpringBoot+Vue+Android的二维码扫码登录系统.zip

    这是一个基于现代技术栈构建的二维码扫码登录系统的项目,主要采用了SpringBoot后端框架、Vue前端框架以及Android客户端技术。下面将分别对这三个关键技术进行详细解释。 **SpringBoot** SpringBoot是Spring框架的...

    WEB + JS 扫码枪

    在这个场景下,用户无需点击任何按钮,只需通过扫码枪扫描条形码或二维码,其结果就会自动填充到网页的文本框中,并在扫码结束时自动提交。这种方式极大地提高了数据录入的效率和准确性,尤其适用于物流、库存管理等...

    毕设基于SpringBoot+Vue+Android的二维码扫码登录源码+项目说明+数据库(服务端+移动端+web端).zip

    基于SpringBoot+Vue+Android的二维码扫码登录源码+项目说明+数据库(服务端+移动端+web端).zip 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时...

    (钉钉)第三方WEB网站扫码登录

    【标题】:“(钉钉)第三方WEB网站扫码登录” 在这个标题中,我们关注的是如何集成钉钉的扫码登录功能到一个第三方的Web应用程序。钉钉是阿里巴巴推出的企业级通讯和协作平台,它提供了丰富的API接口供开发者使用...

    实现手机扫码登录PC网站

    该Demo为.NET Core Web环境,集成SignalR,依据SignalR实时通讯特性实现手机扫码登录,代码简洁清晰,可直接使用。该Demo为原理解析,并未实现复杂业务及Token验证(小白提示:扫码登录需保证手机与网站在同一局域网...

    javaweb实现app扫码登录功能

    Java Web 实现 APP 扫码登录功能 Java Web 实现 APP 扫码...Java Web 实现 APP 扫码登录功能需要经过生成二维码、APP 扫描、Web 页面轮询、服务器端验证等几个步骤。该功能可以极大地提高用户体验,提高系统的安全性。

    camera二维码扫码实例

    总结来说,"camera二维码扫码实例"是一个关于如何在H5环境中集成二维码扫描功能的实践指南,涉及了摄像头访问、实时扫描、结果处理以及用户体验优化等多个方面。通过学习和理解这些知识点,开发者可以为他们的移动...

    【二维码登录】基于SpringBoot+Vue+Android的二维码扫码登录;服务器端、网页前端和安卓端+源代码+文档说明

    二维码扫码登录;服务器端、网页前端、移动端源码; ---- ## 项目介绍 - 一个能够实现扫码登录的demo,不妨小小**Star**一下吧 >.~,[**简书地址**](https://www.jianshu.com/p/d5a7a3081bbf)请戳。 - 本项目一共...

    Unigui电脑端使用手机微信扫描二维码登录(源码)_登录_struckgx8_unigUi登录_UniGui开发_unigui

    Struckgx8和UnigUi登录是这个特定场景中的关键组件,而“unigui微信”则表明我们需要集成微信的扫码登录接口。 首先,理解登录过程的基础是必不可少的。传统的登录方式通常需要用户输入用户名和密码,但在移动...

    Python基于Django的物资管理系统 实现二维码生成与扫码功能

    python基于django 实现的物资管理系统,有二维码生成和扫码功能。 此作品为作者学习Python后的第一个作品,所有的视图处理都放在了VIEW视图里,而且鄙人比较懒,并不想在model加函数了,程序结构很臃肿,对于一些...

    仿淘宝 阿里云登录 密码和扫码切换登录

    - 扫码登录通常涉及服务器端的API,客户端(浏览器)通过调用API生成二维码。在实际应用中,这个过程可能包括用户授权、生成一次性二维码、扫描后验证等步骤。然而,这个项目作为静态界面展示,可能仅实现了二维码...

    基于html5、JS实现的二维码扫码

    调出摄像头,拍照保存到画布,定时传送到解析函数 ...解析函数是后台c# .net MVC 实现的,解析函数用到的二维码解析API依赖于第三方二维码库google zxing , 因此需要先引用类库:zxing.dll、zxing.presentation.dll

    C#语言实现网页微信扫码登录.zip

    在微信扫码登录中,你的网站(客户端)需要获取用户的授权,以便从微信服务器(资源服务器)获取用户的微信信息,从而完成登录。 接下来,我们要注册一个微信开放平台账号,获取到AppID和AppSecret。这是你的应用与...

Global site tag (gtag.js) - Google Analytics