FQL返回“需要有效签名”

时间:2011-10-11 17:02:07

标签: php facebook facebook-graph-api facebook-fql

我遇到了一个奇怪的问题,在今天停止工作之前有效的事情,可能之前很糟糕但现在在oAUTH 2改变之后,我遇到了近乎生产的应用程序的麻烦

这是我尝试的

$params = array('method'=>'fql.query','query' => 'SELECT uid2 FROM friend WHERE uid1 = me()');
$result =  $facebook->api($params);

我明白了:

Exception: 104: Requires valid signature

或更详细说明:

$config = array(
'appId'  => 'XXXXXXXXXXXXXXXX',
'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX',
);

$facebook = new Facebook($config);

$uid = $facebook->getUser();

if ($uid){
 try {
        $access_t = $facebook->getAccessToken();
        $fql = 'SELECT uid2 FROM friend WHERE uid1 = '.$uid;
        $params = array('method' => 'fql.query', 'query' => 'SELECT uid2 FROM friend WHERE uid1 = '.$uid);
        $result = $facebook->api($params);
        echo $result;
        $friends = $facebook->api(array('method' => 'fql.query', 'query' => $fql, 'access_token' => $access_t));
        var_dump($friends);

 } catch (FacebookApiException $e) {
    echo $e; 
 }

这是我用来验证用户并获取登录信息和权限的代码:

$canvas_base_url = "https://apps.facebook.com/myapp/index.php?from=allow";
$params = array('scope' => 'publish_stream,email,offline_access,user_status,friends_status,friends_photos,user_photos,xmpp_login,user_online_presence,friends_online_presence',
'redirect_uri' => $canvas_base_url
);
$loginUrl = $facebook->getLoginUrl($params);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这意味着您使用的访问令牌无效。它可能已经过期了。

以下是http://developers.facebook.com/docs/authentication/文档中的引用:

  

除了访问令牌(access_token参数)之外,还有   response包含令牌到期前的秒数(   expires参数)。令牌过期后,您需要重新运行   上面的步骤生成一个新的代码和access_token,虽然如果   用户已经授权您的应用,他们将不会被提示   再这样做。如果您的应用需要具有无限期限的访问令牌   时间(也许是代表用户代表他们采取行动   使用您的应用),您可以请求offline_access权限。

因此,您应该重新运行生成访问令牌的步骤,或者需要offline_access权限。