2013-03-07 33 views
1

我在写一个简单的Facebook页面选项卡应用程序,它允许我将消息(状态更新,链接,照片和视频)发布到多个页面。Facebook Post Link作为页面问题

我遇到了Facebook API(使用PHP SDK)尝试将各种事情发布到页面时间线的问题。

当我发布状态更新时,它成功发布在页面名称下。

$pages = $this->facebook->api('me/accounts', 'GET'); 
    $pages = json_decode(json_encode($pages), FALSE); 

    foreach ($pages->data as $page) { 
     if (in_array($page->id, $_POST['pages'])) { 

      $data = array(
       'access_token' => $page->access_token, 
       'message' => Arr::get('status', $_POST) 
      ); 

      $queryString = http_build_query($data); 

      $this->facebook->api("$page->id/feed?".$queryString, 'POST'); 
     } 
    } 

只要我再添加任何参数(即尝试张贴的链接)的职位是根据我的管理员帐户进行(即克里斯·海斯张贴链接到“第X”)。

$pages = $this->facebook->api('me/accounts', 'GET'); 
    $pages = json_decode(json_encode($pages), FALSE); 

    foreach ($pages->data as $page) { 
     if (in_array($page->id, $_POST['pages'])) { 

      $data = array(
       'access_token' => $page->access_token, 
       'link' => Arr::get('link', $_POST), 
       'message' => Arr::get('status', $_POST) 
      ); 

      $queryString = http_build_query($data); 

      $this->facebook->api("$page->id/feed?".$queryString, 'POST'); 
     } 
    } 

我不知道这里发生了什么。从字面上看,唯一改变的是添加'link'参数。如果有人能帮助我,我将不胜感激!

编辑我已经获得的权限包括:电子邮件,user_about_me,user_likes,user_birthday,manage_pages,publish_stream

的问候, 克里斯

+0

首先,写出来的使用的实际的access_token,并把它通过调试工具:HTTPS

中的API调用的第三个参数,我能够删除行发送数据后: //developers.facebook.com/tools/debug – CBroe 2013-03-07 18:04:49

+0

它表示它是我的应用程序的访问令牌,有效期为一小时,具有以下许可:create_note电子邮件manage_pages photo_upload publish_actions publish_stream share_item status_update user_about_me user_birthday user_likes video_upload。它有我的用户ID与它关联,应该吗? – 2013-03-07 18:10:23

+0

不,它不应该 - 你不想以用户身份发布,而是以页面的形式发布。所以得到一个页面访问令牌。 – CBroe 2013-03-07 18:14:22

回答

0

我发现在另一篇文章的答案。

$pages = $this->facebook->api('me/accounts', 'GET'); 
    $pages = json_decode(json_encode($pages), FALSE); 

    foreach ($pages->data as $page) { 
     if (in_array($page->id, $_POST['pages'])) { 

      $this->facebook->setAccessToken($page->access_token); 

      $data = array(
       'access_token' => $page->access_token, 
       'name' => 'Facebook API: Posting As A Page', 
       'link' => 'https://www.webniraj.com/2012/08/09/facebook-api-posting-as-a-page/', 
       'caption' => 'The Facebook API lets you post to Pages you own automatically - either as real-time updates or in the case that you want to schedule posts.', 
       'message' => 'Check out my new blog post!' 
      ); 

      $queryString = http_build_query($data); 

      $this->facebook->api("$page->id/feed?".$queryString, 'POST'); 
     } 
    } 

关键是通过Facebook SDK设置页面访问令牌。这可能是因为我使用别处的库来将访问令牌设置为用户的;我猜库必须覆盖作为参数发送的令牌。

$this->facebook->setAccessToken($page->access_token); 

参考:Posting to a Facebook Page as the Page (not a person)


编辑:我刚刚发现的另一个问题是,我正在建的查询字符串自己和追加到API端点,就像这样:

$this->facebook->api("$page->id/feed?".$queryString, 'POST'); 

你应该做的是发送$ data数组作为第API调用的参数税务局:

$this->facebook->api("$page->id/feed", 'POST', $data); 

的PHP SDK查找在$数据的“ACCESS_TOKEN”参数,因为我没有这个数组中发送它没有找到它(并因此默认为使用我以前设置的用户访问令牌)。

$this->facebook->setAccessToken($page->access_token);