Вземете рожден ден във Facebook чрез PHP 5.0 SDK

Не мога да накарам кода си да получи „рождения ден“ на моя тестов акаунт или дори моя собствен (няма успех никъде!), за да отрази, въпреки че от това, което видях, го изисквам правилно и имам правилните разрешения за „user_birthday ".

Но facebook изпраща обратно обект за това поле.

Всички останали полета работят перфектно, както можете да видите на моята резултатна страница.

Съответната част от файла на заявката

login.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);

Файлът за обратно извикване

login-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)


Използвайте getDecodedBody(). Той връща анализираното тяло на отговора като масив.

$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