咨询电话:
15628812133
22
2020/08

微信公众号如何通过网页授权来获取用户的身份信息

发布时间:2020-08-22 15:35:45
发布者:已经写了
浏览量:
0

很多网站做了很多年,积累了很多的用户会员,但是互联网发展的速度实在是快,用户使用网络的地方也越来越多,很多的网站都需要有会员才能正常的使用,但是网站多了,注册的会员账号也就多了,记录帐号信息的数量就越来越多,所以很多网站都更新了微信一键注册登录的功能,使用微信登录不用再记帐号密码等信息也不用频繁输入帐号密码,微信授权直接登录。

下面就直接介绍微信授权的逻辑和代码:

首选需要配置微信公众号的一些基本信息,获取到关键信息一个是appid还有就是secret秘钥,接着就是网页授权的三个步骤

1:用户授权获取code参数

2:通过code参数获取access_token参数

3:通过access_token访问微信的接口获取用户信息

先介绍如何获取code参数,微信提供了服务号的高级接口,只需要让用户在页面中打开微信提供的连接地址即可发起用户授权

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE

介绍一下连接地址中需要放入的参数,首先appid为公众号的公众号的唯一标识,redirect_uri授权后重定向的回调链接地址,需要用urlEncode函数对链接进行处理,response_type返回值,必须为code,scope参数有两个选项一个是应用授权作用域,snsapi_base 参数(不弹出授权页面,直接跳转,只能获取用户openid),另一个是snsapi_userinfo 参数(弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )最后一个参数state,用户传递的参数。#wechat_redirect必须放在连接最后

下图为scope参数为snsapi_userinfo 的授权页面

0.jpg

接着第二部用获取到的code值换区网页授权的access_token,这里通过code换取的是用于网页授权access_token,与基础支持中通过appid和secret获取到的access_token值不同,网页授权的access_token只能通过code来换取,用code参数访问下面的网址

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

其中grant_type参数需要填写为authorization_code,访问成功的话会返回JSON数据

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

返回的参数中包含access_token,expires_in接口调用凭证超时时间,refresh_token刷新的token,openid用户唯一标识和scope用户授权的作用域,获取到用户的openid基本上就可以用来区分用户了,也可以使用openid继续获取用户的基本信息,前提是scope的值为snsapi_userinfo

最后一步获取用户信息,可以通过刚刚返回的access_token和openid获取用户信息。

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

成功的话会返回json数据,正确的数据包格式如下,可以获取到用户的很多信息,用户昵称性别等等

{   
  "openid":" OPENID",
  "nickname": NICKNAME,
  "sex":"1",
  "province":"PROVINCE",
  "city":"CITY",
  "country":"COUNTRY",
  "headimgurl":       "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
返回列表