我正在使用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设置为空......你的名字。我现在完全没有想法,所以如果你们中有人有任何建议,我会很高兴。任何帮助将不胜感激。
在此先感谢!
你在哪里定义'$ returnUrl'?只是要检查一下,因为设置为无效会导致你看到的错误。 –