2012-07-17 45 views
0

我想我的應用程序上發佈的照片​​,用戶已註冊我的應用程序publish_stream許可,目前正在從Facebook斷開。如何使用應用程序訪問令牌代表用戶發佈照片? (不與用戶的訪問令牌)

文檔https://developers.facebook.com/docs/publishing/說:

要發佈一個 '照片' 對象,你需要

  • 有效的訪問令牌
  • publish_stream許可

我嘗試了HTTP POST請求: https://graph.facebook.com/<USER_ID>/photos?access_token=<APPLICATION_ACCESS_TOKEN>
POST param : "url":"<link_to_some_picture>"

,我得到一個例外: content={"error":{"message":"A user access token is required to request this resource.","type":"OAuthException","code":102}}

代表的用戶發佈的照片​​我無法通過用戶訪問令牌...爲什麼我可以張貼的聯繫,但不是相片與我的應用程序訪問令牌?您正在使用的應用程序訪問令牌

回答

0

你的標題狀態 - 你得到明確的錯誤狀態的問題。你需要一個用戶訪問令牌。

您需要延長您的用戶訪問令牌,以便在沒有連接到Facebook來進行開/她代表他的行動。

下面是關於過期令牌的處理,以及如何刷新他們一個很好的信息資源 -

https://developers.facebook.com/docs/authentication/access-token-expiration/

+0

我明白你的意思,但在我的應用我希望我的用戶登錄一次。 爲什麼我們可以張貼在代表與應用程序的訪問令牌的用戶的鏈接或狀態,我們不能用這種令牌發佈照片? – 2012-07-17 09:54:07

+0

@tony,你誤會了 - 應用程序訪問令牌不能代表用戶創建狀態更新。使用應用訪問令牌,您可以將更新張貼爲頁面 - 但不能代表「普通」用戶。 – Lix 2012-07-17 09:56:12

+0

你是對的我的意思是狀態更新與「通過我的應用程序」。爲什麼與照片不一樣? – 2012-07-17 10:07:59

0

當用戶註冊您的應用程序,那麼你可以存儲用戶的用戶訪問令牌後,您可以使用的訪問令牌以代表用戶發佈。當用戶下次來到您的應用程序時,您可以更新該訪問令牌。 您可以使用下面的函數來獲得更多的訪問令牌:

public function getExtendedAccessToken(){ 

    try { 
     // need to circumvent json_decode by calling _oauthRequest 
      // directly, since response isn't JSON format. 
     $access_token_response = 
      $this->_oauthRequest(
       $this->getUrl('graph', '/oauth/access_token'), 
       $params = array( 'client_id' => $this->getAppId(), 
            'client_secret' => $this->getApiSecret(), 
            'grant_type'=>'fb_exchange_token', 
            'fb_exchange_token'=>$this->getAccessToken(), 
          )); 

    } catch (FacebookApiException $e) { 
     // most likely that user very recently revoked authorization. 
     // In any event, we don't have an access token, so say so. 
     return false; 
    } 

    if (empty($access_token_response)) { 
     return false; 
    } 

    $response_params = array(); 
    parse_str($access_token_response, $response_params); 
    if (!isset($response_params['access_token'])) { 
     return false; 
    } 

    return $response_params['access_token']; 
} 
+0

老兄,請格式化您的貼子多一點小心 - 不是一切都是「代碼」。 – CBroe 2012-07-18 09:05:49

+0

但在我的應用程序中,用戶只能登錄一次,以授權應用程序在登錄用戶從Facebook斷開連接(使用FB.logout())之後在其牆上發佈應用程序。 用戶永遠不會再登錄 – 2012-07-19 12:56:58

+0

_「用戶永遠不會再登錄」_ - 這將不再工作; offline_access已棄用;這是_intentional_行爲。你不應該能夠構建一個應用程序(可以繼續使用用戶名直到永遠)。長期訪問令牌有效期爲60天,之後,用戶將再次與您的應用交互。 – CBroe 2012-07-25 12:55:26

0
$fid = $row[1]; 
     echo "fid = $fid\n"; 
     $message =$row[2]; 
     echo "msg = $message\n"; 
     $friends = $facebook->api("/$user/friends?fields=id"); 
     $args= array(

       'app_id' => $facebook->getAppId(), 
       'to' => $fid, 
       'link' => 'http://www.facebook.com', 
       'message'=>$message, 

     ); 
     $post_id = $facebook->api('/fid /feed', 'POST', $args); 
     var_dump($post_id); 
相關問題