网页授权是在坐微信公众号开发时,经常需要开发的一项功能,今天刚好做到这个需求,以此记录一下:
首先:
在进行开发之前需要到微信公众号管理后台的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”去添加修改一下网页授权的回调域名,这里填的域名,注意不要加https://或者http://
其次
在添加回调域名的页面会需要下载一个类似证书的验证文件,需要将此文件放到你的项目根目录下
准备工作操作完了之后,就得进行代码开发了,网页授权又分为静默授权和常规授权,静默授权,用户是无感知的跳转到回调页面,而基础授权是需要用户授权点击确认授权的,两者的区别于scope参数,静默授权的scope = snsapi_base,而基础授权scope = snsapi_userinfo,静默授权一般只是进入页面获取用户的openid,而基础授权则是获取到用户的基础信息
开发中:
第一步:通过引导用户在微信中点击或者代码中重定向与此链接:
scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
redirect_uri为自身设置的回调域名接口,state参数可以自行设置也可以默认不改,当点击之后,如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
第二步:在回调接口获取微信返回的code(注意:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。)之后,通过code来换取网页授权的access_token
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,将自己准备好的参数APPID,SECRET,CODE修改之后,发送请求给微信,正确时微信会返回一个json包
正确时返回的JSON数据包如下:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
,至此,如果时静默授权,之需要获取用户openid的话,就可以了,然后我们就可以将获取到的openid存入相应的地方即可
如果是基础授权:
第三步:拉去用户基础信息
将之前获取的access_token以及openid修改之下面的对应的参数然后给微信发送get请求
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
如果正确时,微信会返回json数据包:
正确时返回的JSON数据包如下:
{
"openid":" OPENID",
"nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
refresh_token:
获取第二步的refresh_token后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN,以此来刷新access_token,正确时会返回如下json数据
正确时返回的JSON数据包如下:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}