Facebook Graph API, расширенные разрешения

Я пытаюсь использовать facebook Graph API для обновления сообщения статуса пользователя.

При использовании я получаю следующую ошибку: я думаю, что на новый графический пакет sdk не ссылаются должным образом?

Notice: Undefined property: Facebook::$api_client in /users/home/aafhe7vh/web/public/update.php  on line 9

Fatal error: Call to a member function users_hasAppPermission() on a non-object in /users/home/aafhe7vh/web/public/update.php on line 9

Это файл, который я использую http://github.com/facebook/php-sdk/blob/master/src/facebook.php

Ниже приводится содержимое моего update.php:


# <?php  

  include_once ('facebook.php');
  $api_key = '@@@@@@@@@@@@@@@@@@@2';
  $secret  = '$$$$$$$$$$$$$$$$$$$$44';
  global $facebook;
  $facebook = new Facebook($api_key, $secret);

# include_once("config.php");  
# if (!$facebook->api_client->users_hasAppPermission("status_update")){  
# echo '<fb:prompt-permission perms="status_update" next_fbjs="greet()">Let us update your status </fb:prompt-permission>';  
# $visibility = "none";  
# }  
# else  
# $visibility = "block";  
#   
# if(isset($_POST['hello']))  
# {  
#     $facebook->api_client->users_setStatus($_POST['hello']);  
#     echo "<p>Your status has been updated</p>";  
# }  
# ?>  
# <div id="statusdiv" style="display:<?=$visibility;?>;">  
#     <form method="POST">  
#         Please update your status:<br/>  
#         <input type="text" name="status" /> <br/>  
#         <input type="submit" value="change status" />  
#     </form>  
# </div>  
#   
# <script>  
# 
function greet()  
# {  
#     var session = "<?=$facebook->api_client->session_key;?>";  
#     document.getElementById("statusdiv").setStyle("display","block");  
#     new Dialog().showMessage("Info","Thank you for granting us this permission! ");  
# }  
</script>

Я использовал приведенный выше код отсюда, http://fbcookbook.ofhas.in/tag/extended-permission/

Я не уверен, что должен содержать config.php, поэтому я удалил эту строку в своем коде.

Спасибо.


person codeObserver    schedule 24.06.2010    source источник


Ответы (2)


Вы включаете новейший PHP SDK, но ваш код написан для старого SDK. Итак, либо перейдите на предыдущую версию SDK, либо измените свою реализацию.

// Old SDK
$facebook->api_client->users_setStatus($_POST['hello']);  

// New SDK
$facebook->api ( array(
    'method' => 'users.setStatus'
  , 'status' => $_POST['hello']
  , 'uid'    => /* user's facebook id */
) );

Дополнительную информацию о параметрах см. В соответствующей документации.

РЕДАКТИРОВАТЬ

Ответ на ваши вопросы

1] При использовании нового SDK - все иначе. Вы должны создать такой объект

$facebook   = new Facebook(array(
    'appId'  => 'FB_APP_ID'
  , 'secret' => 'FB_APP_SECRET'
  , 'cookie' => true
));

2] Исправлен мой код выше

3] http://developers.facebook.com/docs/reference/api/

person Peter Bailey    schedule 24.06.2010
comment
Спасибо, Питер, я решил использовать новый SDK, чтобы избежать неприятностей в будущем. 1] Когда я использую предоставленный вами код, я получаю 101. Представленный ключ API не связан ни с одним известным приложением. Это потому, что мое приложение еще не опубликовано !!. Значит, я не могу это проверить? 2] Кроме того, есть ли способ указать идентификатор пользователя или что-то еще в приведенном выше API, чтобы указать, статус какого пользователя я хочу обновить. 3] Где я могу найти сигнатуры методов нового API? - person codeObserver; 25.06.2010
comment
Спасибо, Питер, за обновления, я думаю, что новая документация по API действительно разочаровывает. Я нигде на этой странице не вижу подписей API. Теперь я получаю 102: параметры uid или сеансовый ключ требуется ошибка, и вне курса $ facebook = $ facebook- ›require_login () больше не будет работать. Я использую указанную здесь аутентификацию developers.facebook.com/docs/api#authorization .На самом деле я хочу публиковать статус пользователя, даже если он не вошел в систему, в основном это была точка расширенных разрешений. Есть предложения, Питер? Должен ли я преуспеть, просто перейдя на старый API, могу ли я использовать там расширенные разрешения? - person codeObserver; 26.06.2010
comment
Наконец я перешел к старым API и заставил их работать. Я использовал $ uid = $ facebook- ›require_login ($ required_permissions = 'email, status_update, offline_access'); а затем $ facebook- ›api_client-› users_setStatus (привет, $ uid); ; У меня это отлично работает !! - person codeObserver; 26.06.2010
comment
Однако теперь это работает, только если у меня есть сообщение, полученное с помощью uid $ facebook- ›require_login. Однако, если я жестко запрограммирую значение uid, а затем использую $ facebook- ›api_client-› users_setStatus (hello, $ uid); Я получаю: Неустранимая ошибка: неперехваченное исключение «FacebookRestClientException» с сообщением «Произошла неизвестная ошибка» в /PATH/facebookapi_php5_restlib.php(1813): FacebookRestClient- ›call_method ('facebook.users ....', Array) # 1 / PATH / file.php (9): FacebookRestClient- ›users_setStatus ('hello', '1000247983459873') # 2 {main} добавлен в /PATH/facebookapi_php5_restlib.php в строке 3065 - person codeObserver; 26.06.2010
comment
следующие строки соответствуют строке 3065: if (is_array ($ result) && isset ($ result ['error_code'])) {3065 throw new FacebookRestClientException ($ result ['error_msg'], 3066 $ result ['error_code'] ); 3067} - person codeObserver; 26.06.2010
comment
Вам, вероятно, следует начать новую тему для этого - person Peter Bailey; 27.06.2010

При использовании Graph API, когда пользователь разрешает ваше приложение, вы должны сказать, что «Мне нужно status_update».

person Andrew    schedule 24.06.2010
comment
извини, не понял. Вы имеете в виду Разрешите нам обновить ваше состояние в моем коде? Я просто пробую это в качестве примера, поэтому еще не поставил правильные сообщения для пользователя. - person codeObserver; 24.06.2010
comment
Когда я авторизую это приложение, мне нужно разрешение status_update - person Andrew; 26.06.2010