很多网站做了很多年,积累了很多的用户会员,但是互联网发展的速度实在是快,用户使用网络的地方也越来越多,很多的网站都需要有会员才能正常的使用,但是网站多了,注册的会员账号也就多了,记录帐号信息的数量就越来越多,所以很多网站都更新了微信一键注册登录的功能,使用微信登录不用再记帐号密码等信息也不用频繁输入帐号密码,微信授权直接登录。
下面就直接介绍微信授权的逻辑和代码:
首选需要配置微信公众号的一些基本信息,获取到关键信息一个是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 的授权页面
接着第二部用获取到的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" }