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

2023-05-16

1、OAuth2.0

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

  允许用户 提供一个令牌而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
2、目标
  我们这里主要模拟使用OAuth2.0,用户通过扫描我们网页应用的二维码并进行授权登录来获取用户的基本信息的过程。详细的接口相关信息可以在微信开放平台上查看: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
3、前期准备(获取微信开发者权限)
  我们这里主要讲的是网站(Web)应用,网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统(即上面的协议)。在微信客户端授权登录(获取用户信息)的可以查看: http://www.cnblogs.com/0201zcr/p/5131602.html

  在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

3.1、注册开发者账号
  可以在 https://open.weixin.qq.com/ 这里申请开发的账号。由于是腾讯的网页,这里可以直接通过 QQ号进行登录。
3.2、提交网站应用审核
  在已经登录的界面中选择“管理中心”——》网站应用——》创建网站应用
   将会弹出下面的界面
  填写过后,还有有一个页面需要填写,提交一份纸质版申请书扫描件(会提供模板,我们下载再来填写后,需盖章,签名),配置回调域名(扫码登录后会跳转的页面)等。
  之后提交审核即可,等微信审核通过,我们即可获得我们需要的网页应用的 appid和AppSecret,并配置后回调的域名了(这三样是我们开发所必须的)。
3.3、开发者资质认证
  由于我们这里要使用微信登录的接口,所以我们还需要向微信提出认证,只有认证了才能使用微信那些高级的接口。未认证的如下图所示
   认证之后是这样子的:
    我现在暂时没有找到可以向公众账号那样子的测试账号的申请。如果有知道怎么可以申请到测试账号的高手,希望能赐教一下。
  接下来,我们就可以开始我们的网页微信扫码登录开发了。
4、授权流程说明
  微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

  微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:


1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。  

   获取access_token时序图:

 
5、获取网页的二维码
  当我们通过微信的认证,获取到了 appid和AppSecret,并配置了回调的域名。我们就已经可以获取属于我们网页的二维码了,获取的方式很简单,只需打开一个微信的链接,加上我们的appid和回调域名即可在网页上面打开二维码,用户用微信客户端扫码并授权登录之后即会跳转到我们配置的回调域名下。
注意:

1、这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;
2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.comhttp://qq.com无法进行OAuth2.0鉴权  

5.1、请求url说明

  第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:


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进行校验
 返回说明
   用户 允许授权后,将会重定向到redirect_uri的网址上,并且 带上code和state参数

redirect_uri?code=CODE&state=STATE  

   若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数


redirect_uri?state=STATE  

5.2、事例:

  一号店的微信二维码链接如下:


https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect  

   将其复制到浏览器中打开即可获得一号店的二维码,二维码页面如下:

  通过使用微信客户端的扫一扫功能,扫描该二维码,即会跳转到上面填写redirect_uri所在的地址上。假如用户同意授权,这里就获得了微信返回的code参数了。

6、获取用户信息

  假如前面已经获得code。我们可以通过code参数去获取用户openid和access_token,进而获得用户的信息。
6.1、通过code参数获取access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code  

 参数说明

参数是否必须说明
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
secret应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code填写第一步获取的code参数
grant_type填authorization_code
返回说明

正确的返回:


{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}  
参数说明
access_token接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔
 unionid当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

错误返回样例:


{"errcode":40029,"errmsg":"invalid code"}  
注意
  • code参数的超时时间是5分钟,且每次请求的code参数的值都不一样。
  • access_token的超时时间是32分钟。
6.2、通过access_token获取用户的基本信息
获取的前提条件
  • access_token有效且为超时;
  • 微信用户已授权给第三方应用账号相应接口作用域(scope)【在二维码生成连接那里填写
对于接口作用域(scope),能调用的接口有以下:
授权作用域(scope)接口接口说明
snsapi_base/sns/oauth2/access_token通过code换取access_token、refresh_token和已授权scope
/sns/oauth2/refresh_token刷新或续期access_token使用
/sns/auth检查access_token有效性
snsapi_userinfo/sns/userinfo获取用户个人信息
 
  使用snsapi_base作用域的授权是扫码之后无需用户点击授权,扫码后直接跳转,用户感觉不到授权了,但这种授权方式能获取的数据量有限,这里我们要获取用户的基本信息,我们需要使用snsapi_userinfo授权。使用snsapi_userinfo授权,扫码后出现类似于下面的授权界面
  此接口用于获取用户个人信息。开发者 可通过OpenID来获取用户基本信息。特别需要注意的是, 如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
  

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID  

 参数说明

参数是否必须说明
access_token调用凭证(上一个请求中获得)
openid普通用户的标识,对当前开发者帐号唯一(上一个请求中获得)
       lang  否国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN
返回说明

正确的Json返回结果:


{ 
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1", 
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

}  
参数说明
openid普通用户的标识,对当前开发者帐号唯一
nickname普通用户昵称
sex普通用户性别,1为男性,2为女性
province普通用户个人资料填写的省份
city普通用户个人资料填写的城市
country国家,如中国为CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
unionid用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

错误的Json返回示例:


{ 
"errcode":40003,"errmsg":"invalid openid"
}  

7、总结 

  最近着手开发了微信网页扫码登录和公众号授权登录收获颇丰,两者的开发很类似。以下是我个人摸索过程中发现的两者的异同:

  • 两者都可以通过微信客户端扫码授权的方式,让第三方页面获得微信用户的一些基本信息(昵称、性别、所在地、在微信唯一标示等……)。他们都是通过提供一个链接让用户授权的方式。但网页版需要在页面打开二维码之后授权,而公众号则需要用户先关注了我们的公众号,然后点开公众号里面的链接,确认授权即可。
  • 网页扫码登录需要将授权的链接(二维码链接)在网页中打开、而公众号授权登录的链接必须要微信客户端中打开。
  • 无论网页扫码登录还是在公众号中授权登录,都是通过授权的方式获得一个code参数,之后通过code参数获取access_token和openid和通过access_token和openid去获取用户的基本信息的请求链接是一样的。
  • 在开发公众号授权登录的过程中,我发现了有测试账号的提供,足以满足我们的测试和开发,但在开发网页扫码时,暂时未发现哪里能获取测试账号,我是通过申请获取的。(希望知道哪里有测试账号的请求高手赐教)。

 公众账号授权登录:http://www.cnblogs.com/0201zcr/p/5131602.html

微信公众号群发消息:http://www.cnblogs.com/0201zcr/p/5866296.html

    致谢:感谢您的阅读!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信开放平台开发——网页微信扫码登录(OAuth2.0) 的相关文章

  • 京东物流青龙系统分享

    QQ空间 腾讯朋友 新浪微博 人人网 开心网 微信 QQ好友 腾讯微博 浏览 xff1a 1102 2015年 xff0c 中国的大电商平台格局已定 xff0c 各大平台开始重视的方向已经从过去的价格战转向最后一公里和O2O的布局了 移动电
  • 彻底解决DZ大附件上传问题

    2012 4 13日更新 xff1a 因为这篇文章是很早以前写的了 xff0c 很多朋友看到了之后向我咨询大附件的问题 xff0c 但是以下部分信息已经失效 xff0c 如需了解这个问题的最新解决方案 xff0c 可以加我的QQ群 xff1
  • 前端经典面试题CSS三栏布局

    对于前端来说 xff0c 布局也是必须掌握的 xff0c 一个好的布局可以让页面看起来更美观 提到布局 xff0c 那就不得不说CSS三栏布局 这是前端面试经常会问到的一个问题 xff0c 算是基础题 所谓的三栏布局 xff0c 一般是指左
  • xmanager 注册码及评估期已过的解决办法

    注册信息 用户 xff1a admin 企业 xff1a microsoft Xshell4 0注册码 xff1a 690313 111999 999313 Xftp 4 0注册码 xff1a 101210 450789 147200 Xs
  • ntoj 808 蚂蚁的难题(八)

    蚂蚁的难题 八 时间限制 xff1a 2000 ms 内存限制 xff1a 65535 KB 难度 xff1a 5 描述 蚂蚁是一个古玩爱好者 xff0c 他收藏了很多瓶瓶罐罐 有一天 xff0c 他要将他的宝贝们一字排开 xff0c 摆放
  • CentOS 7尝试安装 phpstudy

    安装方法 xff08 phpstudy for linux V0 2公测版 xff09 使用 SSH 连接工具 连接到您的 Linux服务器后 xff0c 根据系统执行相应命令开始安装 xff08 大约2分钟完成面板安装 xff09 xff
  • asp.net 2.0中傻瓜式使用soap header

    在websevrice 中 soap header是十分重要的哦 xff0c 主要是安全性的考虑 xff0c 在asp net 2 0中 可以简单地应用soap header来 进行傻瓜式的应用 xff0c 更复杂的应用当然要更深入地去看了
  • Linux操作系统中对于NTFS读取目录功能的实现

    1 2 We use the same basic approach as the old NTFS driver i e we parse the 3 index root entries and then the index alloc
  • matlab练习程序(演化策略ES)

    还是这本书上的内容 xff0c 不过我看演化计算这一章是倒着看的 xff0c 这里练习的算法正好和书中介绍的顺序是相反的 演化策略是最古老的的演化算法之一 xff0c 和上一篇DE算法类似 xff0c 都是基于种群的随机演化产生最优解的算法
  • 火狐浏览器无法打开

    解决火狐浏览器无法打开的问题 xff1a 第一种方法 请先检查一下任务管理器中有没有火狐的进程 xff08 firefox exe xff09 xff0c 有的话 xff0c 请在任务管理器中强行关闭它 xff0c 然后试试用safe mo
  • 快上车项目简介(500字)

    第8组 快上车 xff0c 这是一款日常生活中非常有趣的安卓手机软件 xff0c 致力于打造一个大学生的专属娱乐创意社区 xff0c 讨论的话题轻松休闲贴近大学生活 xff0c 与在社会中十分流行的贴吧 xff0c 糗事百科类似 在快上车中
  • 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案

    问题现象 xff1a 由于重装linux xff0c 并且加了固态硬盘 xff0c 直接将系统装在固态硬盘中 启动服务器的时候 xff0c 便看不到原来机械硬盘的挂载目录了 xff0c 不知如何访问机械硬盘了 直接用命令 mount dev
  • 对目前市面上WPF书的浅薄感受

    目前市面上 WPF的书籍 xff0c WPF揭秘 人民邮电出版社 深入解析 WPF编程 电子工业出版社 xff0c WPF程序设计指南 电子工业出版社 WPF高级编程 清华大学出版社 我购买了前面三本 xff0c 简单的对前面三本说一些浅薄
  • 麒麟操作系统配置web服务器,银河麒麟服务器设置

    银河麒麟服务器设置 内容精选 换一换 鲲鹏软件栈汇聚各种鲲鹏兼容软件 xff0c 帮助开发者了解如何将软件移植到鲲鹏上运行 xff0c 获取操作指导和工具 来自 xff1a 其他 对于业务量访问较大的业务 xff0c 可以通过ELB设置相应
  • 技术岗的职业规划_剪辑师该如何做好职业规划?

    各位点进来的小伙伴 xff0c 我猜你们在22 28岁之间吧 这是我们人生中最迷茫最不知所措的年龄段 刚大学毕业发现学的专业跟实际工作起来相差甚远 xff0c 茫然失措 工作几年后 xff0c 猛然发现每日的工作内容都差不多 xff0c 毫
  • debian11的PVE应用

    1 在debian11中安装pve7之后 xff0c 新建虚拟机安装openeuler 启动时报错 xff1a TASK ERROR start failed QEMU exited with code 1 可以把这一段 39 kvm ig
  • cvc 降噪_你买的“降噪”耳机真的是你想要的降噪吗?

    降噪 这一个高大上得词 xff0c 在你们眼中是不是非常的有效 xff0c 面对公共交通工具热播剧外放 xff0c 街道上车水马龙的轰鸣 xff0c 咖啡厅孩子们的喧嚣 xff0c 噪音其实一直都在我们的身边 xff0c 无处不在 xff0
  • ajax post请求怎么传参_高级前端:详解手写原生Ajax的实现

    点击上方 前端印象 xff0c 选择 设为星标 第一时间关注技术干货 xff01 对于Ajax xff0c 肯定很多小伙伴都听过甚至用过了 xff0c 那么没听过的也不用着急 xff0c 本文会对Ajax进行讲解 xff0c 其次 xff0
  • java版如何使区块常加载_Minecraft指令手册

    众所周知 xff0c 人是一种健忘的生物 所以作者忘记了Java版的常加载指令 幸亏一位书友留的言提醒了我 xff0c 不然Java版的各位就只能去网上查了 然后查到 xff0c 头上却起了大雾 滑稽 那么进入正题 xff1a Java版的
  • linux点歌机硬盘,自己动手给KTV点歌机换大硬盘

    某宝买的硬盘KTV点歌机 xff0c 当时买的是单主机没要触摸屏一体的 xff0c 所以硬盘容量最大只有1TB的 原来内置的歌曲 已经挺多的了 xff0c 剩余空间所剩无几 刚好有一块闲置的2TB硬盘就打算把它换上 可以看到剩余空间只有26

随机推荐