Facebook PHP SDK v4获取当前的accessToken

时间:2015-01-03 06:34:06

标签: php facebook session facebook-access-token facebook-sdk-4.0

使用getSessionFromRedirect()函数获取FacebookSession没有问题,但是我在从中返回令牌时遇到问题。

Facebook\FacebookSession::setDefaultApplication(
    Config::get('api/facebook/app_id'), 
    Config::get('api/facebook/app_secret')
);

$fb = new Facebook\FacebookRedirectLoginHelper(Config::get('api/facebook/url'));

if(Session::exists(Config::get('session/facebook'))) {
    //echo Session::get(Config::get('session/facebook'));
    $session = Session::get(Config::get('session/facebook'));
} else {
    $session = $fb->getSessionFromRedirect();
    var_dump($session);
    //Session::put(Config::get('session/facebook'), $session->getToken());
}

if(isset($session)) {

    //Do Facebook stuff here

} else {
    $params = array(
        'scope' => 'email, user_birthday'
    );
    echo "<a href='".$fb->getLoginUrl($params)."'>Login</a>";
}

正如你所看到的,我正在使用像var_dump这样的FacebookSession对象,但我似乎仍然无法获得令牌。我已经阅读了文档,而FacebookSession对象有一个getToken()函数,但它似乎对我不起作用。

这是我在转储会话后得到的回复

object(Facebook\FacebookSession)#9 (2) { ["accessToken":"Facebook\FacebookSession":private]=> object(Facebook\Entities\AccessToken)#4 (3) { ["accessToken":protected]=> string(220) "*INSERT TOKEN HERE, THIS WAS REPLACED FOR THE QUESTION*" ["machineId":protected]=> NULL ["expiresAt":protected]=> NULL } ["signedRequest":"Facebook\FacebookSession":private]=> NULL }

2 个答案:

答案 0 :(得分:0)

您必须在脚本之上编写session_start才能使其正常工作 所以就像

<?php
session_start();
Facebook\FacebookSession::setDefaultApplication(
    Config::get('api/facebook/app_id'), 
    Config::get('api/facebook/app_secret')
);

答案 1 :(得分:0)

我实际上最终搞清楚了。我已经有一个为我运行session_start()的初始文件,所以它不是。

Facebook\FacebookSession::setDefaultApplication(
    Config::get('api/facebook/app_id'), 
    Config::get('api/facebook/app_secret')
);

$fb = new Facebook\FacebookRedirectLoginHelper(Config::get('api/facebook/url'));

if(Session::exists(Config::get('session/facebook'))) {
    $session = new Facebook\FacebookSession(Session::get(Config::get('session/facebook')));
} else {
    $session = $fb->getSessionFromRedirect();
}

if(isset($session)) {
    if(!Session::exists(Config::get('session/facebook'))) {
        Session::put(Config::get('session/facebook'), $session->getToken());
    }
    //Do Facebook stuff here

} else {
    $params = array(
        'scope' => 'email, user_birthday'
    );
    echo "<a href='".$fb->getLoginUrl($params)."'>Login</a>";
}

由于页面没有刷新,$session变量还不是真正的对象,我只需要在isset($session)调用后放置它