Вот проблема, которая сводит меня с ума на недели!
Более года я автоматически публиковал статьи своего веб-сайта на своих 2-х страницах в Facebook прямо на стене (основной поток?). Оно работало завораживающе.
Однако с марта эти публикации перешли в публикацию «Публикация-> Посетители» (извините за перевод, но мой FB на французском), поэтому они почти невидимы!
Знаете ли вы, если было изменение политики FB в отношении публикации на страницах? Я знаю, что я использую старый PHP SDK (3.1.1), но я не могу обновить из-за моего сервера, который не имеет PHP 5.6! Однако, я думаю, что если это проблема с SDK-версией, опубликовать ее будет просто невозможно …
Технически задача cron на моем веб-сервере отправляет запрос с моим идентификатором приложения FB и секретным кодом и использует мой личный токен доступа для публикации. Поскольку я являюсь администратором страниц с правами manage_pages, publish_actions, проблем не было.
Я прочитал некоторые темы, в которых говорится о «publish_pages», но чтобы использовать это, вам нужно отправить свое приложение в FB для проверки. https://stackoverflow.com/a/32143270/985357
У поддержки FB есть страница, которая объясняет различия между пользователем и маркером доступа к странице. Но непонятно
https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens
Я также пытаюсь получить токен доступа одной из моих страниц в https://developers.facebook.com/tools/explorer но когда я пытался его использовать, у меня было «(# 200) Пользователь не авторизовал приложение для выполнения этого действия».
Вот мой код:
require_once dirname(__DIR__).'/include/facebook/facebook.php'; //facebook SDK
$this->oFB = new Facebook(array(
'appId' => self::FACEBOOK_APP_ID,
'secret' => self::FACEBOOK_SECRET, 'cookie' => true));
//then
$this->oFB->api('/{MyPageId}/feed', 'post',$this->FB_params);
//with FB_params populate:
$FB_params= array('access_token' => self::FACEBOOK_ACCESS_TOKEN_PERSO,
'from' => self::FACEBOOK_APP_ID) ;
//... and ....
$FB_params['to'] = $FB::FACEBOOK_MY_PAGEID ;
$FB_params['message'] = "blabla....." ;
$FB_params['link'] = "url..." ;
/*the way I use to get my FACEBOOK_ACCESS_TOKEN_PERSO:
1- hit :
"https://www.facebook.com/dialog/oauth?client_id=".FACEBOOK_APP_ID."&redirect_uri=http://www.website.com/token.php&scope=manage_pages,publish_actions"2- hit : https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_APP_ID."&redirect_uri=http://www.website.com/token.php&client_secret=".FACEBOOK_SECRET."&code=".$_GET['code']
3- access token-> $_GET['access_token']
*/
Вам нужны Appid, App secret и токен доступа. Пожалуйста, будьте в секрете все идентификаторы
$graphUrl = 'https://graph.facebook.com/oauth/access_token?client_id='.APPID .'&client_secret='.APPSECRET.'&grant_type=fb_exchange_token&fb_exchange_token='.ACCESS_TOKEN;
$accessToken = @file_get_contents($graphUrl);
parse_str($accessToken); //get the access_token param in the string and would be named $access_token
if(!$access_token) $access_token = $accessToken;
если не может быть продлен, просто верните токен доступа с истечением 2 часов
Для того, чтобы опубликовать как страницу вашей компании, вам понадобится их идентификатор страницы.
Вот часть моего сценария, которую я использовал, чтобы все это работало. Это не codeigniter, но вы сможете увидеть, как это работает.
$config = array(
'appId' => APPID,
'secret' => APPSECRET,
);$facebook = new Facebook($config);
$facebook->setAccessToken(ACCESS_TOKEN);
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$page_id = '************'; //
$page_info = $facebook->api("/$page_id?fields=access_token");
if(!empty($page_info['access_token']) ) {
// do your code stuff
}
} catch { }
Надеюсь это работа
Других решений пока нет …