2011-10-21 60 views
0

我正在使用PHP Facebook SDK(v.3.1.1)构建我的Facebook应用程序。 在我的流程中的某个时刻,我需要用户接受我的应用程序。我使用下面的代码:在用户拒绝请求(尝试使用Facebook PHP SDK)后尝试请求权限时出现错误消息

// Is there an error? Redirect to explain permissions page 
if(!empty($_GET['error'])) { 
    $redirectUrl = APP_FACEBOOK_PAGE; 
require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php'); 
die(); 
} 

// Prepare app 
$facebook = new Facebook(array(
    'appId' => APP_ID, 
    'secret' => APP_SECRET, 
    'cookie'=> true 
)); 
$facebookId = $facebook->getUser(); 

// Changed user? 
if((!empty($_SESSION['facebookAuth']['facebookId']) && $_SESSION['facebookAuth'] ['facebookId'] != $facebookId)) { 
    $facebook->setAccessToken(''); 
    $_SESSION['facebookAuth']['facebookId'] = $facebookId; 
    $redirectUrl = getRequestPermissionsUrl($facebook); 
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php'); 
    die(); 
} 

// No access token? Re-acquire it! 
if($facebook->getAccessToken() == '') { 
    $redirectUrl = getRequestPermissionsUrl($facebook); 
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php'); 
    die(); 
} 

// Let's see if we have an active session 
if(!empty($_SESSION['facebookAuth']['facebookId']) && !empty($_SESSION['facebookAuth'] ['facebookUserObject'])){ 
    $facebookId = $_SESSION['facebookAuth']['facebookId']; 
    $facebookUserObject = $_SESSION['facebookAuth']['facebookUserObject']; 
}else{ 
    $facebookId = $facebook->getUser(); 

    if ($facebookId) { 
     try { 
      $facebookUserObject = $facebook->api('/me'); 
      // Put them in session so we can re-use them 
      $_SESSION['facebookAuth']['facebookId'] = $facebookId; 
      $_SESSION['facebookAuth']['facebookUserObject'] =  $facebookUserObject; 
     } catch (FacebookApiException $e) { 
      error_log($e); 
     } 
    } 
} 

// If no facebookId -> check permissions anyway 
if(empty($facebookId)) { 
    $redirectUrl = getRequestPermissionsUrl($facebook); 
    require_once(ABSOLUTE_DOCUMENTROOT_PATH.'do_redirect.inc.php'); 
    die(); 
} 

我的功能 'getRequestPermissionsUrl' 为getLoginUrl电话:

return $redirectUrl = $facebookObject->getLoginUrl(array('canvas'=>1,'fbconnect'=>0,'redirect_uri'=>$returnUrl,'scope'=>'publish_stream,email,user_likes')); 

文件 'do_redirect.inc.php' 做了JS重定向:

top.location.href = '$redirectUrl'; 

所以,考虑到这一点,我们来看看第一部分。 在用户拒绝权限并重新加载页面后,再次包含此代码。在这种情况下,$ _GET ['error']被填充,我们将被重定向到应用中的另一个php文件 - 这个文件不包含我发布的代码,但与权限或所有内容无关。在那个其他文件是一个链接到需要权限的页面 - 上面的代码再次被加载,但当试图请求权限时,我收到错误“出错了,我们正在尝试修复它”在Facebook页面上。

我试过从销毁会话evertyhing设置为空......你的名字。我现在完全没有想法,所以如果你们中有人有任何建议,我会很高兴。任何帮助将不胜感激。

在此先感谢!

+0

你在哪里定义'$ returnUrl'?只是要检查一下,因为设置为无效会导致你看到的错误。 –

回答

相关问题