【发布时间】:2014-07-10 10:10:27
【问题描述】:
我想弄清楚如何使用 php 获得 page access token。我所做的一切都不会返回访问令牌。
下面的第一个代码有效,它以用户身份发布消息。但我需要作为页面发布,根据文档,我需要一个页面访问令牌才能作为页面/应用发布。
所以我已将我的工作代码(第一个代码)编辑为第二个代码(返回一个空白页)。
有人可以告诉我缺少什么或我做错了什么吗?
作为用户发布的工作代码:
<?php
include_once 'inc/facebook.php';
$appId = '00000000000000000';
$secret = '00000000000000000000000000000';
$returnurl = 'https://mydomain.com';
$permissions = 'manage_pages, publish_actions';
$fb = new Facebook(array('appId'=>$appId, 'secret'=>$secret));
$fbuser = $fb->getUser();
if($fbuser){
if(isset($_POST['msg']) and $_POST['msg']!=''){
try{
$message = array(
'message' => $_POST['msg']
);
$posturl = '/'.$_POST['pageid'].'/feed';
$result = $fb->api($posturl,'POST',$message);
if($result){
echo 'Successfully posted to Facebook Wall...';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}
try{
$qry = 'select page_id, name from page where page_id in (select page_id from page_admin where uid ='.$fbuser.')';
$pages = $fb->api(array('method' => 'fql.query','query' => $qry));
if(empty($pages)){
echo 'The user does not have any pages.';
}else{
echo '<form action="" method="post">';
echo 'Select Page: <select name="pageid">';
foreach($pages as $page){
echo '<option value="'.$page['page_id'].'">'.$page['name'].'</option>';
}
echo '</select>';
echo '<br />Message: <textarea name="msg"></textarea>';
echo '<br /><input type="submit" value="Post to wall" />';
echo '</form>';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}else{
$fbloginurl = $fb->getLoginUrl(array('redirect-uri'=>$returnurl, 'scope'=>$permissions));
echo '<a href="'.$fbloginurl.'">Login with Facebook</a>';
}
echo $page_info['access_token']
?>
从浏览器查看时返回空白页面的第二/编辑代码:
<?php
include_once 'inc/facebook.php';
$appId = '0000000000000';
$secret = '000000000000000000000000000';
$returnurl = 'https://mydomain.com';
$permissions = 'manage_pages, publish_actions';
$fb = new Facebook(array('appId'=>$appId, 'secret'=>$secret));
$fbuser = $fb->getUser();
if($fbuser){
if(isset($_POST['msg']) and $_POST['msg']!=''){
try{
$page_info = $facebook->api("/$pageId?fields=access_token");
if (!empty($page_info['access_token'])) {
$message = array(
'access_token' => $page_info['access_token'],
'message' => $_POST['msg']
);
$posturl = '/'.$_POST['pageid'].'/feed';
$result = $fb->api($posturl,'POST',$message);
if($result){
echo 'Successfully posted to Facebook Wall...';
}
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}
try{
$qry = 'select page_id, name from page where page_id in (select page_id from page_admin where uid ='.$fbuser.')';
$pages = $fb->api(array('method' => 'fql.query','query' => $qry));
if(empty($pages)){
echo 'The user does not have any pages.';
}else{
echo '<form action="" method="post">';
echo 'Select Page: <select name="pageid">';
foreach($pages as $page){
echo '<option value="'.$page['page_id'].'">'.$page['name'].'</option>';
}
echo '</select>';
echo '<br />Message: <textarea name="msg"></textarea>';
echo '<br /><input type="submit" value="Post to wall" />';
echo '</form>';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}else{
$fbloginurl = $fb->getLoginUrl(array('redirect-uri'=>$returnurl, 'scope'=>$permissions));
echo '<a href="'.$fbloginurl.'">Login with Facebook</a>';
}
?>
编辑,这将生成一个访问令牌,但我不确定它是页面访问令牌还是用户访问令牌,因为所有页面的访问令牌都是相同的:
include_once 'inc/facebook.php';
$appId = '000000000000000000';
$secret = '000000000000000000000000000000';
$returnurl = 'https://mydomain.com';
$permissions = 'manage_pages, publish_actions';
$fb = new Facebook(array('appId'=>$appId, 'secret'=>$secret));
$fbuser = $fb->getUser();
if($fbuser){
if(isset($_POST['msg']) and $_POST['msg']!=''){
try{
$message = array(
'message' => $_POST['msg']
);
$posturl = '/'.$_POST['pageid'].'/feed';
//$posturl2 = '/'.$_POST['pageid'].'/tabs';
//$result2 = $fb->api($posturl2,"post", array("access_token" => $pageAccessToken, "app_id" => $appId));
$result = $fb->api($posturl,'POST',$message);
if($result){
echo 'Successfully posted to Facebook Wall...';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}
try{
$qry = 'select page_id, name from page where page_id in (select page_id from page_admin where uid ='.$fbuser.')';
$pages = $fb->api(array('method' => 'fql.query','query' => $qry));
$pageIds=$fb->api('/me/accounts');
$pageAccessToken=$pageIds["data"][1]["access_token"];
if(empty($pages)){
echo 'The user does not have any pages.';
}else{
echo '<form action="" method="post">';
echo 'Select Page: <select name="pageid">';
foreach($pages as $page){
echo '<option value="'.$page['page_id'].'">'.$page['name'].'</option>';
}
echo '</select>';
echo 'Select Page: <select name="pageid">';
foreach($pageIds as $pageId){
echo '<option value="'.$page['page_id'].'">'.$pageAccessToken.'</option>';
}
echo '</select>';
echo '<br />Message: <textarea name="msg"></textarea>';
echo '<br /><input type="submit" value="Post to wall" />';
echo '</form>';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}else{
$fbloginurl = $fb->getLoginUrl(array('redirect-uri'=>$returnurl, 'scope'=>$permissions));
echo '<a href="'.$fbloginurl.'">Login with Facebook</a>';
}
echo $pageAccessToken;
【问题讨论】:
标签: php facebook facebook-graph-api facebook-php-sdk