Это сводит меня с ума> = (
$ facebook-> getUser () работает хорошо иногда, но иногда возвращает 0
Вот мой код: require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser(); require 'fbapi/facebook.php';
$facebook = new Facebook(array(
'appId' => 'xxx',
'secret' => 'xxxxx',
));
$user = $facebook->getUser();
приложение и секрет являются правильными.
Какая может быть причина, по которой getUser иногда возвращает 0 ???
Скорее всего, что-то в конце Facebook (разработчики прошли через некоторое время назад). Если $user
возвращает null или 0, просто перенаправьте их на URL-адрес входа (который вы должны иметь). Вероятность его возвращения 0 снова минимальна (если на их конце нет ошибки или нет кода, кроме того, что вы отправили).
Я столкнулся с подобной проблемой. $ facebook-> getUser () возвращал 0, а иногда возвращал действительный идентификатор пользователя, когда пользователь фактически не вошел в систему, что привело к ошибке Fatal Oauth, когда я пытался совершать вызовы графического api. Я, наконец, решил эту проблему. Я не знаю, правильно ли это, но это работает. Вот код:
<?php include 'includes/php/facebook.php'; $app_id = "APP_ID"; $app_secret = "SECRET_KEY"; $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); $user = $facebook->getUser(); if ($user <> '0' && $user <> '') { /*if valid user id ie neither 0 nor blank nor null*/ try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { /*sometimes it shows user id even if user in not logged in and it results in Oauth exception. In this case we will set it back to 0.*/ error_log($e); $user = '0'; } } if ($user <> '0' && $user <> '') { /*So now we will have a valid user id with a valid oauth access token and so the code will work fine.*/ echo "UserId : " . $user; $params = array( 'next' => 'http://www.quickbite.co.in' ); echo "<p><a href='". $facebook->getLogoutUrl($params) . "'>Logout</a>"; $user_profile = $facebook->api('/me'); echo "<p>Name : " . $user_profile['name']; echo "<p>"; print_r($user_profile); } else {/*If user id isn't present just redirect it to login url*/ header("Location:{$facebook->getLoginUrl(array('req_perms' => 'email,offline_access'))}"); } ?>
Вы просто вводите заголовок php в
header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
Я нашел простое решение этой проблемы .. это происходит, когда класс facebook не может установить или добавить переменную сеанса на вашем сервере.
В моем коде я использовал session_write_close (), прежде чем включать классы facebook, из-за которых я получил эту ошибку. «Ток состояния CSRF не соответствует одному предоставленному».
Затем я переместил session_write_close () в конце кода и, наконец, сработал. 🙂
Поэтому я боролся с той же проблемой, getUser()
всегда возвращался 0. Не имел никакого смысла. Журналы ошибок NginX показывали следующую ошибку: токен состояния CSRF не соответствует одному предоставленному. Затем я начал отлаживать sdk и сузил его до getAccessTokenFromCode()
не смог получить правильное accesstoken с серверов Facebook, что-то связанное с сертификатами SSL.
Решение на приведенной ниже ссылке решило проблему для меня.
https://github.com/facebook/php-sdk/issues/272
Также вам может потребоваться скопировать файл fb_ca_chain_bundle.crt в комплекте с sdk в папку, в которой находится ваш файл класса facebook. я сделал.
Я надеюсь в этом есть смысл.