使用最新的facebook SDK php

时间:2016-04-19 15:10:51

标签: php facebook-php-sdk

我无法使用最新的facebook SDK PHP 5.0获取用户的Facebook好友列表。我已经阅读了Facebook Developers网站上的文档,但并不是很了解它。我在网站上尝试过代码:

/* PHP SDK v5.0.0 */
/* make the API call */

$request = new FacebookRequest(
  $session,
  'GET',
  '/me/friends'
);
$response = $request->execute();
$graphObject = $response->getGraphObject();
/* handle the result */

当我尝试这个时,我只会得到"致命错误:Class' FacebookRequest'在/Applications/XAMPP/..."中找不到。在页面顶部的Developer site上显示"本文档引用了过时的Graph API版本。请使用最新版本。"但链接不会导致任何地方?这是为什么我会得到一个致命的错误?我真的不确定它可能是什么,所以我想问这里。 这是我当前代码的副本:

的init.php

<?php 
session_start(); 
require_once 'vendor/autoload.php'; 

$fb = new Facebook\Facebook([
  'app_id' => '******',
  'app_secret' => '******',
  'default_graph_version' => 'v2.5',
]);

<?php 

require_once 'app/init.php';

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes', 'user_friends', 'user_birthday', 'user_location', 'user_education_history', 'user_hometown']; // optional
$loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB_login/login-callback.php', $permissions);

if(!isset($_SESSION['fb_access_token'])){
    echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
} else {
    echo '<a href="signout.php">Sign Out!</a> <br />';


    $accessToken = $_SESSION['fb_access_token'];
    try {
  // Returns a `Facebook\FacebookResponse` object
      $response = $fb->get('/me?fields=id,name,email,likes,first_name,last_name,birthday,hometown,gender,picture', $accessToken);
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
      echo 'Graph returned an error: ' . $e->getMessage();
      exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
      echo 'Facebook SDK returned an error: ' . $e->getMessage();
      exit;
    }

    $user = $response->getGraphUser();

    echo 'Email: ' . $user->getEmail() . '<br />';
    echo 'First Name: ' . $user->getFirstName() . '<br />';
    echo 'Last Name: ' . $user->getLastName() . '<br />';
    echo 'Name: ' . $user->getName() . '<br />';
    echo 'Birth: ' . $user->getBirthday()->format('Y-m-d') . '<br />';
    echo 'HomeTown: ' . $user->getHometown()['name'] . '<br />';
    echo 'Gender: ' . $user->getGender() . '<br />';
    echo '<img src="' . $user->getPicture()['url'] . '">';

我想要做的就是回复朋友列表或者只是一个计数,但不知道我该怎么做。我真的被困在这上面并且无法理解文档。有谁知道实现这个的正确/最佳方法?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题只是因为其他人遇到了同样的问题。首先,您必须在FB开发者页面上进行应用程序审核。接下来,你必须添加可标记的朋友到你的应用程序,使用此代码,嘿presto !!

    if (isset($accessToken)) {
    if (isset($_SESSION['facebook_access_token'])) {
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    } else {
        $_SESSION['facebook_access_token'] = (string) $accessToken;
        // OAuth 2.0 client handler
        $oAuth2Client = $fb->getOAuth2Client();
        // Exchanges a short-lived access token for a long-lived one
        $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
        $_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    }
    // validating the access token
    try {
        $request = $fb->get('/me');
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        if ($e->getCode() == 190) {
            unset($_SESSION['facebook_access_token']);
            $helper = $fb->getRedirectLoginHelper();
            $loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB/index.php', $permissions);
            echo "<script>window.top.location.href='".$loginUrl."'</script>";
        }
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }
    // get list of friends' names
    try {
        $requestFriends = $fb->get('/me/taggable_friends?fields=name&limit=1000');
        $friends = $requestFriends->getGraphEdge();
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }

    if ($fb->next($friends)) {
        $allFriends = array();
        $friendsArray = $friends->asArray();
        $allFriends = array_merge($friendsArray, $allFriends);
        while ($friends = $fb->next($friends)) {
            $friendsArray = $friends->asArray();
            $allFriends = array_merge($friendsArray, $allFriends);
        }
        foreach ($allFriends as $key) {
            echo $key['name'] . "<br>"; 
        }

        //echo count($allfriends);
    } else {
        $allFriends = $friends->asArray();
        $totalFriends = count($allFriends);
        $counter = 0; 
        foreach ($allFriends as $key) {
            echo $key['name'] . "<br>";
            $counter++;
        }
        echo $counter;
    }

} else {
    $helper = $fb->getRedirectLoginHelper();
    $loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB/index.php', $permissions);
}