Facebook PHP SDK无法上传多个图像

时间:2012-07-17 04:33:40

标签: php facebook facebook-graph-api facebook-php-sdk

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

我认为这不是身份验证问题,因为我能够上传第一张图片,在检查了用户的身份验证后,我得到以下内容:

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] =>
)

感谢任何帮助。

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

1 个答案:

答案 0 :(得分:0)

如果我正确地读你的代码,你有一个$ session ['fbid'],这是album_id,对吗?要进行故障排除,我会使关联更清晰:

  • 在Facebook上查询id(不是你的数据库)
  • 成功结果(查看FacebookAPIException),
  • 将下一张照片发布到该album_id

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

在清除此消息之前,我也不会包含消息。众所周知,Facebook出于这个原因标记出版物。

这显然是一个身份验证问题,所以在每次api调用中也将access_token作为一个单独的参数推送。