您的位置:首页 > 移动开发 > 微信开发

微信公众号 微信网页授权方法

2016-12-12 13:38 274 查看
自己查看微信网页授权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,下一步,拉取用户的信息。以上为微信网页授权方法,欢迎讨论。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐