Как получить код токена Facebook через curl? - PullRequest
3 голосов
/ 16 августа 2011

Я пытался использовать easy curl, чтобы получить Facebook code и access_token через curl. Так что я могу отправить сообщение на мою стену. Я знаю sdk, но если я только использую легкий curl способ?

возврат некоторой ошибки:

Method Not Implemented

Invalid method in request

Вот мой код. ПО ПУТИ: Как запомнить access_token, если он все еще действует в течение 1 часа? Спасибо.

$code_url = "https://graph.facebook.com/oauth/authorize?client_id=".$app_id."&redirect_uri=".urlencode($canvas_page_url)."&type=client_cred&display=page&scope=user_photos,publish_stream,read_stream,user_likes";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$code_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_HEADER      ,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
$fb_code = curl_exec($ch); // get code
curl_close($ch);

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&client_secret=".$app_secret."&redirect_uri=".urlencode($canvas_page_url)."&code=".$fb_code."";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$token_url);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($curl, CURLOPT_HEADER      ,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER  ,1);
$result = curl_exec($curl);
curl_close($curl); 
echo $result; //get token for post to wall

EDIT:

   $app_id = "14XXXXXXXX";
   $app_secret = "77XXXXXXXXXXXXXXXXXXXXXXX";
   function get_app_access_token($app_id, $secret) {
    $url = 'https://graph.facebook.com/oauth/access_token';
    $token_params = array(
        "type" => "client_cred",
        "client_id" => $app_id,
        "client_secret" => $app_secret
        );
    return str_replace('access_token=', '', post_url($url, $token_params));
  }
  $token = get_app_access_token($app_id,$app_secret);
  echo $token;

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

Попробуйте эти вспомогательные методы, которые сделают вызов cURL к API-интерфейсу графа и возвратят access_token приложения.

Эта функция принимает URL-адрес и массив параметров и выполняет POST через cURL:

  function post_url($url, $params) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, null, '&'));
    $ret = curl_exec($ch);
    curl_close($ch);
    return $ret;
  }

Эта функция принимает идентификатор и секретный код вашего приложения, предоставленные в приложении для разработчиков , и возвращает активный access_token для вашего приложения:

  function get_app_access_token($app_id, $secret) {
    $url = 'https://graph.facebook.com/oauth/access_token';
    $token_params = array(
        "type" => "client_cred",
        "client_id" => $app_id,
        "client_secret" => $secret
        );
    return str_replace('access_token=', '', post_url($url, $token_params));
  }

Вы можете вызвать метод следующим образом $token = get_app_access_token('APP_ID','SEKRET');

2 голосов
/ 23 декабря 2011

Они действительно должны прояснить это в руководстве по FB, но вот что сработало для меня.В отличие от того, что многие люди говорят в Интернете, вы НЕ делаете вызов GET curl, но вы все равно делаете вызов POST.

Итак, URL, который вы публикуете, будет "https://graph.facebook.com/oauth/access_token?"

, ваши POST-переменные, которые вы будете кормить CURLOPT_POSTFIELDS, будут выглядеть примерно так:

"client_id=YOUR_CLIENT_ID&redirect_uri=" . urlencode("YOUR_URL") . "&client_secret=YOUR_CLIENT_SECRET&code=YOUR_RECEIVED_CODE"

Я буквально пытался, по крайней мере, 1,5 часа, пытаясь заставить это работать. Каждый раз, когда я переходил по URL-адресу в браузереэто было нормально, и каждый раз, когда я пытался выполнить команду GET curl или команду POST, где все переменные все еще были в URL (и не указаны в POSTFIELDS), это не удавалось. Это действительно раздражало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...