|
|
|
| Делаем запрос к 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? | |
|
|
|
|
|
|
|
для: Dred
(09.08.2015 в 19:47)
| | Лучше обращайтесь через библиотеку CURL, с сохранением куки сессии. Плюс возможно проблема с сертификатором - все-таки вы обращаетесь к странице, закрытой SSL. Примитивный file_get_contents() не поддерживает сессионности. | |
|
|
|
|
|
|
|
для: 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 выдает ошибку.. | |
|
|
|
|
|
|
|
для: Dred
(09.08.2015 в 19:47)
| | Попробуйте задать контекст для file_get_contents(). | |
|
|
|
|
|
|
|
для: confirm
(10.08.2015 в 11:42)
| | Это как, задать контекст? | |
|
|
|
|