【问题标题】:How to post to a Facebook Page (how to get page access token + user access token)如何发布到 Facebook 页面(如何获取页面访问令牌 + 用户访问令牌)
【发布时间】:2012-02-13 22:20:01
【问题描述】:

当我作为不同的 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

第一季度。既然页面管理员已经接受了适当的权限,为什么我不能只生成一个活动用户访问令牌,而不需要实际的页面管理员用户登录网站?

第二季度。当以其他用户身份登录 Facebook 时(这就是我不使用 /me/accounts 的原因),有没有一种方法可以获得页面管理员 user_id 的 /$user_id/accounts 等效项?

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

第四季度。任何人都有关于每种类型的 access_token 可以实际访问什么的方便资源?

如果您需要更多信息,请告诉我。 过去几天我一直在努力解决这个问题,但我陷入了困境。

谢谢!

【问题讨论】:

    标签: facebook access-token


    【解决方案1】:

    我在 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

    【讨论】:

      【解决方案2】:
      1. 您可以向页面管理员询问manage_pagesoffline_access。我在我的生产应用程序中执行此操作,以便能够将预定的帖子发布到页面的墙上。

      2. 不。不可能。这就是询问权限的全部内容。为什么不是每个人都可以管理其他人的页面。如果您可以在没有他们授予您访问权限的情况下管理任何人的页面,您能想象吗?!?

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

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

      如果您对其中任何一个问题还有其他疑问,请提出一个新问题。对于 stackoverflow 的用户来说,将 4 个问题合二为一,然后被问到每个问题的后续问题是不公平的。

      【讨论】:

      • 1.我已经请求此权限,并且可以确认页面管理员已为我的应用程序 2 启用此权限。我了解权限的需要,但我的应用程序将安装在客户端 Facebook 页面上,并且当用户创建新项目时,我我想在客户 Facebook 页面墙上发帖。因此,在尝试发布消息时,使用该应用程序的用户不是主页管理员,而只是普通用户。
      • 3.感谢您阐明页面访问令牌的用途。听起来好像我应该能够使用当前用户访问令牌发布到页面墙(由页面管理员拥有 - 已批准适当的权限 - manage_pages/offline_access)但我收到身份验证错误(我会跟踪下来并更新我的帖子) 4. 我已经从里到外阅读了这些页面,但似乎无法获得所需的答案。错误日志:未捕获异常:240:需要指定有效用户
      • 如果您对其中任何一个问题还有其他疑问,请提出一个新问题。对于 stackoverflow 的用户来说,将 4 个问题合二为一,然后被问到每个问题的后续问题是不公平的。
      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2012-01-04
      • 2012-02-22
      • 2013-06-16
      相关资源
      最近更新 更多