前言
我们在开发的过程,可能会遇到一些需求,比如要获取微信公众号用户的信息,这个时候,我们就要通过微信公众号网页授权来获取
准备步骤
1.在此之前,为了我们方便去测试,我们先去微信申请接口测试号,https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 这个就是测试号申请地址,然后我们扫码登陆一下

然后往下拉,找到网页授权,点击一下修改,然后填一下你要回调的域名,我下面授权的域名gzh.zhihao1.cn作为测试

2.在做开发之前,首页我们阅读一下微信公众号官方提供的文档,有关的微信公众号网页授权也在刚才修改网页授权回调域名的地方.

3.通过文档我们不难看出,首先我们要获取code,再通过code去获取到access_token和openid,拿到用户的openid后,再去获取用户信息的就可以了
第一步:用户同意授权,获取code和openid
直接上代码了index.php
<?php
$appid='wxd69bfad9e18aa02b';
$redirect_uri = urlencode ( 'http://gzh.zhihao1.cn/getUserInfo.php' );//将字符串以 URL 编码。
$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);//header() 函数向客户端发送原始的 HTTP 报头。
?>
提交的参数,和获取到的参数可以自行看一下微信公众号的文档
当用户点击授权,我们会得到返回code到getUserInfo.php这个文件里
第二步:通过code换取网页授权access_token
然后我们创建getuserinfo.php
文件,这个文件里授权后重定向的回调链接地址,我们要接收一下get请求,传过来的code,有code之后接下就好办,获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求参数和返回值话可以自行看一下微信公众号index.php
<?php
header("content-type:text/html;charset=utf-8");
$code = $_GET["code"];//预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
if (isset($_GET['code'])){//判断code是否存在
$userinfo = getUserInfo($code);
$appid = "wxd69bfad9e18aa02b";
$appsecret = "186905023306451c202b992df6e5d43a";
//Get access_token
$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$res=file_get_contents($access_token_url);
$access_token_array = json_decode($access_token_json,true);//对 JSON 格式的字符串进行解码,转换为 PHP 变量,自带函数
//获取access_token
$access_token = $access_token_array['access_token'];//获取access_token对应的值
//获取openid
$openid = $access_token_array['openid'];//获取openid对应的值
}
else{
echo "NO CODE";
}
以上就是完成了我们整个网页授权的过程。拿到openid后,接下来我们就置换用户信息了
第三步用openid和access_token获取用户个人信息
接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_C
为了方便我们对getuserinfo.php重新写一个方法给他调用
完整的index.php
<?php
header("content-type:text/html;charset=utf-8");
$code = $_GET["code"];//预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
if (isset($_GET['code'])){//判断code是否存在
$userinfo = getUserInfo($code);
// $xinxi = $userinfo['ni'];//获取nickname对应的值,即用户名
print '<h2 style="text-align:center">用户名:'.$userinfo['nickname'].'</h2>';//打印输
print '<img src="'.$userinfo['headimgurl'].'" alt="">';//打印输
print '<h2 style="text-align:center">城市:'.$userinfo['city'].'</h2>';//打印输
}else{
echo "NO CODE";
}
function getUserInfo($code)
{
$appid = "wxd69bfad9e18aa02b";
$appsecret = "186905023306451c202b992df6e5d43a";
//Get access_token
$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$access_token_json = https_request($access_token_url);//自定义函数
$access_token_array = json_decode($access_token_json,true);//对 JSON 格式的字符串进行解码,转换为 PHP 变量,自带函数
//获取access_token
$access_token = $access_token_array['access_token'];//获取access_token对应的值
//获取openid
$openid = $access_token_array['openid'];//获取openid对应的值
// var_dump($openid);
// die;
//Get user info
$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid";
$userinfo_json = https_request($userinfo_url);
$userinfo_array = json_decode($userinfo_json,true);
return $userinfo_array;
}
function https_request($url)//自定义函数,访问url返回结果
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
if (curl_errno($curl)){
return 'ERROR'.curl_error($curl);
}
curl_close($curl);
return $data;
}
?>
所有的请求参数和返回值请看微信公众号文档。毕竟文档才是开发员的必须的啊
以上的过程我们就完成了微信的网页授权和获取个人信息,其实我们还可以封装成更好的方法
结尾&总结
多看文档,多学习,其实整个步骤实现的过程挺简单的。