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

时间:2024-02-21 14:23:13

自己查看微信网页授权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,下一步,拉取用户的信息。

 

以上为微信网页授权方法,欢迎讨论。