wp-facebook-connect – login process failed
Do wordpressa można zainstalować wtyczkę pozwalającą pobrać dane z facebooka i zarejestrować użytkownika. Wtyczka ta to wp-facebook-connect. Ustawienia serwera mogą zablokować działanie wtyczki. Do pobierania danych z Facebooka stosowana jest funkcja file_get_contents, co przy zablokowanych zdalnych adresach (allow_url_fopen=off) zakończy się wyświetleniem komunikatu „Facebook Connect error: login process failed!„. Do obejścia tego problemu należy zastosować obejście.
W pliku functions.php znajdujemy linijkę z $user = json_decode( … ) i zamieniamy ją na:
$user = json_decode(get_facebook_user($cookie['access_token'] ));
Następnie dodajemy odpowiednią funkcję:
function get_facebook_user( $cookie ) {
$url = 'https://graph.facebook.com/me?access_token=' . $cookie ; // dla wersji z curl
$content = "";
$header = "not yet";
$fp = fsockopen("ssl://graph.facebook.com", 443, $errno, $errstr, 30);
if (!$fp) {
// echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /me?access_token=".$cookie." HTTP/1.1\r\n";
$out .= "Host: graph.facebook.com\r\n";
$out .= "Connection: Close\r\n\r\n";
$result = fwrite($fp, $out);
while (!feof($fp)) {
$line = @fgets($fp, 128);
if( $line == "\r\n" && $header == "not yet" ) {
$header = "passed";
}
if( $header == "passed" ) {
$content .= $line;
}
}
fclose($fp);
}
return $content ;
}
To powinno rozwiązać problem z brakiem połączenia z Facebookiem.
Funkcję można rozbudować o curl, sockety i file_get_contents. W razie braku określonego modułu w php, lub blokady odpowiedniej funkcji będzie można wypróbować inne rozwiązanie.
Dopisek (4 III 2011)
Można także użyć wp_remote_get, który zawiera w sobie metody pozwalające wybrać działający mechanizm łączenia się z zewnętrznymi adresami.
Dodaj komentarz