2013-03-23 2 views
0

Я пытаюсь получить токен доступа пользователя из Facebook с помощью PHP-SDK. Процесс регистрации на стороне сервера отлично работает, перенаправляется на правильную страницу и обеспечивает также $code.Facebook API:/oauth/access_token не работает

После редиректа (и проверки, существует ли $code), то я называю следующий метод API для обмена $code для маркеров пользователя (параметры API подавляется здесь):

$fb->api('/oauth/access_token',array(
    'client_id'  => APP_ID, 
    'client_secret' => APP_SECRET, 
    'redirect_uri' => REDIRECT_URI, 
    'code'   => $code 
)); 

$fb_token = $fb->getAccessToken(); 
echo $fb_token; 

К сожалению, все, что я получаю от этого скрипт по-прежнему является токеном приложения. На самом деле, сокращение сценария просто следующий не имеет никакого значения:

$fb_token_user = $fb->getAccessToken(); 
echo $fb_token_user; 

Так я предполагаю, что это все о /oauth/access_token вызова, который по какой-то причине не работает или, по крайней мере, не делает никаких действий. Он также не возвращает никаких ошибок.

Я пробовал и тестировал несколько альтернатив, таких как метод get_file_contents(), предложенный в учебнике Facebook, а также добавление дополнительных параметров к вышеуказанному вызову API (например, type=client_cred и более), но никогда не преуспевает.

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

Заранее благодарен!

+0

Ваши APP_ID и APP_SECRET верны? У ваших конфигураций приложений есть правильный URL-адрес? –

+0

@fabio И APP_ID, и APP_SECRET верны. Как URL-адрес сайта в конфигурации приложения, я установил https://www.domain.com/ с завершающей косой чертой, которая должна разрешить любой документ в домене, правильно? – uLyXes

+0

попробуйте изменить его на URL-адрес, который получит ответ oauth. –

ответ

2

Решенный! Код в вопросе все еще не работает, несмотря на то, что в этом и других сообществах написано столько потоков, что он делает (как ни странно, он работал для them).

Так что я понял, я должен был вернуться к методу file_get_contents(), как объяснено Facebook и оказывается, этот метод был ранее не работает, потому что allow_url_fopen отключен на моем сервере. Не желая подвергать риску его включения, я обнаружил cURL как обход.

А вот рабочий код:

// cURL Load Function 
function cURLget ($ch_url) { 
    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,$ch_url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']); 
    $ch_send = curl_exec($ch); 
    curl_close($ch); 
    return $ch_send; 
}; 

// Obtain User Token 
$fb_token_get = cURLget("https://graph.facebook.com/oauth/access_token" 
    . "?client_id=" . APP_ID 
    . "&client_secret=". APP_SECRET 
    . "&redirect_uri=" . urlencode(REDIRECT_URI) 
    . "&code=" . $CODE 
); 
$fb_token_params = null; 
parse_str($fb_token_get,$fb_token_params); 

// Print Token Data 
echo "Token: " . $fb_token_params['access_token'] 
    . "<br />Expires: " . $fb_token_params['expires']; 

Благодаря @FabioAntunes за попытку помочь мне с исходным кодом и @ShawnECarter его script для локонов функции нагрузки.

0

Наткнулся на эту проблему и сегодня. Кажется, мой PHP SDK (v.3.2.2) предлагает функцию, которая решает проблему: setExtendedAccessToken(). (В значительной степени это одно и то же: вызывает «/ oauth/access_token» graphs и обменивает старый токен на «долговечный»).