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

3

我正在尝试解决一个问题,即如何在我的应用中以不同的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.有没有办法获取/$user_id/accounts的等效值,以便作为不同用户(原因是我不使用/me/accounts)登录Facebook时使用的页面管理员user_id?
Q3.请确认我对需要页面访问令牌才能在页面墙上发布内容的理解是正确的(或者我是否需要页面管理员的用户访问令牌-参见Q1)?
Q4.是否有一个方便的资源,可以了解每种类型的访问令牌实际上可以访问什么?
如果您需要更多信息,请告诉我。 我已经花了几天时间来解决这个问题,但还是卡住了。
谢谢!
2个回答

3
  1. 您可以请求页面管理员提供 manage_pagesoffline_access 权限,这样我就能在我的生产应用程序中发布计划发布到页面的墙上。

  2. 不可能。这就是要求权限的全部意义。这也是为什么并非每个人都可以管理其他人的页面。您能想象一下,如果您可以在未获得访问权限的情况下管理任何人的页面会怎样吗?!?

  3. 要以页面身份发布帖子,您需要一个页面访问令牌。要以用户身份在页面墙上发布帖子,则需要用户访问令牌。

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

如果您对其中任何一个问题有进一步的问题,请开启新的问题。将4个问题放在一个问题中,然后要求对每个问题进行跟进并不公平对待stackoverflow的用户。


  1. 我已经请求了这个权限,并确认页面管理员已为我的应用启用了此权限。
  2. 我理解权限的必要性,但我的应用程序将安装在客户的Facebook页面上,随着用户创建新项目,我希望在客户的Facebook页面墙上发布。因此,在尝试发布消息时,使用应用程序的用户不是页面管理员,而只是普通用户。
- James
  1. 感谢澄清页面访问令牌的用途。听起来我应该能够使用当前用户的访问令牌发布到页面墙上(由页面管理员拥有-已批准适当的权限-manage_pages/offline_access),但我遇到了身份验证错误(我会追踪并更新我的帖子)。
  2. 我已经彻底阅读了这些页面,但似乎没有得到我需要的答案。 错误日志:未捕获异常:240:需要指定有效的用户。
- James
如果您对其中任何一个问题有进一步的疑问,请发起一个新的问题。对于stackoverflow的用户来说,被要求回答四个问题并且还需要回答每个问题的后续问题并不是很公平。 - DMCS

2
我曾在Django中做过以下工作:
获取页面访问令牌的步骤:
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 这将给你页面访问令牌

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接