Facebook为页面创建应用程序,用于上传照片到页面的相册。

4
我完全是个Facebook应用程序开发新手,请多多包涵。
我被要求创建一个Facebook页面,其中包括一个应用程序,让用户可以将照片上传到该页面的相册之一。
我已经成功创建了该页面,我们称之为“我的页面”。我还创建了一个名为“我的应用”的应用程序,并将其添加到页面的配置文件中。现在,当您查看“我的页面”配置文件时,在左侧(选项卡)中,您将已经找到“我的应用”。
“我的应用”指向我的托管帐户上的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);
    }
}

然而,当点击“上传”按钮时,我在“MyApp”的MyPage的iframe中收到了以下错误提示:
Fatal error: Uncaught OAuthException: (#120) Invalid album id thrown in /COMPLETE_PATH/facebook-php-sdk/src/base_facebook.php on line 1033

即使相册ID是正确的,并且在使用Graph 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',
));

我错过了什么?任何帮助都将不胜感激。
2个回答

2
我发现通过Facebook API上传照片到页面的唯一方法是以页面身份进行操作。为了做到这一点,您需要首先作为页面进行身份验证。具体步骤如下:
  1. 使用拥有“manage_pages”权限的用户进行身份验证。
  2. 请求页面信息:/me/accounts?access_token=YOUR_ACCESS_TOKEN
  3. 找到相应页面的access_token
  4. 使用该access_token上传照片。
如果您需要让用户上传照片到页面,您可以获得一个长期有效的令牌,并将其存储在使用者令牌之前,以便使用该令牌上传照片。但上传的照片不会显示为用户上传,而是显示为页面上传。

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);

你需要确保在调用时传入的 token 已被授权 manage_pagesupload_photos 权限。


想要澄清一下你的解决方案。当你说“授予传递的令牌”时,你是指用户访问我的应用程序的令牌吗?还是这将是具有页面所有者凭据的服务器端令牌? - mateuscb
注意:权限应该是photo_upload而不是uploads_photos - Raptor
cURL方法不起作用。尽管选择了正确的相册ID并授予了相关权限,但照片被上传到用户的相册中。此外,令牌是由页面管理员生成的。 - Raptor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接