2011-08-21 51 views
4

我完全新的Facebook應用程序的開發,所以請多多包涵。Facebook上創建應用程序的頁面將照片上傳至網頁的相冊

我被要求創建一個Facebook頁面,其中有一個應用程序可以讓用戶將照片上傳到頁面的相冊中。

我設法創建了頁面,我們稱之爲MyPage。我還創建了一個應用程序MyApp,我已經添加了應用到頁面的個人資料。現在,當您查看MyPage輪廓,在左側(標籤),你會發現已經MyApp

MyApp指向我的託管帳戶上的一個php頁面。它有一個文件域的表單:

<form action="<?=$PHP_SELF;?>" enctype="multipart/form-data" method="post"> 
    <input name="MAX_FILE_SIZE" type="hidden" value="10000000" /> 
    <input id="fileSelect" name="fileSelect" type="file" /> 
    <input name="submit" type="submit" value="Upload" /> 
</form> 

和下面的代碼來處理上傳的文件,也應該投入MyPage的專輯:

if(count($_FILES)){ 
    $name = ereg_replace(' ', '_', basename($_FILES['fileSelect']['name'])); 
    $uploadFile = "uploads/" . $name; 
    if (move_uploaded_file($_FILES['fileSelect']['tmp_name'], $uploadFile)) { 
    $facebook->setFileUploadSupport(true); 

    $args = array('message' => 'Photo Caption'); 
    $args['image'] = '@' . realpath($uploadFile); 

    $data = $facebook->api('/THE_ALBUM_ID/photos', 'post', $args); 

    //get rid of the original on the main server 
    unlink($uploadFile); 
    } 
} 

然而,當‘上傳’按鈕提交後,我得到這個錯誤,就在MyPage的IFRAME爲MyApp

Fatal error: Uncaught OAuthException: (#120) Invalid album id thrown in /COMPLETE_PATH/facebook-php-sdk/src/base_facebook.php on line 1033 

即使壽相冊ID確實是正確的,並顯示在我使用圖形API Explorer或graph.facebook.com/THE_ALBUM_ID

順便說一句,我把這個腳本的頂部:

require 'facebook-php-sdk/src/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'THE_APP_ID', 
    'secret' => 'THE_APP_SECRET', 
)); 

我缺少什麼?任何幫助將非常感激。

回答

0

您可以嘗試使用CURL並直接點擊圖表API,而不是使用SDK。下面的作品適合我。我有通過在一個變量被稱爲圖像是令牌,文件(到文件全路徑)的陣列的功能,和專輯的ID,然後使用下面的代碼。

$args = array( 
    'access_token' => $image['token'], 
    'message' => 'Photo Caption', 
    'no_story' => 1 
); 
$args['image'] = '@' . $image['file']; 
$target_url = "https://graph.facebook.com/".$image['album_id']."/photos"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$target_url); 
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);  
curl_exec($ch); 
curl_close($ch); 

你需要確保你有授予您傳遞到呼叫的令牌manage_pagesupload_photos權限。

+0

想澄清您的解決方案。當你說「授予你傳入的令牌」時,你是指用戶的令牌訪問我的應用程序?或者這是服務器端擁有頁面所有者憑證的令牌? – mateuscb

+0

注意:權限應該是'photo_upload'而不是'uploads_photos'。 – Raptor

+0

cURL方法不起作用。照片上傳到用戶的相冊,而不是正確的相冊ID被選中和相關的權限被授予。此外,令牌由頁面管理員生成。 – Raptor

2

我發現通過Facebook API將照片上傳到頁面的唯一方法是將其作爲Page。爲了做到這一點,您需要首先進行身份驗證。要做到這一點,您必須:

  1. 通過manage_pages權限對擁有該頁面的用戶進行身份驗證。
  2. 請求與

    /me/accounts?access_token=YOUR_ACCESS_TOKEN

  3. 頁面找到對應的頁面access_token

  4. 使用該access_token上傳照片。

如果您需要用戶上傳照片到頁面,您可以獲得擁有該頁面的用戶的長時間令牌,並將其存儲爲使用該令牌而不是用戶令牌上傳照片。上傳的照片不會以用戶身份上傳,而會以頁面的形式上傳。

相關問題