• 微信开发笔记:获取用户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就可以最终获得我们需要的用户信息了,最后提醒下读者,不要忘记再页面的最后跳转回之前用户访问的页面哦,否则用户信息是获取到了,而用户界面就只有一个大白屏了。

  • 相关阅读:
    [Java] JDBC 06 批Transaction处理 -- conn.setAutoCommit(false); // 不让其自动提交 (很重要的知识点)
    [Java] JDBC 05 TestBatch.java 批处理 Batch
    [Java] JDBC 04 TestProc.java (对存储过程进行调用 CallableStatement)
    [Java] JDBC 03 TestPrepStmt.java
    美化复选框
    美化单选框
    canvas
    html5新增标签
    旋转、水平翻转、垂直翻转
    dede让channelartlist标签支持currentstyle属性 完美解决
  • 原文地址:https://www.cnblogs.com/starkiller/p/5728929.html
Copyright © 2020-2023  润新知