2015-09-01 3 views
1

У меня есть нижеприведенный фрагмент, и он работает и публикуется на странице Facebook, как моя собственная учетная запись на Facebook.Facebook SDK v5 Опубликовать как страницу на стене

Значения FACEBOOK_* определены ранее в кодовой базе.

// SDK Version 5.0 
$fb = new Facebook\Facebook([ 
    'app_id' => FACEBOOK_APP_ID, 
    'app_secret' => FACEBOOK_APP_SECRET, 
    'default_graph_version' => 'v2.4', 
]); 

// Returns a `Facebook\FacebookResponse` object 
$response = $fb->post('/'.FACEBOOK_PAGE_ID.'/feed', $postData, FACEBOOK_ACCESS_TOKEN); 

$postId = $response->getGraphNode(); 

Теперь мой вопрос заключается в том, как я могу получить его для публикации как фактической страницы, а не моей учетной записи, которая является администратором страницы.

Я просмотрел документацию по SDK, и я крутился по кругу, есть много примеров v4, но поскольку это устарело, я пытаюсь использовать v5 и просто не могу понять его любые ссылки на атрибуцию публикации или олицетворение, которые я нахожу, являются мертвыми ссылками в версии 5 SDK.

Из того, что я могу видеть, что я должен сделать вызов/{идентификатор пользователя}/счета, чтобы получить маркер доступа для страницы из моего пользователя https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens

Но чтобы получить {user-id} я должен запросить пользователь, с чем-то вроде ниже пример из документации SDK:

// Make sure to load the Facebook SDK for PHP via composer or manually 
use Facebook\FacebookRequest; 
use Facebook\GraphUser; 
use Facebook\FacebookRequestException; 

if($session) { 
try { 
    $user_profile = (new FacebookRequest(
     $session, 'GET', '/me' 
    ))->execute()->getGraphObject(GraphUser::className()); 
    echo "Name: " . $user_profile->getName(); 
} catch(FacebookRequestException $e) { 
    echo "Exception occured, code: " . $e->getCode(); 
    echo " with message: " . $e->getMessage(); 
} 

проблема здесь в том, что я понятия не имею, как получить сеанс, который мне нужно, чтобы получить данные пользователя, для которого дает мне маркер доступа чтобы позволить мне передать токен доступа в мой фрагмент кода выше, который работает, вот если я все правильно понял !?

Любая помощь очень ценится!

+0

Вы нашли решение этой проблемы? У меня появилось много ошибок с этим новым SDK. [Добавлено еще один вопрос здесь] (http://stackoverflow.com/questions/33523479/posting-on-a-facebook-page-with-php-sdk-v5) – Zl3n

+0

@ Zl3n, извините, я не смог чтобы заставить его работать, все еще пытаясь понять это, я отправлю туда, если я это выясню. – llanato

+0

Большое спасибо, вы позволили мне провести дискуссию, о которой я не думал. оно работает ! – Zl3n

ответ

8

Я работаю с классами, поэтому я адаптировал свой код к приведенным выше примерам. Проверенный и рабочий код.

После получения вашего токена доступа пользователя с использованием используемого вами метода (см. Руководство here), мы должны получить долгоживущий токен доступа. Добавьте это в ваш код:

session_start(); 
$helper = $fb->getRedirectLoginHelper(); 

try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // There was an error communicating with Graph 
    echo $e->getMessage(); 
    exit; 
} 

if (isset($accessToken)) { 

    $client = $fb->getOAuth2Client(); 

    try { 
     $accessToken = $client->getLongLivedAccessToken($accessToken); 
    } catch(Facebook\Exceptions\FacebookSDKException $e) { 
     echo $e->getMessage(); 
     exit; 
    } 


    $response = $fb->get('/me/accounts', (string) $accessToken); 

    foreach ($response->getDecodedBody() as $allPages) { 
     foreach ($allPages as $page) {    

      if (isset($page['id']) && $page['id'] == $pageId) { // Suppose you save it as this variable 
       $appAccessToken = (string) $page['access_token']; 
       break; 
      } 
     } 
    } 

    $response = $fb->post(
     '/'.$pageId.'/feed', 
     array(
      "message" => "Message", 
      "link" => "http://www.example.com", 
      "picture" => "http://www.example.net/images/example.png", 
      "name" => "Title", 
      "caption" => "www.example.com", 
      "description" => "Description example" 
     ), 
     $appAccessToken 
    ); 

    // Success 
    $postId = $response->getGraphNode(); 
    echo $postId; 

} elseif ($helper->getError()) { 
    var_dump($helper->getError()); 
    var_dump($helper->getErrorCode()); 
    var_dump($helper->getErrorReason()); 
    var_dump($helper->getErrorDescription()); 
    exit; 
} 

Пояснения: Вы должны знать, какие страницы вы администратор:

$response = $fb->get('/me/accounts', (string) $accessToken); 

Затем найдите таблицу для получения the access token of the page, что нас интересует (у меня есть выбранный для определения идентификатора страницы).

Наконец, просто запустить функцию пост, предоставленную SDK:

$response = $fb->post(
    '/'.$pageId.'/feed', 
    array(
     "message" => "Message", 
     "link" => "http://www.example.com", 
     "picture" => "http://www.example.net/images/example.png", 
     "name" => "Title", 
     "caption" => "www.example.com", 
     "description" => "Description example" 
    ), 
    $appAccessToken 
); 
+0

Думаю, что я работаю, просто жду, чтобы узнать, как только тестирование будет завершено, примет его как ответ, как только я закончу тестирование, и все в порядке. – llanato

+0

@llanato Я спокоен, он отлично работает :) Я сейчас работаю над созданием этого пакета в пакете – Zl3n

+0

@ ZI3n, который в конечном итоге заставил его работать с вашим примером. – llanato

Смежные вопросы