网页授权是在坐微信公众号开发时,经常需要开发的一项功能,今天刚好做到这个需求,以此记录一下:

首先:

在进行开发之前需要到微信公众号管理后台的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”去添加修改一下网页授权的回调域名,这里填的域名,注意不要加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" 
}