1

今天我用 Facebook API 尝试了几乎所有的东西。我正在使用 PHP SDK。它可以作为用户、页面和应用程序登录。

我现在已经做了最简单的登录系统:

登录.php

$app_id = "xx";
$app_secret = "xx";
$my_url = "continue.php";
session_start();   
// TOESTEMMING VRAGEN
$code = $_REQUEST["code"];
if(empty($code)) {
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
    . $_SESSION['state'] . "&scope=manage_pages";
    echo("<script> top.location.href='" . $dialog_url . "'</script>");
}

在 continue.php 我有这个代码:

session_start();
if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {
    $graph_url = "https://graph.facebook.com/me/accounts?access_token=" 
    . $params['access_token'];

    $accounts = json_decode(file_get_contents($graph_url));
    print_r($accounts);
} else {
    echo("The state does not match. You may be a victim of CSRF.");
}

我正在登录,我可以授予访问权限,但是当我继续时,我收到以下消息:

stdClass Object ( [error] => stdClass Object ( [message] => 必须使用活动访问令牌来查询有关当前用户的信息。[type] => OAuthException [code] => 2500 ) )

我试图实现的是:在我网站的管理部分,我想创建一个对话框,管理员可以在其中将更新作为页面帐户发布到 facebook 页面。我也尝试以应用程序登录,但我不知道这是否是正确的解决方案。

我在网上找不到关于哪种解决方案需要哪种方法的教程。作为应用程序登录的优点是管理员不需要拥有 facebook 帐户。但是我可以(作为应用程序)将更新发布到 Facebook 页面吗?

对不起,我有点困惑。谢谢。

4

2 回答 2

0

在您拥有的页面上发布的基本示例(作为页面发布):

确保 user/page_owner 已对应用程序进行身份验证并已登录(通常的 FB API 方法)。用户必须拥有manage_pages该页面的(管理员)权限。

$facebook = new Facebook(... );
$user = $facebook->getUser();

获取页面访问令牌:

$page_id = 123456;
$page_info = $facebook->api('/'.$page_id.'?fields=access_token');

使用页面访问令牌发布到您的页面:

if (!empty($page_info['access_token'])) {
  $args = array(
    'access_token' => $page_info['access_token'],
    'message' => 'Testing SDK !',
  );
  $post_id = $facebook->api('/'.$page_id.'/feed', 'post', $args);
  error_log('successfully posted post id '.$post_id);
} catch (FacebookApiException $e) {
  error_log('caught exception: '. $e);
}

如果您仍然收到访问令牌错误,请记录用户访问令牌并在调试器中测试/粘贴用户访问令牌并验证manage_pages权限已启用。

另请参阅有关页面权限的有用博客文章

于 2012-10-16T22:13:43.317 回答
0

您的代码不完整。我建议你重新阅读http://developers.facebook.com/docs/howtos/login/server-side-login/

在获得页面访问令牌之前,您需要用户访问令牌

   if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $_SESSION['access_token'] = $params['access_token'];

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }
于 2012-10-16T21:49:50.227 回答