Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook PHP SDK 3.1.1“;验证访问令牌时出错";之后转到应用程序页面_Php_Facebook_Api_Access Token_Facebook Login - Fatal编程技术网

Facebook PHP SDK 3.1.1“;验证访问令牌时出错";之后转到应用程序页面

Facebook PHP SDK 3.1.1“;验证访问令牌时出错";之后转到应用程序页面,php,facebook,api,access-token,facebook-login,Php,Facebook,Api,Access Token,Facebook Login,我在为Facebook构建iframe应用程序时遇到了一些奇怪的问题。在Go to应用程序页面上,应用程序似乎陷入了无限循环 用户在Go To app页面中授权应用程序并返回应用程序后,/me api调用抛出“Error validating access token”异常。我检查了,签名请求中有一个有效的访问令牌(使用facebook访问令牌调试工具测试)。我尝试用setAccessToken()方法设置它,但没有成功。 getUser()方法成功返回用户ID,但仍挂起/me api调用 这并

我在为Facebook构建iframe应用程序时遇到了一些奇怪的问题。在Go to应用程序页面上,应用程序似乎陷入了无限循环

用户在Go To app页面中授权应用程序并返回应用程序后,/me api调用抛出“Error validating access token”异常。我检查了,签名请求中有一个有效的访问令牌(使用facebook访问令牌调试工具测试)。我尝试用setAccessToken()方法设置它,但没有成功。 getUser()方法成功返回用户ID,但仍挂起/me api调用

这并不是在每个浏览器中都会发生,我只是在Chrome浏览器中看到它有时没有清晰的模式。我在IE中使用P3P标题修复了它。它在Firefox中运行良好

我几乎被卡住了,我已经没有头发可以拔了,所以任何想法都是受欢迎的。非常感谢

完整的错误消息:“验证访问令牌时出错:在登录www.facebook.com并按照给出的说明操作之前,您无法访问该应用。”

下面是一些代码

$this->_facebook = new Facebook(
    array(
        'appId' => $this->_config['appId'],
        'secret' => $this->_config['secret'],
        'cookie' => true,
        'fileUpload' => true
    )
);

$this->_signedRequest = $this->_facebook->getSignedRequest();

// Doing something with signed request, not FB related

$this->_userId = $this->_facebook->getUser();

if($this->_userId) {
    try{
        // At this line the "Error validating access token" error shows up
        $this->_user = $this->_facebook->api('/me');

        // Some more irrelevant code here

    } catch (Exception $e){
        $this->_facebook->destroySession();
        $this->_facebookLogin(false);
    }
} else {
    $this->_facebook->destroySession();
    $this->_facebookLogin(false);
}

// The _facebookLogin method
public function _facebookLogin($perms = 'email,user_birthday,publish_stream,video_upload'){
    $data = array(
        'fbconnect' => 0,
        'redirect_uri' => 'aredirecturl.com'
    );

    if(!empty($perms)) {
        $data['scope'] = $perms;
    }
    echo '<script type="text/javascript">window.top.location.href = "'.$this->_facebook->getLoginUrl($data).'";</script>';
    exit;
}
$this->\u facebook=new facebook(
排列(
'appId'=>$this->_config['appId'],
'secret'=>$this->_config['secret'],
“cookie”=>正确,
“fileUpload”=>true
)
);
$this->_signedRequest=$this->_facebook->getSignedRequest();
//使用签名请求执行某些操作,与FB无关
$this->_userId=$this->_facebook->getUser();
如果($this->\u userId){
试一试{
//在这一行显示“错误验证访问令牌”错误
$this->_user=$this->_facebook->api('/me');
//这里还有一些不相关的代码
}捕获(例外$e){
$this->_facebook->destroySession();
$this->\u facebook登录(false);
}
}否则{
$this->_facebook->destroySession();
$this->\u facebook登录(false);
}
//\u facebook登录方法
公共函数\u facebook登录($perms='电子邮件、用户生日、发布流、视频上传'){
$data=数组(
“fbconnect”=>0,
'redirect_uri'=>'aredirecturl.com'
);
如果(!空($perms)){
$data['scope']=$perms;
}
echo'window.top.location.href=“”.$this->_facebook->getLoginUrl($data)。“;”;
出口
}
编辑此部分

// At this line the "Error validating access token" error shows up
$this->_user = $this->_facebook->api('/me');
对此

// At this line the "Error validating access token" error shows up
$this->_user = $this->facebook->api('/me','GET');

手工销毁会话怎么样?您调试了这些参数吗

unset($_SESSION['fb_'.$YOUR_API_KEY.'_code']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_access_token']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_user_id']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_state']);

我几乎使用了与您相同的代码,但我没有使用
fileUpload
和cookie参数。

谢谢您的回答,但这并没有起作用。据我所知,GET是图形调用的默认值,所以它已经在使用了。你能把你的完整代码(例如,在这个代码
公共函数中,\u facebookLogin
是错误的,我也面临同样的问题,chrome。@Cazacu Vlad如果你找到了解决方案,请在这里发布,谢谢