2

Я пытаюсь интегрировать нашу БД с API-интерфейсом facebook, действительно новый для этого, поэтому я был бы признателен за некоторую помощь.

Я всегда получаю 0

Использования

$uid = $facebook->getUser() 

Я имел взгляд на подобные вопросы, но не нашел связанное решение.

PHP

if($_REQUEST['action']=="signup" && $_REQUEST['auth']=="facebook" && !empty ($_REQUEST['auth']) && !empty ($_REQUEST['action'])) 
{ 

require_once('libs/facebook/src/facebook.php'); 

$config = array(); 
$config['appId'] = 'xxxx'; 
$config['secret'] = 'xxxxxx'; 

$facebook = new Facebook($config); 
$uid = $facebook->getUser(); 
echo $uid; 
} 

//else {} normal sign up here with all the error checking 

window.fbAsyncInit = function() { 
    // init the FB JS SDK 
    FB.init({ 
     appId  : 'XXXX,      // App ID from the app dashboard 
     channelUrl : '//WWW.XXXX.com', // Channel file for x-domain comms 
     status  : true,         // Check Facebook Login status 
     xfbml  : true         // Look for social plugins on the page 
    }); 



    // Additional initialization code such as adding Event Listeners goes here 
    // will be handled. 
    FB.Event.subscribe('auth.authResponseChange', function(response) { 
    // Here we specify what we do with the response anytime this event occurs. 
    if (response.status === 'connected') { 


     loginfunction(); 
    } else if (response.status === 'not_authorized') { 

     FB.login(function(response) {},{scope: 'email'}); 
    } else { 

     FB.login(function(response) {},{scope: 'email'}); 
    } 
    }); 
    }; 

(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=XXXXX"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 


function loginfunction() { 
    console.log('Welcome! Fetching your information.... '); 
    FB.api('/me', function (response) { 
     console.log(response); 
/*I can see all the data here and the button also changes so I know that I am logged in */ 
     var data = 'action=signup&username=' + response.username + '&firstname=' + response.first_name + '&gender=' + response.gender + '&lastname=' + response.last_name + '&email=' + response.email + '&dob=' + "xxxx" + '&auth=facebook'; 
/*What's the point in passing all these parameters through ? only need to pass &auth=facebook and action=signup I guess the rest can be manipulated anyway so what's the point 
need to get them from PHP SDK (server side ajax call) */ 

     $.ajax({ 
      type: "POST", 
      url: "actions/do_signup.php", 
      data: data, 
      beforeSend: function (html) {}, 
      success: function (html) { 
       if (html == "success") { 
        window.location.replace("index.php"); 
       } else {} 
      } 
     }); 
    }, { 
     scope: 'email' 
    }); 
} 

благодаря HTML

<div class="fb-login-class"> 
     <div class="fb-login-button" autologoutlink="true" scope="publish_stream" perms="email,user_birthday" data-show-faces="false" 
     data-width="200" data-max-rows="1"></div> 
</div> 

JAVASCRIPT/Jquery

EDIT пробовал только с PHP по-прежнему не

require('facebook.php'); 
$facebook = new Facebook(array (
    'appId' => 'xxx', 
    'secret' => 'xxxx', 
    'cookie' => true 
) 
); 


if ($_REQUEST['act']=="fb") 
{ 
//$next_url = $facebook->getLoginStatusUrl($params); 

if ($facebook->getUser()) { 
     $userProfile = $facebook->api('/me'); 
     $uid = $facebook->getUser(); 
     // do logic 
     echo $uid ; 
     echo "ok"; 
    } else { 
    echo "problem"; 
     $loginUrl = $facebook->getLoginUrl($params = array('scope' => user_birthday,read_stream,'redirect_uri' => 'http://xxxx/index.php?act=success')); 
     header('Location:' . $loginUrl); 

    } 
} 
else if ($_REQUEST['act']=="success") 
{ 
    try{ 
     $_SESSION['fbAT'] = $facebook->getAccessToken(); 
    }catch(Exception $e){ 
     trigger_error("FB AccessToken: " . $e->getMessage()); 
    }  
$facebook->setAccessToken($_SESSION['fbAT']); 

if ($facebook->getUser()) { 
     $uid = $facebook->getUser(); 
     $userProfile = $facebook->api('/me'); 

     // do logic 
     echo $uid ; 
     echo $userProfile; 
     echo "ok"; 
    } else { 
    $uid = $facebook->getUser(); 
    echo $uid ; 
    echo "still problem"; 


    } 

Некоторые шаги, которые я пытался:

  • режим Sandbox отключен, и я подтвердил идентификатор приложения и секретный , а ...
  • попытался добавить заголовок: заголовок ('P3P : CP = «IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS НАШ ИНД CNT»);
  • Добавлено печенье»=> верно
  • Попробуйте вызвать его из статической страницы не через AJAX еще 0
  • только веб-сайт используется при facebook основной вкладке
  • Под опережающего типа приложения устанавливается на веб
  • Под разрешения по умолчанию деятельность является публичной
  • Убедился, что fb_ca_chain_bundle.crt находится в той же директории, что facebook.php также попытался использовать другой реж (то же самое с моим файлом PHP)
    • Попытка только PHP и getLog inUrl с дополнительными возможностями для доступа.
    • Попытка получения и установки маркер доступа

ответ

4

В окне.fbAsyncInit У меня есть cookie и oauth для true, и это сработало!

cookie:true,  
oauth : true. 

Убедитесь, что в вашем PHP вы также

cookie' => true. 

Это позволит код PHP для integrare с JS.

0

И вам нужно, чтобы убедиться, что пользователь вошел в систему с:

$loginUrl = $facebook->getLoginUrl(array('scope' => 'read_stream,etc..')); 

Область определяется permissions stated here

После этого вы должны уметь:

$user = $facebook->api("/me"); 

Какой будет получить массив, связанный с пользователем, $user['id'], вероятно, один вы хотите сохранить, а также любую другую информацию, как адрес электронной почты - не забудьте запросить email в scope

Надежда, что решает проблема!

+0

Пробовал, что все еще получает 0 назад. Я бы не ожидал, что вам нужно снова войти в систему с помощью getloginurl (так как я уже зарегистрировался через JS), но, тем не менее, я все еще получаю обратно. – Athanatos

+0

Я уточнил вопрос с кодом – Athanatos

+0

Вход в Facebook с JavaScript даст пользователям доступ к браузеру Facebook api, но не ваш сервер, который будет делать PHP-вызовы - я сделаю для вас некоторое чтение и попытаюсь объяснить, как чтобы объединить два метода общения с Facebook, но с моей точки зрения, я думаю, вам нужно войти в систему с PHP и 'getLoginUrl', а затем передать свой' $ facebook-> getAccessToken() 'на ваш JavaScript. Проделайте некоторое чтение и дайте более краткий ответ, но на данный момент вы должны убедиться, что после входа в систему вы можете 'print_r ($ facebook-> api ('/ me'));' и получить свою информацию – GroovyCarrot

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