最近公司要搞微信公众号,我也借机玩儿一波企业公众号,所有权限开通的感觉就是不一样,这才是VIP的感觉!近期要搞个活动,结合网页做个排行榜,所以需要用到网页授权。网页授权的最终目的是为了让用户无感登登录,免去复杂的登录流程,大家别理解错了。正好微信除了提供网页授权登录外,还提供了非常丰富的接口,以支持我们自己的业务逻辑,不用白不用。下面一起来看看微信公众号开发网页授权获取用户信息需要怎么做,写什么代码。
先看效果,通过网页直接获取微信登录用户信息。
开发前须知
- 要使用网页授权接口功能,必须要认证了的公众号才行,也就是说,订阅号没戏。
- 回调域名。公众平台官网中的“开发 – 接口权限 – 网页服务 – 网页帐号 – 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。回调域名不包含http或https。
- 回调域名填写后所有回调域名下的网页都可以使用授权,如www.daimadog.com是回调域名,那么在www.daimadog.com/test.php中可以使用授权接口,www.daimadog.com/post/test.php中也可以使用。
- 特别需要注意的是,回调域名不能跨级,比如我填写的回调域名是daimadog.com这个顶级域名,那么在www.daimadog.com域名下的网页都不能使用授权。
- 其它授权细节请看官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
微信授权流程
用户同意授权,获取code
静默授权地址:
scope参数为snsapi_base时是静默授权,不会出现弹窗授权提醒,但只能获取用户openid。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的APPID&redirect_uri=回调url地址&response_type=code&scope=snsapi_base&state=123#wechat_redirect
弹窗授权地址:
scope为snsapi_userinfo时是弹窗提醒授权,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的APPID&redirect_uri=回调url地址&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
注意,地址中的参数顺序不要改变,以免发生意外错误。
效果如下:
取得code票据
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
通过code换取网页授权access_token
请求地址:https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的APPID&secret=你的SECRET&code=授权得到的CODE&grant_type=authorization_code
返回数据:
{ "access_token":"ACCESS_TOKEN",//网页授权接口调用凭证 "expires_in":7200,//access_token接口调用凭证超时时间,单位(秒) "refresh_token":"REFRESH_TOKEN",//用户刷新access_token "openid":"OPENID",//用户唯一标识 "scope":"SCOPE" //用户授权的作用域,使用逗号(,)分隔 }
拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
请求地址:https://api.weixin.qq.com/sns/userinfo?access_token=授权凭证ACCESS_TOKEN&openid=用户标识OPENID&lang=zh_CN
参数 | 描述 |
---|---|
openid | 用户的唯一标识 |
nickname | 用户昵称 |
sex | 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 |
province | 用户个人资料填写的省份 |
city | 普通用户个人资料填写的城市 |
country | 国家,如中国为CN |
headimgurl | 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 |
privilege | 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) |
unionid | 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。 |
PHP微信网页授权源码
<?php $appid='你的公众号appid'; $secret='公众号secret'; if (!isset($_GET['code'])){ echo '授权失败!'; }else{ $code = $_GET['code']; //获取token $url1='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code'; $result= getJson($url1); $access_token=$result['access_token']; $openid=$result['openid']; //获取用户信息 $url2='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN'; $userinfo= getJson($url2); echo '<html><meta charset="utf-8"><head><title>授权测试</title><head><body>'; echo '昵称:'.$userinfo['nickname'].'</br>'; if($userinfo['sex']=='1'){ echo '性别:男</br>'; }else if($userinfo['sex']=='0'){ echo '性别:女</br>'; }else{ echo '性别:未知</br>'; } echo '头像:<img src="'.$userinfo['headimgurl'].'"/></br>'; echo '国家:'.$userinfo['country'].'</br>'; echo '省份:'.$userinfo['province'].'</br>'; echo '城市:'.$userinfo['city'].'</br>'; echo '</body></html>'; } //get请求方法 function getJson($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); return json_decode($output, true); } ?>
到此授权结束,在你的网页上可以使用微信用户的信息参与到业务逻辑中去了,或许你还需要生成带参数的推广二维码下次再讲。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/242425.html