Как разместить на странице Facebook с PHP - PullRequest
12 голосов
/ 10 февраля 2012

Я бы хотел опубликовать на своей странице в Facebook со своего сайта, используя PHP.

У меня есть следующее:

  • Приложение Facebook с AppID, AppSecret, ApiKey
  • Страница Facebook с PageID
  • моя собственная учетная запись Facebook - я администратор и создатель приложения и страницы, упомянутых выше.

Например, я пишу сообщение в блоге иЯ хотел бы получить имя, краткое описание и фотографию на стене моей страницы в Facebook.Или я хотел бы публиковать некоторые статьи на странице Facebook каждый день автоматически как задание cron.

Не могли бы вы предоставить пошаговое руководство, как это сделать?

Я читал эту статью о Facebook. Логин:
https://developers.facebook.com/docs/facebook-login/
, но я все еще не знаю, что написать в моем коде.


ОБНОВЛЕНИЕ 1

Вот так я отправляю запрос на токен доступа к приложению:

$url = 'https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id='
        .Yii::app()->params['FacebookAppID']
        .'&client_secret='
        .Yii::app()->params['FacebookSecret'];

Ответ похож на этот (поддельные символы):

access_token=326584076429|ax3-D39YbpDcR9rMRQn_fMvNu_s

Что access_token это?Токен доступа к приложению?Как получить токен доступа пользователя?

Я попытался использовать токен доступа здесь:
https://developers.facebook.com/tools/explorer?method=GET&path=me%2Faccounts, но получил следующее сообщение об ошибке:

Активный токен доступа должен использоваться для запроса информации о текущем пользователе

Так как мне получить правильный токен доступа?

ОБНОВЛЕНИЕ 2:

Как я могу получить правильные токены Facebook в своем приложении без какого-либо взаимодействия с клиентом?
Я администратор и создатель приложения Facebook и страницы Facebook.

Ответы [ 3 ]

9 голосов
/ 10 февраля 2012

Шаг за шагом

  1. Аутентификация пользователя, который является администратором страницы (самостоятельно)
  2. Запрос токена расширенного доступа (для получения разнообразия на 60 дней)как offline_access ушел).См. https://developers.facebook.com/docs/offline-access-deprecation/
  3. API графика вызовов me/accounts и выполните поиск по результирующему списку, чтобы найти интересующую вас страницу
  4. Возьмите токен доступа к странице со страницы и начните использовать его длявызовы для отправки
  5. Возможно, можно получить токен расширенного доступа для токена доступа к странице, как описано в шаге 2, пожалуйста, попробуйте и сообщите нам, можно ли это сделать и для токена доступа к странице.

Вы можете поэкспериментировать с вышеуказанным в https://developers.facebook.com/tools/explorer

Happy Coding!

EDIT

Для получения токена доступабез диалогов для любого пользователя вы можете использовать https://developers.facebook.com/tools/access_token/ для получения токена доступа.

2 голосов
/ 19 февраля 2012

Шаги:

  1. Запрос на разрешение manage_pages (Разрешить этот процесс):

    https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=manage_pages&response_type=token
    
  2. Получить токен доступа с URL:
    Если администратор разрешает это разрешение. Вы должны быть перенаправлены на URL ниже:

    http://YOUR_URL/#access_token=AAABY5jBXQz0BAEzNKkb6FZC22D7aOoKIfFuozIjoOpkGHRJ6SyzBvqx24JGooMc31374EdRFNXkOyLZCBzETRD9vhZAZC8MZD&expires_in=0
    

    Используйте токен доступа в URL, и вы должны получить это:

    AAABY5jBXQz0BAEzNKkb6FZC22D7aOoKIfFuozIjoOpkGHRJ6SyzBvqx24JGooMc31374EdRFNXkOyLZCBzETRD9vhZAZC8MZD
    
  3. Проверка токена доступа с помощью Graph API:

    https://graph.facebook.com/me/accounts?access_token=TOKEN_FROM_ABOVE
    

    Connection вернет информацию и токен доступа для каждой страницы.

  4. Реализуйте это в своем коде:
    Вы можете использовать токен доступа к приложению при вызове метода API Graph Facebook.

Обновление:
Если вы хотите использовать метод API в Facebook SDK, УСТАРЕЛО REST API или FQL Query ...

Вы должны использовать users_accesstoken таким образом:

  1. Метод 1:
    Используйте свою учетную запись или пользователей, чтобы войти на свою страницу Facebook с разрешениями offline_access и получить access_token при успешном входе в систему, используя $facebook->getAccessToken(), и сохранить его в базе данных, чтобы вы могли использовать его в любое время. Вы можете проверить срок действия токена здесь , токен с разрешениями offline_access никогда не истекает, за исключением случаев, когда пользователь меняет свой пароль или что-то еще.

  2. Метод 2:
    Вы можете динамически обновить access_token, используя приведенный ниже код (попрощайтесь, чтобы истечь токен). Facebook показывает это решение здесь , это пример кода для выполнения запроса FQL:

Код:

<?php
$app_id = 'YOUR_APP_ID';
$app_secret = 'YOUR_APP_SECRET';
$my_url = 'POST_AUTH_URL';
$code = $_REQUEST["code"];

//auth user
if(empty($code)) {
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
        . $app_id . '&redirect_uri=' . urlencode($my_url) ;
    echo("<script>top.location.href='" . $dialog_url . "'</script>");    
}

//get user access_token
$token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
. $app_id . '&redirect_uri=' . urlencode($my_url) 
. '&client_secret=' . $app_secret 
. '&code=' . $code;
$access_token = file_get_contents($token_url);   
0 голосов
/ 22 февраля 2012

Попробуйте эту простую функцию, чтобы разместить на стене:

function doWallPost($postName = '', $postMessage = '', $postLink = '', $postCaption = '', $postDescription = '') {
  $FB_APP_ID     = 'xxxxxxxxxxxxxxxxxxxxxxxx';
  $FB_APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx';

  $APP_RETURN_URL = ((substr($_SERVER['SERVER_PROTOCOL'], 0, 4) == "HTTP") ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];

  $code = $_REQUEST["code"];

  if (empty($code)) {
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $FB_APP_ID . "&redirect_uri=" . $APP_RETURN_URL . "&scope=publish_stream";
    header("Location:$dialog_url");
  }

  $token_url    = "https://graph.facebook.com/oauth/access_token?client_id=" . $FB_APP_ID . "&redirect_uri=" . urlencode($APP_RETURN_URL) . "&client_secret=" . $FB_APP_SECRET . "&code=" . $code;
  $access_token = file_get_contents($token_url);

  $param1          = explode("&", $access_token);
  $param2          = explode("=", $param1[0]);
  $FB_ACCESS_TOKEN = $param2[1];


  $url        = "https://graph.facebook.com/me/feed";
  $attachment = array(
    'access_token' => $FB_ACCESS_TOKEN,
    'name' => $postName,
    'link' => $postLink,
    'description' => $postDescription,
    'message' => $postMessage,
    'caption' => $postCaption
  );

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
  $result = curl_exec($ch);
  header('Content-type:text/html');
  curl_close($ch);

  return $result;
}
...