• 微信开发笔记:获取用户openid,以及用户头像昵称等信息


    微信开发的时候有一个很便利的途径来进行一个用户的一步注册登录,就是使用用户的微信信息来直接进行登陆,可以省去很多不必要的麻烦。那具体这些信息是如何来获取的呢?

    首先呢,我们需要对微信进行一个授权,让微信页面有权限来读取我们的用户信息:

    $redirect_uri = urlencode($url); //设置授权页面,此处填写回调的授权页面地址
    $scope = 'snsapi_userinfo'; 
    $appid = APPID;
    
    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=1#wechat_redirect";
    
    header('location:'.$url);    

    scope表示一个对用户的一个授权方式,这里我们用snsapi_userinfo也就是弹出式的授权,可以在用户没有关注公主号的情况下一样进行用户信息的获取。

    appid就是我们公众号的appid。

    回调的地址是在跳转完以后,微信平台会把用户端的页面跳转到这个回调的地址上,并且将一个code以get的形式发送过来,具体的处理方式是这样的:

    function https_request($url){
        $curl = curl_init();  //初始化一个cURL会话
            
        //设置请求选项, 包括具体的url
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);  //禁用后cURL将终止从服务端进行验证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl,CURLOPT_HEADER,0); //
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); //
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);        
        $response = curl_exec($curl);  
        curl_close($curl);
            
        $jsoninfo = json_decode($response,true); 
        return $jsoninfo;
    }    
    
    $code = $_GET["code"];
    $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $token_info = https_request($token_url);
    
    //根据openid和access_token查询用户信息 
    $access_token = $token_info['access_token']; 
    $openid = $token_info['openid'];
    
    $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; 
    $user_info = https_request($userinfo_url);
    

    我们从微信平台获得了code以后,就可以去交换access_token以及open_id了,有了access_token和open_id就可以最终获得我们需要的用户信息了,最后提醒下读者,不要忘记再页面的最后跳转回之前用户访问的页面哦,否则用户信息是获取到了,而用户界面就只有一个大白屏了。

  • 相关阅读:
    0514JS基础:操作document对象、事件、this
    Java 多态
    Java 抽象类和接口
    Vue中v-for属性
    Vue基础语法
    Vue 自定义按键修饰符,自定义指令,自定义过滤器
    ES6 剩余参数
    ES6 箭头函数
    ES6 解构赋值
    ES6 变量声明 var let const的区别
  • 原文地址:https://www.cnblogs.com/starkiller/p/5728929.html
Copyright © 2020-2023  润新知