2013-11-20 4 views
1

Что я хочу - это получение данных с использованием общедоступной страницы. Я пробовал документацию, но не смог найти эту информацию. Затем я просмотрел его и нашел этот вопрос Can you get a public Facebook page's feed using Graph API without asking a user to allow? здесь, в stackoverflow, и это прекрасно объясняет, что я хочу делать с PHP. Я прочитал в ответе McNab, что мне нужно приложение в facebook для извлечения этих данных (для получения токена доступа). Я создал приложение, и он взял меня на базовую страницу настроек, где он дал мне AppId и AppSecret. Теперь, как из ответа McNab, мне нужен только секрет AppId и app, чтобы получить auth_token, я использовал следующий код, но по какой-то причине я получаю false вместо AuthToken. Что я здесь делаю неправильно? Я не добавлял никаких дополнительных подробностей в приложение, это вызывает эту проблему, нужно ли добавлять дополнительные сведения в приложение или что-то еще вызывает это?Facebook Graph API: не удается получить доступ к токену авторизации

P.S Также я пытаюсь это на localhost на моем ПК.

function fetchUrl($url){ 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 

$feedData = curl_exec($ch); 
curl_close($ch); 

return $feedData; 

} 

$profile_id = "100002138417834"; 

// App info needed for auth. 
$app_id = "--------------"; 
$app_secret = "-=-=-=-=-=-=-=-=-=-=-=-"; 

$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}"); 

var_dump($authToken); 

UPDATE:

Когда я var_dump(curl_error($ch)); (как это было предложено в комментариях), он дал мне эту ошибку:

string 'SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed' (length=146)

+0

Возвращение false означает, что cUrl не удалось, а не только FB Api. Сообщается ли об ошибках?Попробуйте 'var_dump (curl_error ($ ch)); после curl_exec –

+1

Если возвращаемое значение равно' bool (false) ', произошла ошибка, поэтому вы должны использовать' curl_error ($ ch) ', чтобы узнать, что это было. В качестве альтернативы используйте 'curl_setopt (CURLOPT_VERBOSE, 1);' для включения отладки. –

+0

Означает ли это, что вы решили? –

ответ

1

Сертификат SSL не правильно проверенную. Обычно Curl имел возможность делать это правильно, когда он был связан с сертификатами CA. Либо вы указываете curl на правильный сертификат (информация здесь http://curl.haxx.se/docs/sslcerts.html), либо отключите проверку всех вместе.

Вы можете отключить SSL-сертификат проверки с помощью:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

Это очень распространенная проблема локон, ответ на это, вероятно, во всем SO ;-)

+0

Я решил это, используя свой ответ на этот вопрос, но ваш ответ также работает (плюс кажется более простым) Спасибо :) –

+0

Спасибо! У вас есть хороший способ справиться с вопросами и ответами. Так держать :-) –

0

Я попытался вывести на (спасибо @Jack), и я получил это:

string 'SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed' (length=146)

Казалось, что проблема с сертификатом SSL. Итак, что я сделал:

  1. Скачан комплект с here.
  2. Поместите этот пакет в тот же каталог, где у меня был этот файл index.php, то есть файл с кодом.
  3. Затем установите параметр CURLOPT_CAINFO с помощью curl_setopt(), чтобы указать на этот файл (это должен быть абсолютный путь).
  4. обновляли страницу и она работает :)
  5. Здесь линия будет добавлена:

    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__). '/cacert.pem');

И заслуга в @Jack, который помог мне в чате:)

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