• 微信公众平台网页获取用户OpenID方法


    下面我们一起来看看关于微信公众平台网页获取用户OpenID方法,有需要了解的朋友可以一起来看看吧.
    用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,但是view不能获取用户的openid,需要使用微信“网页授权获取用户基本信息”高级接口结合使用,获得用户的登入个人信息。
    具体方法
    1、配置网页授权回调域名,如 www.xxx.com

    2、模拟公众号的第三方网页,http://www.xxx.com/getcodeurl.php
     
    <?php  
          
        if(isset($_SESSION['user'])){  
            print_r($_SESSION['user']);
        exit;
        }
        $APPID='公众号在微信的appid';
        $REDIRECT_URI='http://www.xxx.com/callback.php';
    
        $state = 'init';//自定义参数 
    
        $scope='snsapi_base';
        //$scope='snsapi_userinfo';//需要授权
        $url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$APPID.'&redirect_uri='.urlencode($REDIRECT_URI).'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
        
        header("Location:".$url);
    ?>
    

      

    3、第三方网页的回跳url中,首先从请求中取得code,然后根据code进一步换取openid和access_token,然后就可以根据openid和access_token调用微信的相关接口查询用户信息了。

        <?php
        //http://www.xxx.com/callback.php
          
        $appid = "公众号在微信的appid";  
        $secret = "公众号在微信的app secret";  
        $code = $_GET["code"];  
        $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
    
        $res = httpRequest($get_token_url); 
    
        $json_obj = json_decode($res,true);  
          
        //根据openid和access_token查询用户信息  
        $access_token = $json_obj['access_token'];  
        $openid = $json_obj['openid'];  
        $get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';  
          
    
        $res = httpRequest($get_user_info_url);     
        //解析json  
        $user_obj = json_decode($res,true);  
        $_SESSION['user'] = $user_obj;  
        print_r($user_obj);  
          
        function httpRequest($url, $data=null){
    
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false);  //1:回复内容 0:输出内容
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,false); 
     
        if (!empty($data)) {
          curl_setopt($curl, CURLOPT_POST, 1); //模拟post方式
          curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
     
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //执行事务
        $output = curl_exec($curl);
        //关闭
        curl_close($curl);
        //输出内容
        return $output;
      }
    ?>  
    

      

  • 相关阅读:
    自学MVC(十二):MVC视频项目小结
    Silverlight MMORPG WebGame游戏设计(一)一个游戏爱好者的webGame之路
    自学MVC(十四):如何在view里用表格展示json数组
    自学MVC(十):自己写的通用的JS分页控件2009年05月27日
    自学MVC(八):在jquery里让DIV随鼠标移动2009年05月15日
    自学MVC(十一):用js把siverlight播放器加到页面里2009年05月30日
    自学MVC(十三):MVC视频项目的小Tipps
    Silverlight MMORPG WebGame游戏设计(二)通讯协议之惑
    安卓客户端连接服务器调用数据库方法
    第一次ADO.Net连接SQLserver测试时出现的问题传智播客的ADO例子
  • 原文地址:https://www.cnblogs.com/qhorse/p/4627639.html
Copyright © 2020-2023  润新知