2013-02-20 3 views
0

Я внедряю свое приложение fb и подключается к его собственной фан-странице fb. Мне нужно получить информацию о пользователях, такую ​​как имя пользователя, идентификатор и т. Д., Но когда я нажимаю ссылку «Подтвердить подлинность в Facebook», я в конечном итоге перехожу на пустую белую страницу? Вы можете просмотреть свой код здесь: http://codepad.org/f0Tuh63vfacebook - как получить идентификатор пользователя с phpsdk и js sdk

error_reporting(E_ALL); 
ini_set('display_errors', true); 

require 'facebook/facebook.php'; 

    $facebook = new Facebook(array(
'appId' => '1', 
'secret' => '2', 
)); 


// See if there is a user from a cookie 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    print_r($user_profile); 
    } catch (FacebookApiException $e) { 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
    $user = null; 
} 
} 
else{ 
$loginUrl = $facebook->getLoginUrl(
     array('scope' => 'user_about_me,user_birthday,email,publish_actions,offline_access,user_hometown,user_location', 
       'redirect_uri' => "https://domain.net/intro.php" 
     ) 
); // end of array 

} 
?> 
<!DOCTYPE html> 
    <html xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <body> 
    <?php if ($user) { ?> 
     Your user profile is 
    <pre> 
     <?php print htmlspecialchars(print_r($user_profile, true)) ?> 
    </pre> 
    <?php } else { ?> 

    <a href="<?php echo $loginUrl; ?>">Facebook authenticate</a> 
    <?php } ?> 
    <div id="fb-root"></div> 
    <script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
     appId: '<?php echo $facebook->getAppID() ?>', 
     cookie: true, 
     xfbml: true, 
     oauth: true, 
     status: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 
     //window.location.reload(); 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 
     //window.location.reload(); 
    }); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
    </body> 
    </html> 

Также здесь http://codepad.org/f0Tuh63v Что я делаю неправильно?

Также есть способ получить идентификатор пользователя FB без использования phpsdk или js sdk? Или мне нужно использовать эти плагины?

+0

Хорошо. Поэтому, пожалуйста, укажите, что в самом вопросе вы правильно поместили ценности appid и secret. Или используйте что-то вроде ****, чтобы все понимали это, просто видя. – gaurav

ответ

0

Я не вижу, что не так с вашим кодом. Но, если вы используете Javascript, я могу сказать вам альтернативу для получения подлинности, а затем получения требуемой информации.

Я использовал следующий код за моей кнопкой, который аутентифицировал мое приложение Facebook, а затем перенаправил пользователя на мой сайт. Это сработало для меня.

<a class="fb-login-button" align="center" target="_blank" href="https://www.facebook.com/dialog/oauth?client_id=CLIENT_ID&response_type=token&scope=PERMISSION_1,PERMISSION_2&redirect_uri=YOUR_WEBSITE"> TEXT </a> 

Затем я извлек токен, который был возвращен в перенаправленном URL-адресе.

var url_t; // Get the redirected URL. 
access_token = url_t.split('=')[1].split('&')[0]; 

Затем, используя токен доступа, я отправил HTTP-запрос для получения требуемых данных. Я использовал API GRAPH, предоставленный facebook. Для например: Для получения первого имени пользователя:

var xhr = new XMLHttpRequest(); 
var f_url_new = "https://graph.facebook.com/fql?q=SELECT%20name%20FROM%20user%20WHERE%20uid%20=%20me()&access_token=" + access_token; 
xhr.open("GET", f_url_new , true); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     obj1 = JSON.parse(xhr.responseText); 
     var str = obj1.data[0].name.toString(); 
     var n=str.split(" "); 
     document.getElementById("name").innerText = n[0]; 
    } 
} 
xhr.send(); 

Надеется, что это дает вам некоторое представление с относительно альтернатив. Это не правильный ответ на ваш вопрос, но он может помочь в мыслительном процессе.

Смежные вопросы