1

我正在使用 facebook SDK 在 PHP 中编写一个 facebook 应用程序。
我的代码中的重要部分是:

    $facebook = new Facebook(array(
                'appId' => $ApplicationID,
                'secret' => $ApplicationSecret,
                'cookie' => true, // enable optional cookie support  
            ));
    $user = $facebook->getUser();

              $post = $facebook->api('/' . $user . '/feed', 'post', array(
              stuff
      ));
                $_SESSION['finish'] = false;
                $_SESSION['inside'] = 'yes';
                $_SESSION['uid'] = $user;
                $token = $facebook->getAccessToken();
                echo 'Access token: ' .$token;
                $_SESSION['friends'] = $facebook->api('/me/friends?access_token'.$token);

您可以看到我正在echo获取访问令牌。
起初,我没有将其添加access_token到查询中 - 我只是添加它以进行检查。
问题是最后一个like(带有/me/friends/)抛出异常:

OAuthException: An active access token must be used to query information about the current user.

尽管我进行了登录,并且feed post 确实有效(我在墙上检查过,它就在那里)。然后,我的try catch块通过重定向到登录链接来处理异常,这样:

catch(Exception $e) {

            $login_url_params = array(
            'scope' => 'stuff',
            'fbconnect' => 1,
            'redirect_uri' => $ApplicationURL
        );
        $login_url = $facebook->getLoginUrl($login_url_params);

        //redirect to the login URL on facebook
        echo ("EXCPETION! " . $e . "<script> top.location.href='" . $login_url . "'</script>");
        exit();
        }

编写异常的代码显然仅用于调试目的。
好吧,我第一次运行应用程序时,一个类似的代码是由一个if(!$user)条件执行的。然后它请求我的许可,我给了它。然后,它再次说访问令牌无效(但确实发布到我的墙上)。
请注意,我已经比较了 access_tokens,即使在删除应用程序并再次执行所有操作之后 - 它仍然保持不变。

这是非常尴尬的行为,我无法理解。任何人都可以对此有所了解吗?
编辑:出于某种奇怪的原因,即使在转到不同的用户之后,令牌也不会改变。但是墙上的帖子还是发了……(而且访问好友列表的时候抛出异常)

4

1 回答 1

1

出于某种奇怪的原因,即使在转到不同的用户之后,令牌也不会改变。但是墙上的帖子还是发了……(而且访问好友列表的时候抛出异常)

在我看来,这听起来好像您实际上没有用户当前登录,因此 SDK 只是使用您的应用访问令牌,这始终是它在接收另一个更“特定”的令牌之前将使用的默认令牌。

您的访问令牌有什么格式——看起来像your_app_id|your_app_secretyour_app_id|some_random_characters吗?如果它以您的应用程序 ID开头,那么它绝对是一个应用程序访问令牌。

于 2012-08-09T12:30:49.653 回答