今天我用Facebook API尝试了几乎所有东西。我正在使用PHP SDK。它可以作为用户,页面和应用程序登录。
我现在已经制作了最简单的登录系统:
的login.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对象([error] =&gt; stdClass对象([message] =&gt;有效 必须使用访问令牌来查询有关当前用户的信息。 [type] =&gt; OAuthException [code] =&gt; 2500))
我尝试实现的目标是:在我的网站的管理员部分,我想创建一个对话框,管理员可以将更新作为页面帐户发布到facebook页面。我也尝试以应用程序身份登录,但我不知道这是否是正确的解决方案。
我无法在网上找到关于哪种解决方案需要哪种方法的教程。作为应用程序登录的优点是管理员不需要拥有Facebook帐户。但我可以(作为应用程序)向facebook页面发布更新吗?
抱歉,我有点困惑。谢谢。答案 0 :(得分: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.");
}
答案 1 :(得分: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);
}
如果仍然出现访问令牌错误,请记录用户访问令牌并在Debugger中测试/粘贴用户访问令牌,并验证manage_pages
perms是否已启用。
另请参阅此有用的blog post on Page permissions。