Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Facebook SDK 4-获取用户数据_Php_Facebook_Facebook Graph Api - Fatal编程技术网

Php Facebook SDK 4-获取用户数据

Php Facebook SDK 4-获取用户数据,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我遵循了一个在线教程,它几乎可以工作。代码看起来像这样。尝试使用require\u一次\uuuu DIR\uuuu。“/Facebook/autoload.php”但它返回致命错误:找不到类“Facebook\FacebookSession” 编辑** 像建议的那样添加autoload.php session_start(); require __DIR__ . "/facebook-php-sdk-v4-4.0-dev/autoload.php"; use Facebook\

我遵循了一个在线教程,它几乎可以工作。代码看起来像这样。尝试使用
require\u一次\uuuu DIR\uuuu。“/Facebook/autoload.php”但它返回
致命错误:找不到类“Facebook\FacebookSession”

编辑** 像建议的那样添加autoload.php

   session_start();

    require __DIR__ . "/facebook-php-sdk-v4-4.0-dev/autoload.php";

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;

use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
use Facebook\GraphLocation;
use Facebook\FacebookOtherException;

  $appId = 'xxx';
  $appSecret = 'xxx';
  $redirect_url = 'http://example.com/com/login';

  //initialize Facebook
  FacebookSession::setDefaultApplication($appId, $appSecret);
  $helper = new FAcebookRedirectLoginHelper($redirect_url);

  try {
      $session = $helper->getSessionFromRedirect();
  } catch(FacebookRequestException $ex) {
      die(" Error : " . $ex->getMessage());
  } catch(\Exception $ex) {
      die(" Error : " . $ex->getMessage());
  }

   var_dump($_SESSION['fb_token']); //Notice: Undefined index: fb_token

  if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
    $session = new FacebookSession($_SESSION['fb_token']);
  }

  if($session) {

      //store token in php session
      $_SESSION['fb_token'] = $session->getToken();

      try {

        $user = (new FacebookRequest(
          $session, 'GET', '/me'
        ))->execute()->getGraphObject(GraphUser::className())->asArray();

      } catch(FacebookRequestException $e) {

      }

      $name = $user['name'];
      $firstName = $user['first_name'];
      $lastName = $user['last_name'];
      $fbId = $user['id'];
      $fbEmail = $user['email'];

   }else{
      echo "No session!";
   }
这是登录url,位于每个页面的标题中。我将不包括全部代码,但以下内容仅由未登录的访问者看到:

<?php
     echo '<li class=" fb right"><a href="'.$helper->getLoginUrl().'" ><img style="height: 29px;" src="img/login_fb.png" alt="Facebook Log in" /></a> </li>';
?>
  • 有时fb_令牌未设置。当有人单击登录url时,他们将被重定向到登录页面,并显示
    无令牌
    消息。如果在登录页面上再次单击登录url,则一切正常
编辑**

  • 出于某种原因,现在它根本检测不到fb_令牌。即使我登录了Facebook。这很奇怪,因为直到现在我才有这个问题
Facebook PHP Sdk在使用access_令牌时存在一些问题,特别是在 你有漂亮的(seo友好的)URL

使用Facebook的JSSDK让用户访问令牌是更好的选择。
一旦您拥有了用户的
访问权\u令牌
,就可以使用
AJAX

因此,您的
索引
文件如下所示:

<html xmlns:fb="http://ogp.me/ns/fb#">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
  <!----facebook js sdk---->
  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId: 'PASTE YOUR APP ID',
        cookie: true,
        xfbml: true,
        version: 'v2.1'
      });
    };

    function Login() {
      FB.login(function(response) {
        if (response.authResponse) {
          /*AJAX call to send access_token to php file.*/
          jQuery.ajax({
            url: 'facebook.php',
            /*facebook.php is the file where we'll make API request to get user data.*/
            type: 'POST',
            data: {
              'access_token': response.authResponse.accessToken /*this is the access_token provided by Facebook.We are passing it to our facebook.php file. */
            },
            success: function(result) {
              var res = result;
              if (res) {
                document.getElementById("fb_status").innerHTML = res;
              }
            }
          });
        }
      }, {
        scope: 'email,user_friends,user_location,user_events,publish_actions'
      });
    }

    /*function Logout(){
            FB.logout(function(response) {
            location.reload();
            // Person is now logged out
        });
        }*/
    (function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) {
        return;
      }
      js = d.createElement(s);
      js.id = id;
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
  </script>
  <!----------------------->

  <div id="fb_status"></div> <!--Division to print response just to check every thing is working fine.-->
  <a onclick="Login();">Sign In With Facebook</a> <!--Log-In/Sign-In Link-->
</body>

</html>
'; /*现在你有了用户数据,你想用它做什么就做什么。 可能将用户数据存储在数据库中并启动本地会话*/ }捕获(FacebookRequestException$e){ var_dump($e); } ?>


注意:使用Facebook最新的PHP Sdk:

您单独使用所有这些文件而不是仅使用PHP SDK有什么原因吗?没有原因。我只是觉得这是怎么做到的。
<html xmlns:fb="http://ogp.me/ns/fb#">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
  <!----facebook js sdk---->
  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId: 'PASTE YOUR APP ID',
        cookie: true,
        xfbml: true,
        version: 'v2.1'
      });
    };

    function Login() {
      FB.login(function(response) {
        if (response.authResponse) {
          /*AJAX call to send access_token to php file.*/
          jQuery.ajax({
            url: 'facebook.php',
            /*facebook.php is the file where we'll make API request to get user data.*/
            type: 'POST',
            data: {
              'access_token': response.authResponse.accessToken /*this is the access_token provided by Facebook.We are passing it to our facebook.php file. */
            },
            success: function(result) {
              var res = result;
              if (res) {
                document.getElementById("fb_status").innerHTML = res;
              }
            }
          });
        }
      }, {
        scope: 'email,user_friends,user_location,user_events,publish_actions'
      });
    }

    /*function Logout(){
            FB.logout(function(response) {
            location.reload();
            // Person is now logged out
        });
        }*/
    (function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) {
        return;
      }
      js = d.createElement(s);
      js.id = id;
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
  </script>
  <!----------------------->

  <div id="fb_status"></div> <!--Division to print response just to check every thing is working fine.-->
  <a onclick="Login();">Sign In With Facebook</a> <!--Log-In/Sign-In Link-->
</body>

</html>
<?php
require_once('autoload.php' );  

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

$app_id = 'PASTE YOUR APP ID HERE';         
$app_secret = 'PASTE YOUR APP SECRET HERE';

FacebookSession::setDefaultApplication($app_id, $app_secret);
$session = new FacebookSession($_POST['access_token']);   /*$_POST['access_token']  is the access_token we sent to this file in AJAX call. */
/*So now we have your session , we can proceed further by making api request to get user data*/
try{
  $me = (new FacebookRequest(
        $session, 'GET', '/me'
        ))->execute()->getGraphObject(GraphUser::className())->asArray();
/* `$me`  will hold the user-data provided by Facebook.To check the data just dump this variable like this:*/
echo '<pre>';
var_dump($me);
echo '</pre>';

/*Now You have user data Do whatever you want to do with it.
Probably store user data in the DATABASE & START LOCAL SESSION*/
}catch(FacebookRequestException $e){
  var_dump($e);
}

?>