微信公众号授权登陆

来源:赵克立博客 分类: 其它 标签:微信开发发布时间:2016-08-16 16:01:32最后更新:2017-01-13 22:56:55浏览:1932
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-01-13 22:56:55
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

官方文档地址

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN

首先确保已经取得啦微信的 APPID  和 APPSECRET   

使用的步骤如下

1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)


首先取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo)

/**
 * 微信公众号授权登陆
 * @var string
 */
$appid        = "xxxxxxxxxxxxxxxxxx";
$appkey       = "xxxxxxxxxxxxxxxxxxxxxx";
$redirect_uri = urlencode("http://www.xxxxxxxx.com/oauth2.php?". $_SERVER['QUERY_STRING']);
if (isset($_GET['code'])) {
	//如果有code参数
	$code = $_GET['code'];
        echo $code;
} else {
	//没有code的情况,//通过这个url取跳转到授权页面取code值
	$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
	header("location:{$url}"); //跳转
}


打开上面文件后会出现授权页面

QQ截图20160816160522.png

同意授权后就会输出code的值 然后就可以使用code去取access_token啦

//如果有code参数
$code = $_GET['code'];
//使用code换取access_token
$url  = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appkey}&code={$code}&grant_type=authorization_code";
$json = file_get_contents($url);
echo $json;
$json = json_decode($json, true);
//数据格式见网页最下面
if (isset($json['errorcode'])) {
	//错误
	die($json['errmsg']);
}

然后就可以使用上一步取得的access_token和openid去取用户的信息

//使用access_token获取用户信息
$access_token = $json['access_token'];
$openid       = $json['openid'];
$userurl      = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}";
$uinfo        = file_get_contents($userurl);
echo $uinfo;
$uinfo = json_decode($uinfo, true);
if (isset($uinfo['errorcode'])) {
	//错误
	die($uinfo['errmsg']);
}

下面提供一个完整的代码 oauth2.php

/**
 * 微信公众号授权登陆
 * @var string
 */
$appid        = "xxxxxxxxxxxxxxxxxx";
$appkey       = "xxxxxxxxxxxxxxxxxxx";
//下面回调地址需要在微信公众号后台设置权限域名和目录,注意要具体到目录
$redirect_uri = urlencode("http://www.xxxxxx.com/oauth2.php?". $_SERVER['QUERY_STRING']);
if (isset($_GET['code'])) {
	//如果有code参数
	$code = $_GET['code'];
	// 使用code换取access_token
	$url  = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appkey}&code={$code}&grant_type=authorization_code";
	$json = file_get_contents($url);
	echo $json;
	$json = json_decode($json, true);
	if (isset($json['errorcode'])) {
		//错误
		die($json['errmsg']);
	}
	//使用access_token获取用户信息
	$access_token = $json['access_token'];
	$openid       = $json['openid'];
	$userurl      = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}";
	$uinfo        = file_get_contents($userurl);
	echo $uinfo;
	$uinfo = json_decode($uinfo, true);
	if (isset($uinfo['errorcode'])) {
		//错误
		die($uinfo['errmsg']);
	}
        //数据格式见网页最下面
	//标识id
	$unionid = $uinfo['unionid'];
} else {
	//没有code的情况,//通过这个url取跳转到授权页面取code值
	$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
	header("location:{$url}"); //跳转
}

接口返因的数据格式

//错误数据
{"errcode":40029,"errmsg":"invalid code"}
//access_token返回的数据
{
    "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "expires_in": 7200,
    "refresh_token": "6ZnsZaCPUhbA1Lu-086pdWFVNIjSfCFVACZcubm1NrN99NnllVkTho4xf2kD2ppoUS9c7XYutYSPa3qSwP7Toj13diGRzdTyxwrefp2-d0g",
    "openid": "xxxxxxxxxxxxxxxxxxxxxx",
    "scope": "snsapi_userinfo",
    "unionid": "xxxxxxxxxxxxxxxxxxxxxx"
}
//返回的用户信息数据
{
    "openid": "xxxxxxxxxxxxxxxxx",
    "nickname": "_SMILE_",
    "sex": 1,
    "language": "zh_CN",
    "city": "Zhengzhou",
    "province": "Henan",
    "country": "CN",
    "headimgurl": "http://wx.qlogo.cn/mmopen/qUNf9NP4MdVibbq42RzciaZiaqAguImlw3DmzfvX1aawaSmmwV6hJ4NAcRhgt9mKhNmzGXN04PxB2jYG1Vhwtu1fhNuUYlP2qPW/0",
    "privilege": [],
    "unionid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python