让代码更简单

微信公众号开发网页授权获取用户信息实例代码

重要:本文最后更新于2019-05-29 08:40:34,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

最近公司要搞微信公众号,我也借机玩儿一波企业公众号,所有权限开通的感觉就是不一样,这才是VIP的感觉!近期要搞个活动,结合网页做个排行榜,所以需要用到网页授权。网页授权的最终目的是为了让用户无感登登录,免去复杂的登录流程,大家别理解错了。正好微信除了提供网页授权登录外,还提供了非常丰富的接口,以支持我们自己的业务逻辑,不用白不用。下面一起来看看微信公众号开发网页授权获取用户信息需要怎么做,写什么代码。

先看效果,通过网页直接获取微信登录用户信息。

微信公众号开发网页授权获取用户信息实例代码

微信公众号开发网页授权获取用户信息实例代码

开发前须知

  1. 要使用网页授权接口功能,必须要认证了的公众号才行,也就是说,订阅号没戏。
  2. 回调域名。公众平台官网中的“开发 – 接口权限 – 网页服务 – 网页帐号 – 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。回调域名不包含http或https。
  3. 回调域名填写后所有回调域名下的网页都可以使用授权,如www.daimadog.org是回调域名,那么在www.daimadog.org/test.php中可以使用授权接口,www.daimadog.org/post/test.php中也可以使用。
  4. 特别需要注意的是,回调域名不能跨级,比如我填写的回调域名是daimadog.org这个顶级域名,那么在www.daimadog.org域名下的网页都不能使用授权。
  5. 其它授权细节请看官方文档: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);
}
?>

到此授权结束,在你的网页上可以使用微信用户的信息参与到业务逻辑中去了,或许你还需要生成带参数的推广二维码下次再讲。

感觉很棒!可以赞赏支持我哟~

1 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐