Facebook API (через PHP): опубликовать в ленте?

#php #facebook #facebook-graph-api #facebook-php-sdk

#php #Facebook #facebook-graph-api #facebook-php-sdk

Вопрос:

Я понял основную идею (я думаю), но, похоже, не могу успешно опубликовать что-либо, используя предоставленный Facbook PHP-класс. На примере этого примера кто-нибудь может увидеть что-нибудь, в чем может быть проблема?

 // Initialize Facebook API
$fb = new Facebook(array(
    'appId' => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET,
    'cookie' => true
));

if($fb->getSession()) {
    $res = $fb->api('/me/feed/', 'post', array(
        'message' => 'test message',
        'description' => 'testing'
    ));
}

var_dump($res);
  

Когда я вывожу содержимое $ res, я получаю значение face-palming NULL. Есть идеи? Если вышесказанное выглядит правильно, кто-нибудь может предложить некоторые вещи, которые я мог бы попытаться отладить?

Комментарии:

1. Проверьте, действительно ли выполняется блок кода между конструкцией if, что означает: $fb->getSession() верно?

2. Для отладки: поместите случайные echo буквы s между вашими строками. Например. echo 'Debug 1'; после создания $fb и echo 'Debug 2'; сразу внутри вашего if() . Таким образом, вы можете точно увидеть, какая строка кода неисправна. (Я не уверен, что echo может быть сделано в среде Facebook.)

Ответ №1:

В вашем приложении, когда вы проверяете, зарегистрирован ли пользователь в Facebook, убедитесь, что вы подтверждаете, что ваше приложение запросило «особую привилегию» для публикации на стене пользователя. Вы можете сделать это, изменив свой код следующим образом:

 $url = $this->facebook->getLoginUrl(array('canvas' => 1, 'fbconnect' => 0, 'req_perms' => 'user_status,publish_stream'));
  

Обратите внимание, что ключу req_perms присваивается список значений, включающий ‘publish_stream’. Если у вас нет этой привилегии, вызов feed завершится ошибкой.

Также, действительно ли это проблема или нет, вы можете обернуть свои запросы Facebook блоком try-catch, чтобы перехватить исключения типа FacebookApiException, чтобы получить больше информации при возникновении ошибок. Например:

         try {
            $uid = $this->facebook->getUser();
            $me = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            print_r($e);
        }
  

Комментарии:

1. Это именно та проблема, с которой я столкнулся. Я знал, что должен запросить определенные разрешения, но документация (как всегда) устарела и ссылалась только на более старый метод выполнения этого.