0

我用下面的代码获取权限,我的应用程序访问新页面时结转(代码中的index.php) -权限没有得到同时使用Facebook的PHP SDK

<?php 
    require_once "sdk/facebook.php"; 

    $fbconfig['appid'] = "333446170045623"; 
    $fbconfig['secret'] = "9ea7b92bc7eac852a3900e1d7931c34d"; 

    $facebook = new Facebook(array(
     'appId' => $fbconfig['appid'], 
     'secret' => $fbconfig['secret'], 
     'cookie' => true, 
    )); 

    $user = $facebook->getUser(); 

    if (!$user) { /* If user not found, authenticate */ 
$loginUrl = $facebook->getLoginUrl(
     array(
      'scope' => 'publish_stream', 
      'redirect_uri' => 'http://www.facebook.com/pages/pagename?sk=app_333446170045623' 
     )); 
    echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>"; 
    } 

    $signed_request = $facebook->getSignedRequest(); 
     ?> 

现在,有一个将用户带到select.php页面的链接。在那里,我曾尝试使用下面的代码来获取有关当前用户

$user_profile = $facebook->api('/me'); 

我已经把相同的权限retreival代码index.php页面此页面上的信息。

不过,我就在这下面的错误页面 -

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /server/html/appname/sdk/base_facebook.php on line 1106 

我已经试过各种建议的解决方案,但他们不似乎工作。如何使用$ facebook-> api('/ me')获取此页面上的信息? (顺便说一句,我使用Facebook的最新的PHP SDK)

回答

0

不知道为什么,但使用getAccessToken()方法body标签下面类似的措施。

+0

我有同样的错误。我似乎无法弄清楚你的意思。我已经尝试了你在这里得到的相同答案,但是我无法在第二页上找到它。你介意详细介绍一下吗? – MillerMedia 2012-11-29 01:19:27

+0

@Navnath好心经过语流编辑任何东西之前..你刚刚让事情变得更糟(读一个流动的全部答案)... ...编辑东西的冲动是compelling..just三思而后行如果真的需要..只是一个友好的建议.. – digster 2013-06-20 07:21:00

0

如果这是一个原生的Facebook应用程序,你将有2个选项。您可以设置所有链接的目标是父框架和追加对最终e.g http://apps.facebook.com/yourapp/next.php新的网址,或者,您可以包括页面上的JS-SDK来处理与window.reload登录和注销事件。如果这是一个本地应用程序,很可能正确的数据不会从Facebook发送,导致signed_request等丢失,您失去了访问令牌。

如果它是一个网站的应用程序,我也建议在页面上使用的JavaScript SDK。

所以使用

$user_profile = $facebook->api('/me'); 

将停止向错误之前只是在所有网页

<div id="fb-root"></div> 

<script>    
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '<?php echo $app_id; ?>', 
     cookie: true, 
     xfbml: true, 
     oauth: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 
     setTimeout('window.location.reload()',0); 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 
    setTimeout('window.location.reload()',0); 
    }); 
    }; 
    (function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=433871385166"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script>