Facebook PHP SDK - getUser () repentinamente retorna 0

Primeiro de tudo, para tirar isso do caminho, passei horas procurando respostas para essa pergunta aqui no StackOverflow, e tentei resolvê-lo sozinho, mas ele simplesmente não está funcionando (mais). Então mesmo assim ...

Ontem, tudo funcionou bem. Fui para a cama, acordei, login com facebook não funcionou mais em 2 dos meus sites. O link de login me envia para a página do Facebook que exige que eu aprove o App, mas depois que ele me redireciona de volta para o site, ele não me conecta. Eu rapidamente rastreei o problema para getUser () sempre retornando 0. Então eu configurar um novo aplicativo (teste) com um código muito básico, só para ver se funciona. Não faz. Aqui está o código:

<?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>";
?>

A segunda resposta emAqui Chamou minha atenção. Eu tentei essa solução e não funcionou, então eu abri o base_facebook.php e rolei para a linha onde esse 'código' é passado para alguma linha de variável 458:

$ code = $ this-> getCode ();

Eu fiz eco disso, e ele exibiu corretamente o parâmetro de código que foi passado a partir do URL. A linha problemática acaba por ser as duas linhas abaixo daquela:

$ access_token = $ this-> getAccessTokenFromCode ($ código);

Essa função retorna um valor false para $ access_token quando passada a variável $ code. Nessa função, essa parte do código lança uma exceção:

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) exibe uma enorme bolha de rabiscos (eu sou um tanto quanto um noob, então não consigo ler quase nada dele que faça sentido). A única coisa que vejo repetindo é

Problema de certificado SSL, verifique se o certificado da CA está correto. Detalhes: erro: 14090086: SSL

E isso é o quão longe eu cheguei com a depuração. Qualquer ajuda é apreciada. Mais uma vez, ontem, tudo estava funcionando bem. Hoje, sem uma única linha de código alterada, ela não funciona mais. Mente incompreensível = (Ah sim, eu estou rodando WAMP com PHP 5.4.3

EDIT: Aqui está a mensagem de erro:http://i.imgur.com/TeY8h.png

EDIT2: Resolvido:

Em base_facebook.php adicione as seguintes 2 linhas em $ CURL_OPTS:

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2

O que torna isso ...

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

Não tenho certeza de quanto de segurança isso é, mas faz com que o Login com o Facebook funcione, então você o tem (e lá eu o tenho. Todo o dia perdido nisso, fml).

EDIT3: Novo SDK lançado que corrige este problema:https://github.com/facebook/facebook-php-sdk

questionAnswers(4)

yourAnswerToTheQuestion