Facebook Graph API PHP SDK размещение на странице в виде страницы
В конечном итоге попробуйте с PHP, если он не сработает, я попробую с JS. Поэтому моя цель - опубликовать на странице FB "имя страницы" через PHP: это то, что я хочу получить
![View 1]()
Но все, что я получаю, показано ниже. Кроме того, он отображается ТОЛЬКО этому профилю (а не друзьям /ppl, которые любят /etc.).
![View 2]()
Это мой текущий код
function post_facebook($data=null, $redir = null){
$result = "";
require_once (ROOT. "/apps/configuration/models/ConfigurationItem.php");
require_once (ROOT . "/components/facebook/facebook.php");
$this->ConfigurationItem = new ConfigurationItem($this->getContext());
$row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_login');
$apiid=$row['value']; <= Correct apiid
$row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_pass');
$secret=$row['value']; <= Correct secret key
$facebook = new Facebook(array(
'appId' => $apiid,
'secret' => $secret,
'cookie' => true,
));
$session = $facebook->getSession();
$me = null;
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
$message=$data['facebook_text'];
$attachment = array(
'message' => $data['facebook_text'],
'name' => $data['name'],
'link' => $this->getLinkToLatestNews(),
'description' => '',
);
try {
$facebook->api('/PAGE ID/feed/', 'post', $attachment);
$result = "Facebook: Sent";
} catch (FacebookApiException $e) {
$result = "Facebook: Failed";
error_log($e);
}
} else {
$login_url = $facebook->getLoginUrl();
header("Location: ".$login_url);
exit;
}
echo $result;
exit;
//return $result;
}
Что я делаю неправильно? Я не смог найти ничего в документации API/top google, только для JS. Спасибо за помощь!
Ответы
Ответ 1
Вам нужно убедиться, что вы запрашиваете разрешение "manage_pages" для пользователя. После того, как вы это сделаете, вы можете сделать $facebook->api('/me/accounts')
, и вы получите ответную марку (вместе с информацией о странице), которую вы можете использовать для публикации на странице в качестве страницы.
Ответ 2
Я боролся с этим большую часть дня, а затем обнаружил, что не использовать setAccessToken (page_access_token) - единственное, что мешает мне работать для меня. Я обнаружил это в post stackflow от 18 месяцев назад. Я поставлю свое решение здесь, для тех, у кого есть этот вопрос в будущем:
protected $scope = "email,publish_stream,manage_pages";
$url = "{$api_url}/{$fbusername}/accounts?access_token=".$access_token;
$response = json_decode(file_get_contents($url));
foreach($response->data as $data) {
try
{
$res = $this->SDK->setAccessToken($data->access_token);
$res = $this->SDK->api(
"{$data->id}/feed",
"POST",
array('link' => 'www.example.com',
'message' => 'This is a test message from php',)
);
log::debug(__FUNCTION__, print_r($res,true));
}
catch (Exception $e)
{
log::debug(__FUNCTION__, $e->getType().": ".$e->getMessage());
}
}