自己查看微信网页授权wiki: https://mp.weixin.qq.com/wiki
第一步:用户同意授权,获取code
操作方法:
新建一个php文件,oauth2.php
<?php
/*网页授板获取用户openid,首先获取code*/
echo $code = $_GET['code']; /*测试code是否能输出而使用echo命令*/
?>
复制wiki中的示例代码,并将关键字替换:
/*原示例代码*/ 第一步:用户同意授权,获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect /*替换之后的代码*/ 替换appId、redirect_uri(接口配置信息中的URL,要把php替换成 oauth2.php)、scope(等于snsapi_base) https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx**********f&redirect_uri=http://1223.applinzi.com/wx_jiaj.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
通过微信的消息管理,回复如下消息, 我们在手机上打开,就会发现手机上显示一串字母与数字的组合,这个组合就是 code:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx**********f&redirect_uri=http://1223.applinzi.com/wx_jiaj.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
第二步:通过code换取网页授权access_token
通过第二步的请求方法中的示例代码:
请求方法 获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
//同样替换掉appid / secret / code
//使用gettoken()从url中获取token,再使用json_decode()处理返回的数据
/*通过刚刚拿到的code来拿到网页授权的access_token,替换appid与secret与code='.$code.'*/
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxb0e526a903a99dbf&secret=7cdf863bc791b55714fdfe82f891a50b&code=".$code."&grant_type=authorization_code";
/*获取token的函数*/
/*gettoken($url);*/
/*通过json处理一下返回的数据,把下面的数据输出测试一下,给个变量,最后输出时把这个$openArr的数组赋值给一个属性openid*/
$openArr=json_decode(gettoken($url),true);
echo $openArr['openid'];
重上新传至服务器,并重新在手机上点击刚才发的链接地址,这会拿到的一串数字与字母的组合,就是openid。
以snsapi_base为scope发起的网页授权,只能获取进入页面的用户的openid;
以snsapi_userinfo为scope发起的网页授权,可以获取用户的基本信息;
上面的代码只是获取openid的,要获取用记的基本信息的话,其它地方都是一样的,唯一的区别是发给手机的那个url,把scope的snsapi_base替换为snsapi_userinfo就能拿到用户的基本信息
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx*************&redirect_uri=http://1223.applinzi.com/oauth2.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
在手机上打开上面的地址,会在微信上弹出一个确认登录的网页:
点击确认登录之后会弹出下面的页面
确认登录就可以拿到用户的信息,如果想在手机上看到底可以拿到用户的什么信息时,把代码改一下,由原来的 echo $openArr['openid'] 输出到openid 改为 输出一个数组 print_r($openArr) ,再上传代码,刷新网页看一下效果,先把完整的拿到用户信息的代码放上来:
<?php
/*网页授板获取用户openid,首先获取code*/
echo $code = $_GET['code'];
/*通过刚刚拿到的code来拿到网页授权的access_token,替换appid与secret与code='.$code.'*/
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx****************&code=".$code."&grant_type=authorization_code";
/*获取token的函数*/
/*gettoken($url);*/
/*通过json处理一下返回的数据,把下面的数据输出测试一下,给个变量,最后输出时把这个$openArr的数组赋值给一个属性openid*/
$openArr=json_decode(gettoken($url),true);
// echo $openArr['openid'];
/*可以使用print_r输出下这个数组*/
print_r($openArr);
function gettoken($url){
/*如果用curl请求网页,多方网页使用了gzip压缩,那么获取的内容将有可能为乱码的解决办法*/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22");
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); //加入gzip解析
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
?>
传代码至服务器,再次打开手机上的链接地址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx*************&redirect_uri=http://1223.applinzi.com/oauth2.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
就会看到一个带openid的数组,包含用户的信息:
!!!!!因为code只能和一次且不能刷新,如果报”40029”错误的话,说明当前code无效,你需要等几分钟,再次点击链接,才能打开带openid的数组。
第四步:拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。从上面的图片中可以看到当前的网页的作用域为snsapi_userinfo,下一步,拉取用户的信息。
以上为微信网页授权方法,欢迎讨论。