如何发布到Facebook页面(如何获取页面访问令牌+用户访问令牌)

时间:2012-01-19 08:23:39

标签: facebook access-token

当我将我的应用程序用作不同的Facebook用户(不是页面管理员)时,我正试图找出如何发布到Facebook页面墙。

我在测试时收到一系列错误消息: 例外:200:用户未授权应用程序执行此操作

页面管理员访问了该应用并接受了以下权限:publish_stream,manage_pages,offline_access

以下是我打算使用的代码:

// Insert Page Administrators ID here 
// This user is not the same user that is currently logged in and using the app
// This user is the page administrator who has authorised: 
// - manage_pages
// - offline_access
// - publish_stream

$user_id = '123456789'; 

// Insert Page ID here
$page_id = '123456789'; 

$accounts = $facebook->api('/'.$user_id.'/accounts');

foreach($accounts['data'] as $account)
{
  if($account['id'] == $page_id)
  {
    $page_access_token = $account['access_token'];
    echo "<p>Page Access Token: $page_access_token</p>";
  }
}

// publish to the wall on your page
try
{
  $result = $facebook->api(array( "uid" => $page_id, 
                                  "method" => "stream.publish",
                                  "access_token" => $page_access_token,
                                  "message" => $message, ));
}
catch (FacebookApiException $e)
{
  error_log('FB Error: Could not post on Page Wall. Page ID: ' . $page_id);
  error_log('FB Error Message: ' . $e);
}

注意:上面的代码中可能存在PHP错误,因为我只是动态地拼接它,但它不是我需要纠正的PHP错误,而是更多我逻辑上理解我的意思如何去做过程

问题: 没有页面管理员的活动用户访问令牌,我无法访问$ user_id / accounts信息。

我想要达到的最终结果是: 1.)普通FB用户转到应用程序并提交表单 2.)应用程序在FB页面墙上发布消息,该消息不属于FB用户,但之前已由页面管理员授权,具有以下权限manage_pages,publish_stream和offline_access

Q1。由于页面管理员已接受适当的权限,为什么我不能只生成活动的用户访问令牌,而实际的页面管理员用户没有登录到网站?

Q2。当我以不同的用户身份登录Facebook时,有没有办法可以获得与Page Administrator user_id相当的/ $ user_id / accounts?(这就是为什么我不使用/ me / accounts)?

Q3。请确认我对需要页面访问令牌发布到页面墙的理解是正确的(或者我是否需要页面管理员的用户access_token - 请参阅Q1)?

Q4。任何人都有一个方便的资源,每种类型的access_token可以实际访问什么?

如果您需要更多信息,请告诉我们。 我花了最后几天研究这个问题而且我被卡住了。

谢谢!

2 个答案:

答案 0 :(得分:3)

  1. 您可以向{@ 1}}页面管理员询问manage_pages。我在我的制作应用程序中执行此操作,以便能够将预定的帖子发布到页面上。壁。

  2. 不。不可能。这就是要求权限的全部内容。为什么不是每个人都可以管理其他人的页面。如果您可以管理任何人的页面而没有他们授予您访问权限,您能成像吗?!?

  3. 要将页面作为页面发布,您需要一个页面访问令牌。要以用户身份发布到网页墙,您需要一个用户访问令牌。

  4. 是的,请参阅:https://developers.facebook.com/docs/reference/api/permissionshttps://developers.facebook.com/docs/authentication/

  5. 如果您对其中任何一个有其他疑问,请提出新问题。对于stackoverflow的用户来说,在一个问题中遇到4个问题然后被问到每个问题的后续问题都不公平。

答案 1 :(得分:2)

我在Django做过:

获取Page_access_token的步骤:

facebook_page_id=360729583957969  
graph = GraphAPI(request.facebook.user.oauth_token.token)                     
page_access_token=graph.get(facebook_page_id+'?fields=access_token')  

这样您就可以获得页面访问令牌。

你可以在Fb GraphAPIexplorer上查看这个东西:

http://developers.facebook.com/tools/explorer  
GET URL: fb_page_id?fields=access_token   

例如:360729583957969?fields=access_token     这将给你page_access_token