我对Facebook应用程序开发完全陌生,所以请耐心等待。
我被要求创建一个Facebook页面,其中包含一个应用程序,允许用户将照片上传到Page的一个专辑中。
我已设法创建该页面,我们称之为MyPage
。我还创建了一个应用MyApp
,我已将该应用添加到了Page的个人资料中。现在,当您在左侧(标签页)查看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
的{{1}}的iframe中收到此错误:
MyApp
即使相册ID确实正确,也会在我使用Graph API Explorer或Fatal error: Uncaught OAuthException: (#120) Invalid album id thrown in /COMPLETE_PATH/facebook-php-sdk/src/base_facebook.php on line 1033
顺便说一下,我把它放在脚本之上:
graph.facebook.com/THE_ALBUM_ID
我错过了什么?任何帮助将不胜感激。
答案 0 :(得分:2)
我发现通过Facebook API将照片上传到页面的唯一方法是将其作为页面进行。为此,您需要首先作为页面进行身份验证。要做到这一点,你必须:
manage_pages
权限拥有该网页的用户进行身份验证。请求
页面 /me/accounts?access_token=YOUR_ACCESS_TOKEN
找到相应页面的access_token
。
access_token
上传照片。如果您需要USERS将照片上传到页面,您可以与拥有该页面的用户一起获得一个长期存在的令牌并存储它以使用该令牌而不是用户令牌来上传照片。上传的照片不会以用户身份上传,但会显示在页面上传。
答案 1 :(得分:0)
您可以尝试使用CURL并直接点击图形api而不是使用SDK。以下对我有用。我有一个函数,我传入一个名为image的变量,它是一个令牌数组,文件(文件的完整路径)和相册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_pages
和upload_photos
权限。