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