那些年用node接入微信走过的坑之(四)---微信扫码登录第三方网站
来源:互联网 发布:黑马程序员每天演讲 编辑:程序博客网 时间:2024/04/29 15:58
序言
随着微信使用者不断增多,很多网站使用了微信扫码登录功能,这里做一个简单的实现。
第三方网页授权和微信网页端授权
这两个笔者当初区分了好久,有什么区别和联系呢?
相同点:
两者的过程基本是类似的,都是通过appId和secret和code首先获取access_token(注意这里的access_token跟通用api调取token是不一样的 ),然后通过access_token和openId获取用户基本信息进行操作,比如说登录。
不同点:
- 微信网页授权,一般情况下在微信端打开的页面,出现如下授权方式的,如图 。
- 第三方网页授权一般是,比腾讯的易迅
。
授权的界面也是不同的。
实现
###微信网页授权
首先我们要有自己的公众号,查看appId和secret
1. 跳转链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=yourId&redirect_uri=yourUrl&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
2.生成链接 yourUrl + &code=xxxxxxxx,这个链接我们可以哪里进行获取用户信息,比如openId。
第三方网页授权登录
首先我们要在微信开发平台中建立一个网页应用(重要)
两种方式,一种是直接使用微信页面,一种是将微信页面(ifram)嵌入到我们自己的网页中来,我采用第二种
- 首先在页面生成ifram。关键代码如下
wxInit: function () { !function (a, b) { function d(a) { var e, c = b.createElement("iframe"), d = "https://open.weixin.qq.com/connect/qrconnect?appid=" + a.appid + "&scope=" + a.scope + "&redirect_uri=" + a.redirect_uri + "&state=" + a.state + "&login_type=jssdk"; d += a.style ? "&style=" + a.style : "", d += a.href ? "&href=" + a.href : "", c.src = d, c.frameBorder = "0", c.allowTransparency = "true", c.scrolling = "no", c.width = "300px", c.height = "400px", e = b.getElementById(a.id), e.innerHTML = "", e.appendChild(c) } a.WxLogin = d }(window, document); //初始化 var obj = new WxLogin({ id: "login_container", appid: "yourId", scope: "snsapi_login", redirect_uri: encodeURIComponent("http://www.idianbang.cn/user/login"), state: Math.ceil(Math.random() * 1000), style: "black", href: "" }); }
2.跟上一步一样,生成链接 yourUrl + &code=xxxxxxxx,这个链接我们可以哪里进行获取用户信息,比如openId。
最后做一些处理比如说登录
就是获取用户信息,对用户进行登录或者注册的操作
function getWXUser(req, res) { var code = req.body.code; var type = req.body.type || 0; var appid, appsecret; if (parseInt(type) == 0) { appid = constant.WX_WEB_OPEN_APPID; appsecret = constant.WX_WEB_OPEN_APPSECRET; } else { appid = constant.WX_OPEN_APPID; appsecret = constant.WX_OPEN_APPSECRET; } AV.Cloud.httpRequest({ method: 'GET', url: 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' + appid + '&secret=' + appsecret + '&code=' + code + '&grant_type=authorization_code', success: function (httpResponse) { var data = JSON.parse(httpResponse.data) var access_token = data.access_token; var openid = data.openid; //获取unionid AV.Cloud.httpRequest({ method: 'GET', url: 'https://api.weixin.qq.com/sns/userinfo?access_token=' + access_token + '&openid=' + openid, success: function (httpResponse) { var data = JSON.parse(httpResponse.data) data.access_token = access_token res.send({ 'code': 0, 'data': data }) }, error: function (httpResponse) { res.error({ "code": httpResponse.status, "message": httpResponse.data.error + httpResponse.data.error_description }); } }); }, error: function (httpResponse) { res.error({ "code": httpResponse.status, "message": httpResponse.data.error + httpResponse.data.error_description }); } });}
结语:
这里有一个梗,微信用户在不同平台的openId是不一样的,这里就要注意了,如果您要使用网页第三方登录和微信客户端授权登录,是两个应用,同一用户的openId是不一样的,你可以和我们一样使用unionid来生成用户和登录,这样就不会有太多的问题了,否则产生两个用户。
不过还有一种方式是只用公众号授权方式,典型的是石墨文档,想了解的朋友可以去体验下是怎么实现的,有空可以把这个改成那种方式,体验可能更好一些吧。
ITDogFire –sky
- 那些年用node接入微信走过的坑之(四)---微信扫码登录第三方网站
- 那些年用node接入微信走过的坑之(一)---成为开发者
- 那些年用node接入微信走过的坑之(五)---微信菜单(自动回复素材)
- 那些年用node接入微信走过的坑之(二)---微信自定义菜单
- 那些年用node接入微信走过的坑之(三)---微信事件监听
- 微信第三方接入遇到的科恩(坑)——登录、分享
- Android微信第三方登录接入
- 第三方App接入微信登录
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- Android第三方登录-----微信登录接入方法
- 微信第三方网站登录
- 第三方网站微信登录实现
- 第三方登录之微信登录
- 第三方App接入微信登录 解读 (微信开放平台)
- 第三方App接入微信登录 解读
- 画板间即时通讯demo
- ROS学习笔记二:探索ROS文件系统
- 数据库表中获取随机数据
- 软件测试基础(一)
- JavaScript学习笔记二十四:操作DOM
- 那些年用node接入微信走过的坑之(四)---微信扫码登录第三方网站
- sequelize(一)
- 夫妻银行卡取钱之初识单例模式
- 常见验证码的弱点与验证码识别
- Hadoop学习重点体系结构
- Python 学习笔记(七)验证码识别1 整体算法 (
- 多层感知机
- 机器 · 人 | 可重复的事情,让机器去做
- 文章标题