经过5天的试验和错误后,我非常接近我想做的事情。
有一个例外。我目前的代码只能使用一次。
这是方案,
我正在尝试使用facebook sdk {facebook}页面Add A Page Tab
。
我当前的代码以某种方式工作,但它只适用于在facebook中创建的第一个Facebook页面,如果我尝试为其他页面添加页面选项卡,则会抛出以下错误:
(#200) User does not have sufficient administrative permission for this action on this page
我不明白为什么会这样。这个错误通常意味着我没有页面访问令牌,但如果是这种情况,我的代码不会在第一页上工作,但它确实可以工作!
任何人都有机会看看我当前的代码,看看我做错了什么?
任何帮助将不胜感激。
我目前的代码如下:
这是获取访问令牌的部分,也是表单提交后的部分:
// Set Extended Access Token
if (isset($code)) {
$fb->setExtendedAccessToken();
//Get access short live access token
$accessToken = $fb->getAccessToken();
// Exchange token
$fb->api('/oauth/access_token', 'POST',
array(
'grant_type' => 'fb_exchange_token',
'client_id' => $appId ,
'client_secret' => $secret,
'fb_exchange_token' => $accessToken
)
);
$token_url="https://graph.facebook.com/oauth/access_token?client_id=" . $appId
. "&client_secret=" . $secret
. "&code=" . $code
. "&redirect_uri=" . $returnurl;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$user_access_token = $params['access_token'];
$attachment_1 = array(
'access_token' => $user_access_token
);
}
$result = $fb->api("/me/accounts", $attachment_1);
foreach($result["data"] as $page) {
if($page["page_id"] == $page_id) {
$page_access_token = $page["access_token"];
//echo $page_access_token;
break;
}
}
//$pageIds=$fb->api('/me/accounts');
//$pageAccessToken=$pageIds["data"][1]["access_token"];
if(isset($_POST['msg']) and $_POST['msg']!=''){
try{
$message = array(
'access_token' => $page_access_token,
'message' => $_POST['msg']
);
$posturl = '/'.$_POST['pageid'].'/feed';
$posturl2 = '/'.$_POST['pageid'].'/tabs';
$fb->api($posturl2, 'POST', array(
'app_id'=>'0000000000000000000000000',
'access_token'=>$page_access_token
));
$result = $fb->api($posturl,'POST', $message);
if($result){
echo 'Successfully posted to Facebook Wall...';
}
}catch(FacebookApiException $e){
echo $e->getMessage();
}
}
这就是我在页面中填写表单中的用户页面的方式:
if(empty($pages)){
echo 'The user does not have any pages.';
}else{
echo '<form action="" method="post">';
echo 'Select Page: <select name="pageid">';
echo '<option value="">Select A Page</option>';
foreach($pages as $page){
echo '<option value="'.$page['page_id'].'">'.$page['name'].'</option>';
}
echo '</select>';
//echo 'Select Page: <select name="pageid2">';
// 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();
}
答案 0 :(得分:1)
我刚收到了与Realtime API订阅相同的错误消息。我认为这是同一个问题,你没有页面的管理员权限。如果您是主持人(例如),您仍然可以获得页面的页面令牌,但如果您不是管理员(订阅实时API,添加选项卡),则某些事情是不可能的。