H5中获取微信头像、昵称

H5中获取微信用户资料的方式有两种,第一种是默认登录方式,即不需要弹出授权框,只会有一个“正在登录”的弹窗,这种方式获取到的数据仅限于该用户已经关注了对应公众号之后,如果是未关注公众号的用户只能获取到openid。那么针对这种情况,就需要使用授权登录来获取用户的资料,下面详细介绍的是此种方式。

 

1. 首先第一步在用户同意的情况下获取到code,其中scope字段代表授权方式,snsapi_base 默认授权即上面说的第一种默认登录方式,snsapi_userinfo  授权框 授权即在用户点击同意后获取昵称、头像等信息

var fromurl=location.href;
                var url='https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号appid3&redirect_uri='
                        + encodeURIComponent(fromurl)
                        +'&response_type=code&scope=snsapi_userinfo&state=STATE%23wechat_redirect&connect_redirect=1#wechat_redirect';
               //snsapi_userinfo  授权框    snsapi_base 默认授权
                location.href=url;

2. 第二步使用第一步获取的code来获取openid和access_token,这里注意一下,授权的access_token和默认的登录方式中需要获取的access_token为两个token

$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的公众号appid&secret=你的公众号appsecret&code=第一步获取的code&grant_type=authorization_code";

这里返回的结果有我们需要的token和openid

{ "access_token":"",     
"expires_in":7200,    
"refresh_token":"",     
"openid":"",     
"scope":"" } 

3.第三步使用第二步获取到的openid和access_token来请求用户信息

$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".刚请请求的token."&openid=".$刚请求的openid ."&lang=zh_CN"; //把accesstoken和openid放到接口中

返回的结果就是登录授权用户的基本微信信息了,如下

{"openid":" 
"nickname": 
"sex":
"province":
"city":
"country":
"headimgurl":
"privilege":
"PRIVILEGE1"
"PRIVILEGE2"
"unionid"
}

 

这个过程有一些地方需要注意,第一需要准备一个认证过服务号,第二需要一个认证过超过24小时的域名,第三在服务号的功能设置中将域名加入到“JS接口安全域名”“网页授权域名中”

另外token是有时间限制的,可以做一些过期的判断和处理,并且获取基本信息的过程中支持UnionID机制

最后贴上简单的PHP实现方式抛砖引玉

@$code = $_GET['code'];//前端传来的code值

$appid = "";
$appsecret = "";

//获取openid
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$result = https_request($url);

$jsoninfo = json_decode($result, true);
@$openid = $jsoninfo["openid"];//从返回json结果中读出openid
@$access_token = $jsoninfo["access_token"];

$url_getinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid ."&lang=zh_CN"; //把accesstoken和openid放到接口中
$result = https_request($url_getinfo);			//请求info接口
$resultinfo = json_decode($result, true);
echo json_encode($resultinfo);		


function https_request($url,$data = null){
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
	if (!empty($data)){
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	}
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$output = curl_exec($curl);
	curl_close($curl);
}	

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值