【问题标题】:how to post a photo to a fan page using graph api?如何使用图形 API 将照片发布到粉丝页面?
【发布时间】:2014-04-17 23:58:51
【问题描述】:

我想将一张照片发布到我能够管理的粉丝页面(作为正常的时间线状态提要)。

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

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

编辑:正如我在下面的评论中提到的那样解决了:我在 sn-p 中修复了它,但在我的代码中没有。

【问题讨论】:

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


    【解决方案1】:

    我猜你没有使用页面访问令牌,你可以通过

    为你的应用程序接收此页面
    /me/accounts
    

    https://developers.facebook.com/docs/graph-api/reference/page/feed/#publish 的文档指出

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

    【讨论】:

    • 不应该是 'access_token' => $this->sAccessToken 是 'access_token' => $user->sAccessToken
    • 那么您的setAccessToken 方法是什么样的?
    • setAccessToken 只是$this->sAccessToken 的简单设置器。
    • 那么,关于 'access_token' => $user->sAccessToken 我认为这可能是关键
    • 对不起。对于上面的 sn-p,我忘记将 $pageData 替换为 $user。我已经编辑过了。所以,$user->sAccessToken$this->accessToken 相同(正如我在上一个 sn-p 中设置的那样)。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2012-08-21
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多