【问题标题】:Issues getting the Facebook PHP SDK to work on my application让 Facebook PHP SDK 在我的应用程序上工作的问题
【发布时间】:2011-05-07 13:21:25
【问题描述】:

我正在制作一个 facebook 应用程序,我必须在其中显示正在使用它的用户的新闻提要。我正在使用图形 API 来执行此操作。问题是它没有给我提要。 我用它来展示这样的朋友:

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

它工作正常。

对于新闻提要,我使用这个:

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

它显示了一个错误:

Fatal error: Uncaught IDInvalidException: Invalid id: 0 thrown in 
/home/content/58/6774358/html/test/src/facebook.php on line 560

当我尝试使用此获取个人资料提要(墙)时:

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

它显示了一个空数组。

这些 API 调用在图形 API 页面中向我显示结果,但不知道为什么不能在我的应用程序中工作。谁能帮助我.. 我的完整代码如下

require_once 'src/facebook.php';

// 创建我们的应用程序实例。 $facebook = 新的 Facebook(数组( 'appId' => 'xxxxx', '秘密' => 'xxxxx', 'cookie' => 真, ));

$session = $facebook->getSession();
    $fbme = null;
// Session based graph API call.
if (!empty($session)){
    $fbme = $facebook->api('/me');
}
if ($fbme) {
     $logoutUrl = $facebook->getLogoutUrl();
     echo '<a href="'.$logoutUrl.'">Logout</a>';
}else{
    $loginUrl = $facebook->getLoginUrl();
     echo '<a href="'.$loginUrl.'">Logout</a>';
}
$friends = $facebook->api('/me/friends?access_token='.$session["access_token"]);
$feeds   = $facebook->api('/me/feed?access_token='.$session["access_token"]); 
print('<pre>Herere:');print_r($feeds);die;

【问题讨论】:

    标签: php facebook facebook-php-sdk


    【解决方案1】:

    您在身份验证期间是否要求提供read_stream permission

    你经历过什么类型的Authentication/“允许”流程?

    JavaScript SDK? Facebook PHP SDK? XFBML 登录按钮?

    编辑- 以下是帮助您入门的有用链接:

    Facebook PHP SDK

    Authentication Process

    Building Apps on Facebook.com

    这些都是 Facebook 和 github 上的官方文档。


    编辑:按此一步一步操作:

    从您的原始代码中,查找:

    $loginUrl = $facebook->getLoginUrl();
    

    改成:

    $loginUrl = $facebook->getLoginUrl(array('req_perms'=>'read_stream'));
    

    首先从您的帐户中卸载您的应用程序:

    http://www.facebook.com/settings/?tab=applications
    

    然后再试一次以显示新的允许弹出窗口


    编辑

    这也是关于 if 语句中代码的排列。使用此代码:

    <?php
    require_once 'src/facebook.php';
    $session = $facebook->getSession();
    $fbme = null;
    
    if($session){
        $fbme = $facebook->api('/me');
        $friends = $facebook->api('/me/friends');
        $feeds = $facebook->api('/me/feed'); 
        $logoutUrl = $facebook->getLogoutUrl();
        echo '<a href="'.$logoutUrl.'">Logout</a>';
        echo "<pre>".print_r($feeds,TRUE)."</pre>";
    }else{
        $loginUrl = $facebook->getLoginUrl(array('req_perms'=>'read_stream','canvas'=>1,'fbconnect'=>0));
        echo '<script> top.location.href="'.$loginUrl.'"; </script>>';
    }
    

    再次从

    卸载您的应用
    http://www.facebook.com/settings/?tab=applications
    

    然后重新打开应用程序

    【讨论】:

    • 我使用 Facebook PHP SDK 我使用了链接thinkdiff.net/facebook/… 我的代码如下: require_once 'src/facebook.php'; // 创建我们的应用程序实例。 $facebook = new Facebook(array('appId' => 'xxxxxxxx', 'secret' => 'xxxxxxxx', 'cookie' => true, )); $friends = $facebook->api('/me/friends'); $feeds = $facebook->api('/me/feed'); print('
      这里:');print_r($feeds);die;
    • 您可以编辑您的问题并重新发布此代码吗?您没有包含通常具有 getLoginUrl()、top.href.location、重定向等的实际身份验证脚本。
    • 请看问题@dragonjet
    • 如果这是您的完整代码,我不确定您是如何获得 /me/friends 的。你基本上需要在代码中的某处使用 if($facebook->getSession()) 并重定向到 getLoginUrl(),你没有这些吗?
    • 我修改了代码并将其重新发布在问题中,请立即查看。这也是我第一次使用 facebook 应用程序,所以你能给我任何好的基本教程的链接来设置一个 facebook 应用程序吗?我注意到该网址不适用于除我之外的任何其他 Facebook ID,它仅显示我用于创建此应用程序的 ID 的朋友。我的应用程序网址是 apps.facebook.com/test_this_new_app@dragonjet
    【解决方案2】:

    Facebook PHP SDK 应该为您处理您的访问令牌,您无需在 Facebook::api() 调用中将其附加到您的图形 API 端点。

    正如@dragonjet 指出的那样,您需要向您的 FB 用户请求 read_stream 扩展权限才能访问他们的提要。不过,您粘贴的异常与此类问题并不真正匹配,并且您对/me/home 的请求不会引发类似的异常(或关于无权访问的异常)。

    我仍然认为这是一个权限问题,所以从这里开始尝试修复它。以下是如何请求适当权限的示例。

    $facebook = new Facebook(array(
        'appId' => FB_APP_ID, //put your FB APP ID here
        'secret' => FB_APP_SECRET, //put your FB APP SECRET KEY here
        'cookie' => true
    ));
    
    $session = $facebook->getSession();
    
    if ($session)
    {
        //check to see if we have friends_birthday permission
        $perms = $facebook->api('/me/permissions');
    }
    
     //we do this to see if the user is logged & installed
    if (empty($session) || empty($perms['read_stream']))
    {
        //get url to oauth endpoint for install/login
        $loginUrl = $facebook->getLoginUrl(array(
            //put the URL to this page, relative to the FB canvas
            //(apps.facebook.com) here vvv
            'next' => 'http://apps.facebook.com/path_to_your_app/index.php',
            'req_perms' => 'read_stream'
        ));
    
        //use javascript to redirect. the oauth endpoint cant be loaded in an
        //iframe, so we have to bust out of the iframe and load it in the browser
        //and tell the oauth endpoint to come back to the fb canvas location
        echo "<script>window.top.location='{$loginUrl}';</script>";
        exit;
    }
    
    print_r($facebook->api('/me/home'));
    print_r($facebook->api('/me/feed'));
    

    【讨论】:

    • 这仍然对我没有帮助@Jim Rubenstein 它只是将我重定向到此链接facebook.com/developers/… 并且没有显示任何内容,也没有任何反应。我之前发布的代码向我展示了我的朋友,但它不适用于我不了解 Facebook 应用程序基础的任何其他 ID,请帮助
    • 每当我尝试从另一个 Facebook 帐户运行我以前的代码(写在上面的原始问题中)时,它都会向我显示此错误致命错误:未捕获的 OAuthException:必须使用活动访问令牌来查询有关信息当前用户。在第 560 行的 /home/content/58/6774358/html/test/src/facebook.php 中抛出我不知道为什么我首先编写的代码只对我有用@Jim Rubenstein
    • 无法弄清楚为什么它向我显示我的 facebook id 的朋友并显示此错误 atal error: Uncaught OAuthException: An active access token must be used to query about the current user.在第 560 行的 /home/content/58/6774358/html/test/src/facebook.php 中抛出另一个 facebook id@Jim Rubenstein
    • @techie_28 - facebook 最近在使用他们的开发者应用程序时遇到了问题 (facebook.com/developers),这就是为什么你去那里时得到一个空白页面的原因。至于您的 OAuthException,您是在 Facebook 画布中加载页面,还是通过外部站点加载页面? (你的网址是 app.facebook.com/your_app/ 还是 your-site.com/your/app)?
    • apps.facebook.com/test_this_new_app 这是我的应用程序 url @Jim Rubenstein,当我点击 graph.facebook.com/me/feed?access_token=... 或 graph.facebook.com/me/home?access_token=... 它会显示结果,但在我的应用程序中不会。我正在尝试从 mozilla 中的一个 facebook id 和 google chrome 中的另一个 facebook id 访问 http://apps.facebook.com/test_this_new_app/ 这个 url,它仅适用于一个,并显示 chrome.The facebook id 来自哪个我创建的这个应用程序运行良好(即显示我的朋友而不是新闻源或喜欢)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2014-07-31
    相关资源
    最近更新 更多