nodejs微信开发之授权登录+获取用户信息

上一篇:获取access_token+自定义菜单

这部分代码是之前就已经完成了,但是考虑篇幅的问题就和上篇分开了,这部分相较前面的方式较为复杂一点,但是也是很容易理解的。

这里简单介绍一下微信网页授权。

微信网页授权配置回调域名:

注:下面引自官方文档

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.com 、 http://qq.com无法进行OAuth2.0鉴权。

比如:需要授权的网页域名为http://xiadd.weixin.qq.com/demo,那么需要配置回调域名为xiadd.weixin.qq.com。其他域名同理。配置图示如下:

在权限里找到这部分,点击修改。

将回调域名改为自己需要的域名:

这样回调域名就修改成功了。

授权登录

关于授权登录的各种参数细节这里就不多说了,但是这里也有一个access_token需要注意一下,和全局缓存的那个注意不要搞混了(话说tx为啥不做一下命名区分)。这里的access_token是oauth的一个凭证,全局缓存的那个是调用微信公众平台各个基础接口所要用到的凭证。
具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息
这里的第三步不是必须的,这里先不提,也就是授权登录主要是三部分。引导用户点击相应链接获取code,code换区access_token,通过access_token去的相应信息。

引导用户获取code

因为授权登录的权限较高,所以微信平台会对链接的顺序进行校验,顺序是固定的。链接格式如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

其中appid是固定的,就是公众号的appid。
redirect_uri就是授权成功后需要跳转到的链接。
response_type是固定的就是code。
scope就是授权权限,主要有两种:snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)。

这里的scope以snsapi_userinfo为例,获取用户的信息。点进链接进入到授权页面。如图:

授权后得到url形式如下。code就包含在url里:

这样code就得到了。code只能使用一次,5分钟未被使用自动过期。

通过code换取网页授权access_token

再次提醒,这里的access_token和全局缓存的access_token是不一样的。具体返回参数请看文档,这里不一一列出了。
得到code后,通过get请求https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,参数分别为appid,appsecret,和前一步获取的code,虽然这里可以通过浏览器进行请求,但是因为安全级别高,所以千万在服务端进行请求。代码如下:

//getWebToken.js
function getToken(code) {
 let reqUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
 let params = {
 appid: config.appId,
 secret: config.appSecret,
 code: code,
 grant_type: 'authorization_code'
 };

 let options = {
 method: 'get',
 url: reqUrl+qs.stringify(params)
 };
 console.log(options.url);
 return new Promise((resolve, reject) => {
 request(options, function (err, res, body) {
  if (res) {
  resolve(body);
  } else {
  reject(err);
  }
 })
 })
}

就是很简单的一个请求得到想要的数据。但是注意得到的数据是个字符串,需要进行处理,响应格式如下:

对于scope为snsapi_base的授权,这里是最后一步,会返回openid。如果需要再进行下一步。

拉取用户信息

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
请求方法
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
这里也很简单。直接看代码:

function getUserInfo(AccessToken, openId) {
 let reqUrl = 'https://api.weixin.qq.com/sns/userinfo?';
 let params = {
 access_token: AccessToken,
 openid: openId,
 lang: 'zh_CN'
 };

 let options = {
 method: 'get',
 url: reqUrl+qs.stringify(params)
 };

 return new Promise((resolve, reject) => {
 request(options, function (err, res, body) {
  if (res) {
  resolve(body);
  } else {
  reject(err);
  }
 });
 })
}

具体响应到网页上如图所示:

这样就通过授权登录拉取到了用户信息。

github地址奉上:https://github.com/xiadd/shorthand 欢迎star

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • node.js实现微信开发之获取用户授权

    本篇主要讲述,如何在微信中打开自家页面后,弹窗请求用户授权,以便拿到用户的微信信息. 首先说一下,完成自定义分享信息的,从无到有的流程: 基础硬件服务: 需要一个公网可以访问的有效域名: 购买域名,并备案,我是在阿里云购买的,备案需要十几个工作日. 购买ip,然后设置上面的域名,解析到该ip,这个时间可以快到忽略. 拥有自己的服务器,来存放自己页面项目: 我还是在阿里云购买购买服务器,这个花费最大,几百元一年的使用权. 而且这个服务器,本质就是一台电脑,是电脑就有配置,我目前只是自己学习使用,配

  • nodejs微信开发之授权登录+获取用户信息

    上一篇:获取access_token+自定义菜单 这部分代码是之前就已经完成了,但是考虑篇幅的问题就和上篇分开了,这部分相较前面的方式较为复杂一点,但是也是很容易理解的. 这里简单介绍一下微信网页授权. 微信网页授权配置回调域名: 注:下面引自官方文档 1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,

  • springboot+jwt+微信小程序授权登录获取token的方法实例

    目录 前言 配置 XcxAuthenticationProvider XcxAuthenticationToken 小程序授权登录 前言 我们有时候在开发中,遇到这样的问题,就是我们需要小程序授权登录我们自己的后台,通过小程序的信息换取我们自己后台的token,实现账号密码.小程序授权登录的多种登录方式. 配置 在 SecurityConfig文件中配置 XcxAuthenticationProvider public class XcxAuthenticationProvider implem

  • vue调用谷歌授权登录获取用户通讯录的实现示例

    调用谷歌授权,获取用户通讯录信息 业务背景 业务端要求,用户本人填写信息,推荐到朋友,要求可以导出用户谷歌邮箱的通讯录,让用户选择,并且回显到页面 ##步骤 在谷歌开发者平台 , 创建一个项目,我的理解是,我们的页面就是这个项目,要由我们的项目,对谷歌发起授权请求,就类似微信小程序,向官方发起授权,请求昵称和头像的这个场景,所以,后面我们的这个项目也要通过谷歌的审核. 来到api服务 这时候就到了我们这个项目的管理后台 然后要创建一个用户凭据,拿到我们项目的id和key 配置下面的域名,也就是让

  • 微信小程序如何同时获取用户信息和用户手机号

    今天在写登陆页面的时候,由于需要的个人信息和手机号的授权,但是如果在页面上直接放2个按钮,岂不是很呆??? 索性就写了一个mask层,去引导用户授权手机号. 1. 当我点击快捷登录的 微信登录时,首先触发的是 微信原生的 获取用户信息userInfo 的方法,再它的 success 回调里面去打开 mask 层..... 2. mask 层里面 有一个按钮,这个按钮是去触发 微信原生的 获取用户手机号的 getPhoneNumber 的方法,接下来就不用我多说了吧.... 直接甩代码 <!--快

  • 微信网页授权并获取用户信息的方法

    介绍 在很多微信H5应用里,当用户访问第三方应用时就需要进行微信网页授权,并且很多涉及安全的操作我们必须要先获取用户信息才能继续,本文章简单介绍了微信授权流程,并通过申请微信测试账号来模拟网页授权,用户在授权页点击确定登录后获取用户信息并显示在前端页面,最后效果如下图 工具及开发准备 1. 微信开发者工具及微信测试号 因为是微信授权,所以必须要在微信环境下使用,首先我们要在这里安装微信开发者工具,因为我们没有自己的应用,所以还需要在微信公众平台申请一个接口测试号,这个接口测试号就相当于我们的第三

  • 微信小程序实现获取用户信息并存入数据库操作示例

    本文实例讲述了微信小程序实现获取用户信息并存入数据库操作.分享给大家供大家参考,具体如下: 微信小程序获取用户信息简单,但是在存入自己服务器数据库的过程中研究了一天多的时间,并且网上搜索不到该资源,故发出来供大家参考. index.js Page({ data: { nickName: "微信账号登录", avatarUrl:"./user-unlogin.png", }, onLoad: function () { var that = this; var nic

  • 支付宝开发平台之第三方授权登录与获取用户信息

    对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ.微信.新浪.支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录. 打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用: 点击功能信息,添加我们需要的功能: 到这我们还不能进行接口调试,因为我们的应用没有上线,APPID是无效的,这里阿里给了我们一个解决方案,就是通过沙箱模式进行接口调试,下面我们来配一下我们的沙箱模式: 配置过RAS2就可以不用配置RAS1了,公钥和私钥的生成规则,查看支

  • 微信开发 网页授权获取用户基本信息

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一.什么是OAuth2.0 官方网站:http://oauth.net/   http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method

  • 微信开发之网页授权获取用户信息(二)

    在公众号的配置过程中,许多开发者会在菜单中加入HTML5页面,有时在页面内需要访问页面的用户信息,此时就需要网页授权获取用户基本信息 我们提醒大家:本文介绍讲述的内容是基于yii2.0框架 1.设置授权回调域名:开发 ---> 接口权限 找到"网页授权获取用户基本信息",点击后面对应的"修改",在弹框响应位置填写授权回调域名即可,此处的域名不需要加http:// (关于网页授权回调域名的说明详情可参考公众平台开发者文档) 2.获取授权 关于OAuth2.0博主

  • 微信小程序实现授权登录之获取用户信息

    本文实例为大家分享了微信小程序实现获取用户信息的具体代码,供大家参考,具体内容如下 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 登录流程时序 效果展示: 功能实现: 新建一个login页面 login.js: wx.getUserProfile用于获取用户信息 wx.getStorageSync()用于获取缓存,进入小程序时调用 wx.setStorageSync()用于保存缓存,保存登录信息,下次进入小程序自动登录 Page(

随机推荐