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.

http://codex.wordpress.org/Function_API/wp_remote_get

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*