Проблемы с получением PHP PHP SDK для работы с моим приложением - PullRequest
1 голос
/ 07 мая 2011

Я делал приложение для Facebook, в котором я должен показывать новостные ленты пользователя, который его использует. Я использую Graph 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

когда я пытаюсь получить профиль Feed (Wall), используя это:

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

показывает пустой массив.

Эти вызовы API показывают мне результаты на странице API Graph, но я не знаю, почему не работает в моем приложении. Может ли кто-нибудь помочь мне, пожалуйста .. Мой полный код выглядит следующим образом

require_once 'src/facebook.php';

// Создать наш экземпляр приложения. $ facebook = новый Facebook (массив ( 'appId' => 'xxxxx', 'secret' => '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;

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

Вы запрашивали разрешение read_stream во время аутентификации?

Какой тип Аутентификации / "Разрешить" процесс, который вы прошли?

JavaScript SDK? Facebook PHP SDK? Кнопка входа в XFBML?

РЕДАКТИРОВАТЬ - Вот полезная ссылка, которая поможет вам начать:

Facebook PHP SDK

Процесс аутентификации

Создание приложений на Facebook.com

Это все официальные документы в Facebook и github.


РЕДАКТИРОВАТЬ : выполните следующие действия:

В исходном коде ищите:

$loginUrl = $facebook->getLoginUrl();

Измените его на:

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

Сначала удалите приложение из своей учетной записи:

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

Затем попробуйте еще раз, чтобы показать новое Разрешить всплывающее окно


EDIT

Это также касается расположения кода в операторах if. Используйте этот код:

<code><?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)."
"; } Еще { $ loginUrl = $ facebook-> getLoginUrl (массив ('req_perms' => 'read_stream', 'canvas' => 1, 'fbconnect' => 0)); echo ' top.location.href = "'. $ loginUrl. '"; > '; }

Удалите приложение снова с

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

и заново откройте приложение

2 голосов
/ 07 мая 2011

Facebook PHP SDK должен обрабатывать ваш токен доступа, вам не нужно добавлять его к конечной точке вашего графа API при вызове Facebook::api().

Как указал @dragonjet, вам необходимо запросить расширенное разрешение read_stream у вашего пользователя FB, чтобы получить доступ к его ленте. Тем не менее, вставленное вами исключение на самом деле не соответствует такой проблеме, и ваш запрос к /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'));
...