zoukankan      html  css  js  c++  java
  • 微信公众平台网页获取用户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;
      }
    ?>  
    

      

  • 相关阅读:
    洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
    树莓派在身份证件核验领域应用
    Linux suse x86_64 环境上部署Hadoop启动失败原因分析
    用Spring Data JPA 基于内存存储pojo的简单案例
    短信发送AZDG加密算法
    【玩转Ubuntu】09. Ubuntu上安装apktool
    java遍历Map时remove删除元素
    wust 1061 链表的合并
    干货:yii日志功能详解
    xcode解决问题dyld: Library not loaded
  • 原文地址:https://www.cnblogs.com/qhorse/p/4627639.html
Copyright © 2011-2022 走看看