微信二维码授权登录网站的实现
发布时间:2022-11-18 17:09:45 来源:文档文库
小
中
大
字号:
开发案例 文章编号:1007—1423(2017)01—0070~03 DOI:10.3969/j.issn.1007—1423.2017.01.017 微信二维码授权登录网站的实现 陈彩云,李鹏,温武,郭四稳 (广州大学计算机科学与教育软件学院,r-'kH 510006) 摘要: 区别于常用的用户名和密码的登录方式,采用微信二维码授权的登录只需手机轻轻一扫,即可方便地实现登录功能 网站开发者只需在微信注册一个公众号或者服务号,利用微信公众号的授权接口,可以实现网站二维码登录。给出实 现这种登录功能的基本原理.并给出具体的实现步骤 关键词: 微信:公众号:二维码 基金项目: 广东省2015年度高等教育教学改革项目(粤教高i ̄[2015]173 g-)、广州大学2016年度教育教学研究项目(rgk ̄2016] 149号1 0 引言 随着微信的广泛使用.其大力推广的基于二维码 情请查看微信文档:http://mp.weixin.qq.com/wiki/17/c0f3 7d5704f0b64713d5d2c37b468d75.htm1).生成一个可以 的登录方式也得到了广泛的应用,不管是微信号、公众 号、网页地址还是图片地址,甚至个人通讯录名片都可 以做成二维码,通过微信扫一扫功能即可以快速打开、 获取微信用户身份信息的URL.当用户在电脑端打开 网站登录页面时.服务器将该URL的信息传送给电脑 端浏览器.并以二维码的形式展示到网站的登录页面 上。同时网页还会启动一个定时器。通过AJAX周期性地 使用、浏览和添加。微信本身的网页版本和电脑版本也 都采用了扫描二维码的方式登录 基于二维码的登录方 式非常简便快捷,因此深受欢迎.几乎成为一种时尚。 向服务器询问是否有用户扫描二维码并授权登录 此时.如果有手机用户使用微信的扫描二维码功 能扫描网页上的二维码.便会获取到如前所述的URL. 通过该URL.用户会首先访问微信服务器.并从微信服 务器获取一个表示用户身份的唯一标识码 接着用户 访问网站服务器.将微信服务器提供的唯一标识码传 递给网站服务器.网站服务器便获得了用户的授权 随 后网站服务器发送一个表示授权成功的页面显示到手 目前.微信没有将授权登录的功能完全开放给普通 网站,作为网站开发者,如何实现扫描二维码登录呢?网 络上一些编程爱好者提出了多种设想Ⅲ.却通常未得到 实际验证 笔者比较早接触微信公众号项目.在开发实 践过程中摸索出了具体可行的方案.这种方案是通过微 信公众号提供的接口功能来实现微信授权登录.与一些 网络可循的设想有类似之处.但思路和技术细节不尽相 同 本文将以项目中实现的微信二维码授权登录网站功 机上(该页面需要开发者自己制作)。网站服务器获得 用户的授权之后会将唯一标识码发送给微信服务器. 微信服务器根据这个唯一标识码将用户的基本信息传 递给网站服务器。最后,网站服务器把获得的用户信息 能作为一个开发案例.详细讲解其过程 1 微信授权登录原理 网站服务器通过微信公众号提供的授权接口(详 通过AJAX传递给电脑端网页.电脑端网页显示授权 >>>>通过.登录成功 ① 现代计算机2017.01上
2 开发准备 为了完成这个案例.必须先准备好以下几个条件: 需要一台网站服务器(简称服务器)和一个有效域名; 已经申请一个认证的服务号(微信公众号中的一种). 或微信提供的开发者公众号.并关联到网站服务器: 开发者需要掌握一种后台编程语言.本文选用Nodejs 语言[21:此外,开发者需要掌握基本的HTML[ ,Java— Scriptt4j,AJAX开发技术。 3 具体实现步骤 第一步。生成一个静态手机页面,提示授权成功。 页面效果如图1所示 - 图1授权成功页面 第二步,生成带微信授权URL的二维码。本文采 用N0dejs+Express+Redis的方案来实现。首先,根据微 信提供的授权接口.生成如下URL(其中下划线标识的 部分是网站服务器本身的地址.手机将根据这个地址 去访问网站服务器):https://open.weixin.qq.com/connecff oauth2/authorize?appid=…&redirect_uri=http%3A%2F% 2Fwww.%E6%8E%88%E6%9D%83.com&response_type= c0de&sc0pe=snsapi_base&state=farain#wechat_redirect 实现代码如下: var createAuthUrl=function(inputUr1){,/生成一个授权 链接 var url:encodeURIComponent(inputUr1); retum"https://open.weixin.qq.com/connect/