2013-03-17 2 views
0

У меня есть следующий код в моем index.php:Facebook Application перенаправлять

$config = array(
'appId' => AppInfo::appID(), 
'secret' => AppInfo::appSecret(), 
'cookie' => true 
); 
$facebook = new Facebook($config); 

$app_name = "AppName"; 
$fbPermissions = 'email'; 
$validUser = 1; 
$fbuser = $facebook->getUser(); // get user 
$fbname = ""; 
$fbmail = ""; 
$fbid = 0; 
$user_profile = null; 

if(!$fbuser) 
{ 
$validUser = 0; 
} 
else 
{ 
try { 
    $user_profile = $facebook->api('/me'); //user profile 
    $user_permissions = $facebook->api("/me/permissions"); //list of user permissions 
    } catch (FacebookApiException $e) { 
    $fbuser = null; 
    $user_permissions = null; 
    } 

    $permissions_needed = explode(',',$fbPermissions); // permission required to proceed 
    foreach($permissions_needed as $per) //loop thrugh each permission 
    { 
    if ($user_permissions != null) { 
     if(!array_key_exists($per, $user_permissions['data'][0])){ 
      $validUser = 0; 
     } 
    } 
    } 
} 
if($validUser == 1){ 
$fbname = $user_profile["last_name"]." ".$user_profile["first_name"]; 
$fbmail = $user_profile["email"]; 
$fbid = $user_profile["id"]; 
} 

if(isset($_POST['submit'])) { 
header('Location: writetocsv.php?id='.$_POST['fbid'].'&name='.$_POST['fbname'].'&email='.$_POST['email']) ; 
} 

    if($signed_request = parsePageSignedRequest()){ 
     if($signed_request->page->liked) { 
      if(!userIsInDatabase($fbid)){ 
       include("pages/fanpage.php"); 
       echo "fanpage"; 
      } 
      else{ 
       include("pages/thankyou.php"); 
       echo "thankyoupage"; 
      } 
     } else { 
      include("pages/notfanpage.php"); 
      echo "notafanpage"; 
     } 
    } 

?> 

<script> 
     // Additional JS functions here 
     function login() { 
     FB.login(function(response) { 
      if (response.authResponse) { 
       // connected   

      } else { 
       // cancelled 
      } 
     },{scope:"email"}); 
     } 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : <?php echo AppInfo::appID(); ?> , // App ID 
      channelUrl : 'channel.html', // Channel File 
      status  : true, // check login status 
      cookie  : true, // enable cookies to allow the server to access the session 
      xfbml  : true // parse XFBML 
     }); 

     // Additional init code here 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
       // connected 
      } else if (response.status === 'not_authorized') { 
       // not_authorized 

       login(); 
      } else { 
       // not_logged_in 

       login(); 
      } 
     }); 
     }; 

     // Load the SDK Asynchronously 
     (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
     }(document)); 
     </script> 

Ok, поэтому позвольте мне объяснить это немного. Когда новый пользователь подключается к моей странице приложения вкладки, он показывает ему notafanpage.php. После того, как ему понравилась моя страница, вкладка автоматически обновится и покажет ему fanpage.php. В этой fanpage.php у меня есть форма с именем и письмом, которое мне нужно собрать. После того, как он нажимает submit, он перенаправляет на index.php, где он проверяет входы (еще не выполнен), а затем обратно в writetocsv.php? Id = .. & name = .. & mail = .. где я записываю данные в csv и после этого перенаправляет обратно на index.php. Вот где он получает прослушивание. В нем указано OAuthException: токен активного доступа должен использоваться для запроса информации о текущем пользователе. Какие-либо предложения ?

EDIT:

Ну, я понял это сам. Для тех, у кого есть эта проблема, есть решение:

Facebook отправляет подписанный запрос только при первом доступе к приложению. Поэтому вы должны хранить подписанный запрос в сеансе. Что касается токена доступа, вы должны помнить первый токен доступа и устанавливать его каждый раз, когда страница перезагружается через метод $ facebook-> setAccesToken ($ accestoken). Удачи !

+0

Опубликуйте ответ, не редактируя сообщение, но создайте здесь новый ответ. Затем отметьте это как правильно. –

+0

Хорошо, я сделаю это! Я могу ответить завтра, потому что я только что создал свою учетную запись, и у меня есть некоторые ограничения. – bandrei2408

ответ

0

Ну, я понял это сам. Для всех, у кого есть эта проблема, есть решение:

Facebook отправляет подписанный запрос только при первом доступе к приложению. Поэтому вы должны хранить подписанный запрос в сеансе. Что касается токена доступа, вы должны помнить первый токен доступа и устанавливать его каждый раз, когда страница перезагружается с помощью метода $facebook->setAccesToken($accestoken). Удачи !

+0

Отметьте это как правильно. –