【问题标题】:posting photo to facebook raises exception将照片发布到 Facebook 引发异常
【发布时间】:2011-12-13 18:53:49
【问题描述】:

我编写了一个将照片发布到用户墙上的函数,它引发了以下异常

Fatal error: Uncaught OAuthException: A user access token is required to request this resource. thrown in C:\xampp\htdocs\upd8r\application\helpers\base_facebook.php on line 1039

这是我的代码——我错过了什么?

function facebook_img_post($fb_id,$data){


        $this->load->helper('facebook');

        $this->load->model('mmaster');
        $globalSettings = $this->mmaster->getGlobalSettings('1');

        // Create our Application instance.
        $this->facebook = new Facebook(array(
          'appId'  => $globalSettings['facebook_id'],
          'secret' => $globalSettings['facebook_secret'],
          'cookie' => false
        ));

        $this->facebook->setFileUploadSupport(true);


        $this->facebook->api("/".$fb_id."/photos",'post', array(
                'message'=> $data['message'],
                'source' => $data['source']
            )
        );





        //new fb post

    }

更新

这是用户注册时使用的链接,显示所有请求的权限

$data['loginUrl']   =   $this->facebook->getLoginUrl(array('scope' => 'read_stream,publish_stream,status_update,offline_access'))

更新 2

我换掉了 api 并尝试使用 curl 进行更多控制,显然我需要一个用户访问令牌 - 即使我正在检索和使用应用程序访问令牌 - 显然有两个不同的。

【问题讨论】:

标签: php facebook


【解决方案1】:

您需要请求具有publish_stream 权限的访问令牌

查看此链接:

更新

new Facebook创建实例后,您必须重定向到FB进行用户身份验证:

$loginUrl = $this->facebook->getLoginUrl(array('scope' => 'publish_stream, offline_access'));
echo '<script>top.location.href="'.$loginUrl.'"</script>';

第二次更新

如果您以这种方式执行所有操作并且问题仍然存在,那么您可能将图像数据传递给 curl 不正确。您必须在图像路径前加上 @ 以通知 CURL 它必须将图像作为多部分数据发送。

【讨论】:

  • 很抱歉多次发布相同的内容,我遇到了连接问题
  • 我已经包含了我如何请求权限 - 它是一个现有的应用程序,已经有流帖子发布
  • 那么可能还有其他原因,上次我遇到了同样的问题。据我了解 $data['source'] 包含图像的路径,对吗?您是否在路径前加上 @ 符号?
  • 它包含文件系统路径,例如.. @C:\xampp\htdocs\upd8r\/img_uploads/webcam/finish.png
  • 您是否将 fb 连接器类的 fileUpload 属性设置为 true?像这样:$config = array ('appId' =&gt; FB_APPID, 'secret' =&gt; FB_SECRET, 'fileUpload' =&gt; true);$fb = new Facebook($config);
【解决方案2】:

您需要让用户授予您 publish_streammanage_page 权限,以便在您获得 loginURL 时也这样做,例如

$loginUrl = $facebook->getLoginUrl(
    array(
        'scope' =>'user_status,user_photos,status_update,manage_pages,publish_stream,offline_access',
        'redirect_uri'  => $fbconfig['baseurl']
        )
);

这里有更多信息: FB权限:http://developers.facebook.com/docs/reference/api/permissions/

连接FB的教程,包括请求权限:http://thinkdiff.net/facebook/php-sdk-3-0-graph-api-base-facebook-connect-tutorial/

【讨论】:

  • 我已经这样做了。用户已授予权限和offline_access 以及
  • 您是否要求获得publish_stream 权限以及offline_access 权限?
  • 我已编辑代码以添加offline_access 权限,以显示您需要在哪里请求publish_stream 权限。
  • 我已经包含了我如何请求权限 - 它是一个现有的应用程序,已经有流帖子发布
  • 自从我不得不这样做已经有一段时间了,所以我已经用我在我的应用程序中请求的所有权限更新了我的帖子......我认为你需要的另一个是 manage_pages,但为了以防万一,我把它们都包括在内了。
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多