在PHP中使用facebook sdk 5从我的个人资料中获取最新的墙贴


Getting the latest wall post from my profile using facebook sdk 5 in PHP

这是我的PHP代码。登录过程后,我想显示最新的墙帖子。

$fb = new Facebook'Facebook([
  'app_id' => 'xxxxxxxx',
  'app_secret' => 'xxxxxxxxxxx',
  'default_graph_version' => 'v2.4',
  'default_access_token' => isset($_SESSION['facebook_access_token']) ? $_SESSION['facebook_access_token'] : 'xxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxxxx'
]);

try {
    // $response = $fb->get('/me?fields=id,name,email');
    // $user = $response->getGraphUser();
    // echo 'Name: ' . $user['name'];
    // echo 'Email: ' . $user['email'];
    // echo 'ID: ' . $user['id'];
    $data = ( new Facebook'FacebookRequest( $_SESSION['facebook_access_token'], 'GET', '/me/posts') )->execute()->getGraphObject()->getPropertyAsArray("data");
    foreach ($data as $post){
        $postId = $post->getProperty('id');
        $postMessage = $post->getProperty('message');
        print "$postId - $postMessage <br />";
    }
    exit; //redirect, or do whatever you want
} catch(Facebook'Exceptions'FacebookResponseException $e) {
  //echo 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook'Exceptions'FacebookSDKException $e) {
  //echo 'Facebook SDK returned an error: ' . $e->getMessage();
}
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes', 'user_about_me'];
$loginUrl = $helper->getLoginUrl('http://attila-naghi.com/facebook/login.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';

但是我得到了这个错误信息:

Catchable fatal error: Argument 1 passed to 
Facebook'FacebookRequest::__construct() must be an instance of 
Facebook'FacebookApp, string given, called in....
第97行

。这是我的类的第97行内容:

 public function __construct(FacebookApp $app = null, $accessToken = null, $method = null, $endpoint = null, array $params = [], $eTag = null, $graphVersion = null)
    {
        $this->setApp($app);
        $this->setAccessToken($accessToken);
        $this->setMethod($method);
        $this->setEndpoint($endpoint);
        $this->setParams($params);
        $this->setETag($eTag);
        $this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
    }

我猜我没有以正确的方式将我的令牌从会话传递给构造函数。但我不明白为什么?谁能给我解释一下它是怎么工作的?这不是facebook sdk中最好的文档。

第一个参数需要是FacebookApp变量,而不是令牌。因此将这一行改为:

$data = ( new Facebook'FacebookRequest( $fb, $_SESSION['facebook_access_token'], 'GET', '/me/posts') )->execute()->getGraphObject()->getPropertyAsArray("data");