1

我正在尝试获取用户页面:

<?php
try {
    $pages = $facebook->api('/me/accounts?fields=id,name');
    if (isset($pages['data'])) {
        $this->assign('pages', $pages['data']);
        $this->pages = $pages['data'];
    }
} catch (\FacebookApiException $e) {
    $loginUrl = $facebook->getLoginUrl(
        array(
            'redirect_uri' => $this->container->getParameter('home_url'),
            'scope'        => 'email,manage_pages'
        )
    );
    echo '<script type="text/javascript">top.location.href = "'.$loginUrl.'";</script>';
    exit;
}

但我跳进了无休止的重定向循环。经过一番研究,我发现 PHP SDK 在getAccessTokenFromCode方法中从 API 获取错误。$access_token_response变量是:

{"error":{"message":"This authorization code has expired.","type":"OAuthException","code":100}}

PHP SDKcode从 COOKIE 中获取价值。问题是它fbsr_{app_id}没有被刷新,它仍然包含相同的代码。这就是无限循环的原因。

我能做些什么来克服这个问题。我正在考虑删除fbsr_{app_id}cookie,但它看起来很奇怪。为什么 SDK 不为我处理这个问题?

4

2 回答 2

0

好的,我想我找到了解决方法。我同时使用 PHP SDK 和 JS SDK。我使用以下代码进行重定向:

echo '<script type="text/javascript">top.location.href = "'.$loginUrl.'";</script>';
exit;

但是我在其中添加了 JS SDK 并且不再出现问题:

echo "
<div id=\"fb-root\"></div>
<script type=\"text/javascript\">
  window.fbAsyncInit = function() {
    FB.init({appId: ".$app_id.", status: true, cookie: true, xfbml: true, oauth: true});
    FB.getLoginStatus(function(response) {
        top.location.href = '".$loginUrl."';
    });
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
";
exit;

我不确定这是否不是 JS SDK/PHP SDK 的错误。

于 2013-02-20T14:26:43.217 回答
0

如果您使用的是 PHP 5.4,我也遇到了这个问题。我写了一个关于如何解决这个问题的教程。原因是 PHP SDK 没有正确提取代码。

如果收到异常,您还可以尝试销毁会话(session_destroy()或框架等效项)或手动清除 cookie( )。setcookie ("cookie_name", "", time() - 3600);

编辑

确保应用中的 App ID 和 App Secret 也正确。不正确的应用程序密钥有时是问题,因为它用于解码signed_request.

此外,如果问题是特定于 IE 的,请尝试将以下标头添加到您的代码中:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT');

IE 的安全设置有时会阻止 cookie 在 iframe 中设置。上面的标题应该会有所帮助。

于 2013-02-20T13:19:55.707 回答