2014-02-19 2 views
4

Я пытаюсь опубликовать на стене пользователя Facebook из своего приложения. Пользователь предоставил разрешения для приложения для публикации на стене, и у меня есть идентификатор пользователя в db. Мне нужно отправить сообщение автоматически, без повторного входа в систему.Facebook PHP SDK - Как получить токен доступа?

Мой код:

try{ 
    require_once(dirname(__FILE__) . '\lib\facebook-php\src\facebook.php'); 
} 
catch(Exception $o){ 
     print_r($o); 
} 
$config = array(
    'appId' => '123456', 
    'secret' => '454544', 
    'allowSignedRequest' => false // optional but should be set to false for non-canvas apps 
); 

$facebook = new Facebook($config); 
$user_id = $facebook->getUser(); 
$user_id = '123456'; 

if($user_id) { 

    // We have a user ID, so probably a logged in user. 
    // If not, we'll get an exception, which we handle below. 
    try { 

     $ret_obj = $facebook->api('/me/feed', 'POST', 
      array(
       'access_token' => $facebook->getAccessToken(), 
       'link' => 'www.example.com', 
       'message' => 'Posting with the PHP SDK!' 
      )); 
     echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>'; 

     // Give the user a logout link 
     echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>'; 
    } catch(FacebookApiException $e) { 
     // If the user is logged out, you can have a 
     // user ID even though the access token is invalid. 
     // In this case, we'll get an exception, so we'll 
     // just ask the user to login again here. 
     var_dump($e); 
     $login_url = $facebook->getLoginUrl(array(
      'scope' => 'publish_stream' 
     )); 
     echo 'Please <a href="' . $login_url . '">login.</a>'; 
     error_log($e->getType()); 
     error_log($e->getMessage()); 
    } 
} else { 

    // No user, so print a link for the user to login 
    // To post to a user's wall, we need publish_stream permission 
    // We'll use the current URL as the redirect_uri, so we don't 
    // need to specify it here. 
    $login_url = $facebook->getLoginUrl(array('scope' => 'publish_stream')); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 

} 

Это бросает An active access token must be used to query information about the current user. ошибку и просит для входа в систему. После того, как я щелкнул логин, сообщение опубликовано.

Как я могу получить токен доступа с идентификатором пользователя без входа пользователя в систему?

+0

версии Примечания: Приведенный выше код был заменен SDK V4. – Raptor

ответ

7

Это происходит, когда активный маркер доступа не доступен во время вызова конечного API точки /me

Есть два решения, чтобы получить буровую установку этого

  • используйте идентификатор пользователя вместо/меня

  • установить доступа маркер перед отправкой апите вызов

Для первого вы можете сделать вызов, как

ret_obj = $facebook->api('/'.$user_id.'/feed', 'POST', 
      array(
       'link' => 'www.example.com', 
       'message' => 'Posting with the PHP SDK!' 
      )); 

Вам не нужно отправить 'access_token' => $facebook->getAccessToken(),

Второго варианта сделать, как

$access_token = $facebook->getAccessToken(); 
$facebook->setAccessToken($access_token); 
ret_obj = $facebook->api('/me/feed', 'POST', 
       array(
        'link' => 'www.example.com', 
        'message' => 'Posting with the PHP SDK!' 
       )); 

ПРИМЕЧАНИЕ: publish_stream объем должен быть отправлен при входе в систему

Deprecation Примечание: publish_stream был заменен publish_actions, проверить facebook документа для permission

+0

Спасибо, кажется, отлично работает! – user1049961

0

вы должны получить разрешение. Проверьте это здесь

https://developers.facebook.com/docs/reference/login/

+0

У меня есть вход в Facebook на сайте. Пользователь уже предоставил разрешения для приложения для публикации на стене. Нужно ли мне другое разрешение? – user1049961

+0

в вашем URL-адресе для входа вы должны передать разрешения в ** SCOPE ** проверить этот код моего логина. '$ login_url = $ facebook-> getLoginUrl (array ('scope' => 'photo_upload, read_mailbox'));' –

+0

может быть вам нужно получить доступ ** к полномочиям ** publish_actions ** в вашем приложении. , так что это будет '$ login_url = $ facebook-> getLoginUrl (array ('scope' => 'public_actions'));' –

Смежные вопросы