Facebook PHP SDK - getUser () nagle zwraca 0

Przede wszystkim, aby to usunąć, spędziłem wiele godzin na przeglądaniu odpowiedzi na to pytanie w StackOverflow i próbowałem rozwiązać je samodzielnie, ale po prostu nie działa (już). W każdym razie...

Wczoraj wszystko działało dobrze. Poszedłem do łóżka, obudziłem się, logowanie na Facebooku nie działało już na 2 moich stronach. Link do logowania wysyła mnie na stronę Facebooka, która wymaga zatwierdzenia aplikacji, ale po przekierowaniu mnie na stronę, nie loguje mnie. Szybko wyśledziłem problem do getUser () zawsze zwracając 0. Więc ja skonfigurować nową aplikację (testową) z bardzo podstawowym kodem, aby sprawdzić, czy to działa. Tak nie jest. Oto kod:

<?php

        session_start();

        require_once("facebook.php");

        $config = array();
        $config['appId'] = '199971880127910'; //test app so I don't mind showing these
        $config['secret'] = 'e065588cb1edd96f821de8b3d362c488';
        $config['trustForwarded'] = true;

        $facebook = new Facebook($config);

        try {
            $user = $facebook->getUser();
            var_dump($user);

        } catch (Exception $e) {
            $e->getMessage();
        }

        $loginUrl = $facebook->getLoginUrl(array('redirect_uri' => 'http://gtcrais.redirectme.net/test/'));

        echo "<a href='".$loginUrl."'>Login</a>";
?>

Druga odpowiedź wtutaj przykuł moje spojrzenie. Wypróbowałem to rozwiązanie i nie zadziałało, więc otworzyłem base_facebook.php i przewinęłem do wiersza, w którym „kod” jest przekazywany do jakiejś zmiennej - linia 458:

$ code = $ this-> getCode ();

Powtórzyłem to i poprawnie wyświetlił parametr kodu przekazany z adresu URL. Problematyczna linia okazuje się być jednym rzędem poniżej tego:

$ access_token = $ this-> getAccessTokenFromCode ($ code);

Ta funkcja zwraca wartość false do $ access_token po przekazaniu zmiennej $ code. W tej funkcji ta część kodu zgłasza wyjątek:

try {
      // need to circumvent json_decode by calling _oauthRequest
      // directly, since response isn't JSON format.
      $access_token_response =
        $this->_oauthRequest(
          $this->getUrl('graph', '/oauth/access_token'),
          $params = array('client_id' => $this->getAppId(),
                          'client_secret' => $this->getAppSecret(),
                          'redirect_uri' => $redirect_uri,
                          'code' => $code));
    } catch (FacebookApiException $e) {
      // most likely that user very recently revoked authorization.
      // In any event, we don't have an access token, so say so.
      print_r($e);
      return false;
    }

print_r ($ e) wyświetla ogromną plamę bełkotu (jestem trochę noobem, więc nie mogę odczytać z niego prawie wszystkiego, co ma sens). Jedyne, co widzę, powtarzam w tym miejscu

Problem z certyfikatem SSL, sprawdź, czy certyfikat CA jest OK. Szczegóły: błąd: 14090086: SSL

I tak daleko zaszedłem przy debugowaniu tego. Każda pomoc jest doceniana. Jeszcze raz wczoraj wszystko działało dobrze. Dzisiaj, bez zmiany jednej linii kodu, nie działa już. Mind boggling = (O tak, używam WAMP z PHP 5.4.3

EDIT: Oto komunikat o błędzie:http://i.imgur.com/TeY8h.png

EDIT2: Rozwiązany:

W base_facebook.php dodaj następujące 2 linie pod $ CURL_OPTS:

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2

Co sprawia, że ​​...

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.2',
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => 2
  );

Nie jestem pewien, w jakim stopniu jest to kwestia bezpieczeństwa, ale sprawia, że ​​logowanie za pomocą Facebooka działa, więc masz go (i mam go. Cały dzień stracony na tym, fml).

EDIT3: wydano nowy pakiet SDK, który rozwiązuje ten problem:https://github.com/facebook/facebook-php-sdk

questionAnswers(4)

yourAnswerToTheQuestion