Получить день рождения facebook через PHP 5.0 SDK

Я не могу заставить свой код получить «день рождения» моей тестовой учетной записи или даже моего собственного (никакого успеха!) для эха, хотя из того, что я видел, я запрашиваю его правильно, и у меня есть соответствующие разрешения для «user_birthday». ".

Но facebook отправляет объект для этого поля.

Все остальные поля работают отлично, как вы можете видеть на моей странице.

Соответствующая часть файла запроса

логин.php

$fb = new Facebook\Facebook([ 'app_id' => 'my_actual_app_id', 'app_secret' => 'my_actual_secret_code', 'default_graph_version' => 'v2.3', ]); $helper = $fb->getRedirectLoginHelper(); $permissions = ['email', 'user_birthday']; $loginUrl = $helper->getLoginUrl('my_actual_url', $permissions);

Файл обратного вызова

логин-callback.php

`$fb = new Facebook\Facebook([
                'app_id' => 'my_actual_id',
                'app_secret' => 'my_actual_secret_code',
                'default_graph_version' => 'v2.3',
        ]);
$helper = $fb->getRedirectLoginHelper();
try {
    $accessToken = $helper->getAccessToken();
} 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 (isset($accessToken)) {
    // Logged in!
    // OAuth 2.0 client handler
    echo "<br><br><br> Ok 1 <br>";
    $oAuth2Client = $fb->getOAuth2Client();
    echo "Ok 2 <br>";
    // Exchanges a short-lived access token for a long-lived one
    $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken(strval($accessToken));
    echo "Ok 3 <br>";
    $_SESSION['login'] = $longLivedAccessToken;
    echo "Ok 4 <br>";
    $fb->setDefaultAccessToken($longLivedAccessToken);
    $response = $fb->get('/me?locale=en_US&fields=id,last_name,first_name,email,birthday');
    //$profile = $response->getGraphNode()->asArray();
    echo "Ok 5 <br>";
    // get response
    echo "Ok 6 <br>";
    $node = $response->getGraphNode();
    echo "Ok 7 <br>";
    $fuid = $node->getField('id');              // To Get Facebook ID
    echo "Ok 8 $fuid <br>";
    $fblastname = $node->getField('last_name');
    echo "Ok 9 $fblastname <br>";
    $fbfirstname = $node->getField('first_name');// To Get Facebook first name
    echo "Ok 10 $fbfirstname <br>";
    $femail = $node->getField('email');    // To Get Facebook email ID
    echo "Ok 11 $femail <br>";
    $fbirthday = $node->getField('birthday');
    echo "<br>";
    var_dump($fbirthday);
    echo "OK 12 $fbirthday <br>";
    /* ---- Session Variables -----*/
    $_SESSION['FBID'] = $fuid;
    $_SESSION['LASTNAME'] = $fblastname;
    $_SESSION['FIRSTNAME'] = $fbfirstname;
    $_SESSION['EMAIL'] =  $femail;
    $test = "perfect";
    // = Db::getInstance()->checkuser($fuid,$fblastname,$fbfirstname,$femail);
    echo "<br><br><br> Ok 13 $test : Wait for refresh <br>";
    // Now you can redirect to another page and use the
    // access token from $_SESSION['facebook_access_token']
}
//header ( "refresh:15; url=index.php?action=map");`

Результирующая страница моего кода login-callback.php

`Ok 1 
Ok 2 
Ok 3 
Ok 4 
Ok 5 
Ok 6 
Ok 7 
Ok 8 104975603177961 
Ok 9 Teck 
Ok 10 Pierre 
Ok 11 [email protected] 

object(Facebook\GraphNodes\Birthday)#21 (5) { ["hasDate":"Facebook\GraphNodes\Birthday":private]=> bool(true) ["hasYear":"Facebook\GraphNodes\Birthday":private]=> bool(true) ["date"]=> string(26) "1955-05-17 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(12) "Europe/Paris" }`

Я попытался преобразовать его в массив и запросить $array_var['birthday'], но это дало тот же результат... (хотя это работает со всеми другими полями)

Есть какой-то способ получить информацию о моем дне рождения, пока она есть там, но я ничего не нашел в документах facebook, которые могли бы мне помочь.


person Arnaud P    schedule 08.06.2016    source источник


Ответы (1)


Используйте 1_. Он возвращает проанализированное тело ответа в виде массива.

$response = $fb->get('/me?locale=en_US&fields=id,last_name,first_name,email,birthday');
$userData = $response->getDecodedBody();
echo $userData['birthday'];
OR
var_dump($userData);

Facebook\FacebookResponse

person Nadeem0035    schedule 08.06.2016
comment
Это простое исправление отлично работает для всех полей, спасибо! Кроме того, что я понял это самостоятельно из var_dump($response) , есть ли какая-либо информация или документ об этом методе в Интернете, который я должен был найти? - person Arnaud P; 08.06.2016
comment
После отправки запроса к Graph API ответ будет возвращен в виде сущности Facebook\FacebookResponse. FacebookResponse - person Nadeem0035; 08.06.2016