Facebook的PHP SDK无法上传多个图像

问题描述:

我遇到了使用最新的Facebook PHP SDK上传图片到Facebook上的用户相册的问题。我可以上传一张图片,但在第一张图片上传后,它不会让我上传第二张图片(我已经使用与第一张图片相同的图片以及完全不同的图片进行了尝试)。Facebook的PHP SDK无法上传多个图像

我认为它不是一个认证的问题,因为我能够上传第一图像和检查什么用户被认证后,我得到如下:

Array (
    [data] => Array (
     [0] => Array (
      [installed] => 1 
      [status_update] => 1 
      [photo_upload] => 1 
      [video_upload] => 1 
      [email] => 1 
      [create_note] => 1 
      [share_item] => 1 
      [publish_stream] => 1 
      [publish_actions] => 1 
      [user_likes] => 1 
      [user_photos] => 1 
     ) 
    ) 
) 

这是我目前的代码通过上传自己的形象:

<?php 
    $mee = $facebook->api('/me'); 
    //echo $mee['name']; // test to make sure FB is connected 
    $item = '202'; 
    $filename = 'bc2a846f1bfafa8d811390089a91bcfa.jpeg'; 

    $qry = "SELECT albumID FROM os_users WHERE user_fbid = '".$_SESSION['fbid']."'"; 
    $result = mysql_query($qry); 
    $alb = mysql_fetch_assoc($result); 

    // Check if Album already exists 
    if($alb['albumID'] != '0'){ 
     $album_id = $alb['albumID']; 
    } else { 
     echo 'Creating Album'; 
     //Create an album 
     $album_details = array(
      'message' => 'Album Message', 
      'name' => 'Album Name' 
     ); 

     $create_album = $facebook->api('/me/albums', 'post', $album_details); 

     // Get album ID of the album you've just created 
     $album_id = $create_album['id']; 

     $qry = "UPDATE scav_users SET user_albumid = '".$album_id."' WHERE user_fbid = '".$_SESSION['ufbid']."'"; 
     $result = mysql_query($qry); 
    } 

    // Upload Image 
    $facebook->setFileUploadSupport(true); 
    $photo_details = array(
     'message' => '#'.$item.': Item Description' 
    ); 
    $photo_details['image'] = '@' . realpath('../uploads/'.$filename); 

    try { 
     $upload_photo = $facebook->api('/'.$album_id.'/photos', 'post', $photo_details); 
    } catch (FacebookApiException $e){print_r($e);} 
    //$upload_photo = $facebook->api('/me/photos', 'post', $photo_details); 
    $photo_id = $upload_photo['id']; 
    echo $photo_id; 
?> 

是这个脚本的结果后,我尝试上传另一张照片的误差如下:

FacebookApiException Object (
    [result:protected] => Array (
     [error] => Array (
      [message] => An unexpected error has occurred. Please retry your request later. 
      [type] => OAuthException 
      [code] => 2 
     ) 
    ) 
    [message:protected] => An unexpected error has occurred. Please retry your request later. 
    [string:Exception:private] => 
    [code:protected] => 0 
    [file:protected] => [locationtofile]base_facebook.php 
    [line:protected] => 1106 
    [trace:Exception:private] => Array (
     [0] => Array (
      [file] => [locationtofile][base_facebook.php 
      [line] => 810 
      [function] => throwAPIException 
      [class] => BaseFacebook 
      [type] => -> 
      [args] => Array (
       [0] => Array (
        [error] => Array (
         [message] => An unexpected error has occurred. Please retry your request later. 
         [type] => OAuthException 
         [code] => 2 
        ) 
       ) 
      ) 
     ) 
     [1] => Array (
      [function] => _graph 
      [class] => BaseFacebook 
      [type] => -> 
      [args] => Array (
       [0] => //photos 
       [1] => post 
       [2] => Array (
        [message] => #202: Item Description 
        [image] => @[locationtofile]bc2a846f1bfafa8d811390089a91bcfa.jpeg 
       ) 
      ) 
     ) 
     [2] => Array (
      [file] => [locationtofile][base_facebook.php 
      [line] => 587 
      [function] => call_user_func_array 
      [args] => Array (
       [0] => Array (
        [0] => Facebook Object (
        [appId:protected] => 435146213185130 
        [appSecret:protected] => 96797309425855946b0b495f9adf6252 
        [user:protected] => 
        [signedRequest:protected] => Array (
         [algorithm] => HMAC-SHA256 
         [code] => 2.AQBPPU0myCWfUCPt.3600.1342501200.1-100003953568312|8LHGtxCV0OZZfE-826am15ODSZo 
         [issued_at] => 1342495041 
         [user_id] => 100003953568312 
        ) 
        [state:protected] => 
        [accessToken:protected] => AAAGLw192VmoBABK5rNEsnoROQHvcFuKt720JuUV2DP20llDD1Ny9NPLE2ZBVi4WIypB5n1yfodv7VBWFTrTi0dF6Ncm3PGIxDK2yCmbJPJO14xH7C 
        [fileUploadSupport:protected] => 1 
       ) 
       [1] => _graph 
      ) 
      [1] => Array (
       [0] => //photos 
       [1] => post 
       [2] => Array (
        [message] => #202: Item Description 
        [image] => @[locationtofile]bc2a846f1bfafa8d811390089a91bcfa.jpeg 
       ) 
      ) 
     ) 
    ) 
    [3] => Array (
     [file] => [locationtofile][uploadtoFB.php 
     [line] => 44 
     [function] => api 
     [class] => BaseFacebook 
     [type] => -> 
     [args] => Array (
      [0] => //photos 
      [1] => post 
      [2] => Array (
       [message] => #202: Item Description 
       [image] => @[locationtofile]bc2a846f1bfafa8d811390089a91bcfa.jpeg 
      ) 
     ) 
    ) 
) 
[previous:Exception:private] => 
) 

任何帮助表示赞赏。

注意:我的应用程序仍处于沙盒阶段,我正在本地服务器上运行它。

如果我正在读你的代码,你有一个$ session ['fbid'],这是album_id,是否正确?要解决我会想办法让这种关联更为清晰:

  • 查询的Facebook的ID(不是你的DB)
  • 后成功的结果(检查FacebookAPIException)
  • 发布下一张照片,该album_id

另外,你不是用try/catch检查每个API调用,这是一个很好的做法。

在清除之前,我也不会收到消息。据了解,Facebook已经为此发布了旗帜。

这很明显是一个验证问题,所以还要将access_token作为每个api调用中的单独参数来推送。

+0

FBID实际上是当前用户的Facebook ID。我想我现在并不需要这么做,现在我想到了。 我一定会实施你的建议,看看是怎么回事。欣赏您的输入 – 2012-07-17 06:44:33

+0

好的,有一个问题是没有尝试/抓住相册ID检索周围,你应该这样做只是为了尽责/排除故障。而且,你不应该依赖你自己的数据库,但每次检查(用户可以擦除它们)。之前我有过一些奇怪的未完成状态的专辑(这是我怀疑的,在这里)。 – 2012-07-17 07:23:48

+0

哦所以它应该是persons_ID而不是albums_ID?我认为它应该是albums_id(我刚刚创建的那个)。如果我上传到该人的ID,那么使用'$ facebook-> api('/ me/photos','post',$ photo_details);'是吗? 另外,你可以帮助指导我如何推access_token?我尝试添加参数:''access_token'=> $ access_token'($ access_token是用户访问令牌)。我仍然遇到错误 – 2012-07-17 07:27:21