Facebook 如何使用graph api将照片发布到粉丝页面?

Facebook 如何使用graph api将照片发布到粉丝页面?,facebook,facebook-graph-api,facebook-php-sdk,facebook-apps,facebook-timeline,Facebook,Facebook Graph Api,Facebook Php Sdk,Facebook Apps,Facebook Timeline,我想发布一张照片到一个球迷的页面(作为一个正常的时间轴状态饲料),我能够管理 我的应用获得了以下权限: email,publish_actions,read_stream,manage_pages 它对我自己的时间轴非常有效。我还可以在页面的时间线上发布一张照片。但是为什么不从应用程序中呢 我还说,这是许可证 照片上传 不会有任何效果。也许Facebook已经删除了它 我的应用程序使用Facebook PHP-SDK 如果我尝试将照片上载到粉丝页面,它会返回一个异常: Fatal error

我想发布一张照片到一个球迷的页面(作为一个正常的时间轴状态饲料),我能够管理

我的应用获得了以下权限:

email,publish_actions,read_stream,manage_pages
它对我自己的时间轴非常有效。我还可以在页面的时间线上发布一张照片。但是为什么不从应用程序中呢

我还说,这是许可证 照片上传 不会有任何效果。也许Facebook已经删除了它

我的应用程序使用Facebook PHP-SDK

如果我尝试将照片上载到粉丝页面,它会返回一个异常:

 Fatal error: Uncaught OAuthException: (#200) Subject does not have permission to post photos on this page thrown
以下是我如何从风扇页面获取访问令牌:

public function getPageData()
    {
        $arRS = $this->facebook->api('/me/accounts');

        $pageData = new CFacebookClientPageData();
        foreach ($arRS['data'] as $dataSet)
        {
            if (array_key_exists('name', $dataSet) && preg_match('/any\s*fan\s*page/i', $dataSet['name']))
            {
                $pageData->sCategory = $dataSet['category'];
                $pageData->sName = $dataSet['name'];
                $pageData->sAccessToken = $dataSet['access_token'];
                $pageData->arPermissions = $dataSet['perms'];
                $pageData->iPageId = $dataSet['id'];
            }
        }

        return $pageData;
    }
下面是我如何发布的:

public function uploadPhoto(CFacebookClientPageData $user, CFacebookPhotoData $photo)
{
    return $this->facebook->api('/' . $user->iPageId . '/photos',
                                'POST',
                                array(
                                      'source' => '@' . realpath($photo->sLocalPath),
                                      'message' => $photo->sMessage,
                                      'access_token' => $this->sAccessToken
                                      )
                                );
}
在其他一些文件中,我这样称呼它:

$fb = new CFacebookClient($sAppId, $sSecret);
$fb->init();
$fb->setFileUpload(true);
$fb->init();

$user = $fb->getPageData();
$fb->setAccessToken($user->sAccessToken);
$photo = new CFacebookPhotoData();
$photo->sLocalPath = 'E:\php\www\logo.png';
$photo->sMimeType = 'image/png';
$photo->sMessage = utf8_encode('posted from my fresh app :-)');
var_dump($fb->uploadPhoto($user, $photo));

编辑:如我在下面的评论中所述解决:我在代码段中修复了它,但在代码中没有修复。

我猜您没有使用您可以通过为您的应用程序接收的页面访问令牌

/me/accounts
文件中说

  • 具有publish_actions权限的用户访问令牌可用于代表此人发布新帖子
  • 具有publish_actions权限的页面访问令牌可用于代表该页面发布新帖子

“access\u token”=>$this->sAccessToken不应该是“access\u token”=>$user->sAccessToken那么你的
setAccessToken
方法是什么样子的?
setAccessToken
只是
$this->sAccessToken
的一个简单的设置程序,关于“访问令牌”=>$user->sAccessToken,我想这可能是关键,我很抱歉。对于上面的代码片段,我忘记将
$pageData
替换为
$user
。我已经编辑过了。因此,
$user->sAccessToken
$this->accessToken
相同(正如我在上一段代码中设置的)。