zoukankan      html  css  js  c++  java
  • 微信公众号 微信网页授权方法

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

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




  • 相关阅读:
    学编程的那些年
    iOS React Native 学习总结
    java.util.ConcurrentModificationException异常原因及解决方法
    把二元查找树转变成排序的双向链表
    五猴分桃通解公式-敬献给诺贝尔奖获得者李政道博士
    JSP中文乱码问题的由来以及解决方法
    MyEclipse 2014 有用的几个快捷键
    jsp三层架构
    数据库连接的三层架构
    helloworld
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/6164149.html
Copyright © 2011-2022 走看看