Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: file_get_contents выдает пустую строку
 
 автор: Dred   (09.08.2015 в 19:47)   письмо автору
 
 

Делаем запрос к Facebook API для получения информации о пользователе. Передача идет одним единственным параметром access_token:

if (count($tokenInfo) > 0 && isset($tokenInfo['access_token'])) {

$params = array('access_token' => $tokenInfo['access_token']);

$userInfo = json_decode(file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params))), true);

if (isset($userInfo['id'])) {

$userInfo = $userInfo;

$result = true;
        }

    }


Проблема в том, что

file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params_fb)))

выдает пустую строку при авторизации на Facebook..

json_decode(file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params_fb))), true) - соответственно тоже пустая строка..

Если же набрать вручную в браузере

https://graph.facebook.com/me?

со всеми параметрами, то нормально выдает данные id и email пользователя..

Раньше все работало..

по такому же принципу реализована авторизация через Вконтакте и Гугл+. Работает..

В чем может быть причина? Настройках сервера (php.ini) (поменялся хостинг и домен) или что-то поменял Facebook?

  Ответить  
 
 автор: cheops   (09.08.2015 в 20:47)   письмо автору
 
   для: Dred   (09.08.2015 в 19:47)
 

Лучше обращайтесь через библиотеку CURL, с сохранением куки сессии. Плюс возможно проблема с сертификатором - все-таки вы обращаетесь к странице, закрытой SSL. Примитивный file_get_contents() не поддерживает сессионности.

  Ответить  
 
 автор: Dred   (19.08.2015 в 07:48)   письмо автору
 
   для: cheops   (09.08.2015 в 20:47)
 

Нашел готовый скрипт с использованием CURL

 function is_facebook_auth_valid($facebook_token, $facebook_id)
 {
  $ch = curl_init();
  $url="https://graph.facebook.com/me?access_token=".$facebook_token;
  curl_setopt($ch, CURLOPT_URL,$url );
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  // The following ensures SSL always works. A little detail:
  // SSL does two things at once:
  //  1. it encrypts communication
  //  2. it ensures the target party is who it claims to be.
  // In short, if the following code is allowed, CURL won't check if the
  // certificate is known and valid, however, it still encrypts communication.
  curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
  curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
  $result = curl_exec($ch);
  curl_close($ch);
  $fb_profile = json_decode( $result, true);
  if( isset($fb_profile['error'] ) )
  {
   return false;
  }
  elseif( isset($fb_profile['id']) && $fb_profile['id'] != $facebook_id )//Check if this auth token has the same ID sent.
  {
   return false;    
  }

  return true;
 }


Если набрать

print $fb_profile;

выдает ошибку:

Array ( [error] => Array ([message] => API calls from the server require an appsecret_proof argument [type] => GraphMethodException [code] => 100 ))

Опять же, если готовую строку
https://graph.facebook.com/me?access_token=".$facebook_token
набрать в браузере, то выдает ID и имя пользователя.. А с Curl выдает ошибку..

  Ответить  
 
 автор: confirm   (10.08.2015 в 11:42)   письмо автору
 
   для: Dred   (09.08.2015 в 19:47)
 

Попробуйте задать контекст для file_get_contents().

  Ответить  
 
 автор: Dred   (10.08.2015 в 14:03)   письмо автору
 
   для: confirm   (10.08.2015 в 11:42)
 

Это как, задать контекст?

  Ответить  
 
 автор: KPETuH   (10.08.2015 в 14:47)   письмо автору
 
   для: Dred   (10.08.2015 в 14:03)
 

http://php.net/manual/ru/function.file-get-contents.php

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования