2012-04-02 4 views
1

У меня такая же проблема, как и многие другие, что метод getUser() в php-sdk возвращает все ноль. Я выясню, что причиной этого является условие в методе parseSignedRequest().facebook-> getUser() всегда возвращает 0

if ($sig !== $expected_sig) { 
    self::errorLog('Bad Signed JSON signature!'); 
    return NULL; 
} 

Состояние все в порядке. Когда я раскомментирую это условие, он работает нормально. Я получаю правильный пользователь, и я также могу получить токен со всеми разрешениями, на которых я прошу.

Но я упал с неудобством с этим грязным решением. Почему это так. Возможно, некорректная конфигурация на сервере.

Сердечные приветы

ответ

0

Я, имеющий ту же самую проблему .. Мне понадобилось 4 дня, чтобы разыскать его ...

Вот результат моей отладки эхо условное, где у вас есть $ sig сравнивается с $ expected_sig.

сиг: [ꢖbuf^4 ֣ GP

ожидается сиг: {.nwW: гв C8 $ % F

Так что по какой-то причине отправляемая подпись НЕ совпадает с какой-либо ожидаемой кодированной подписью.

Так что мне было интересно ... что здесь может быть неправильным?

Может быть, я не перехожу в «секретный», хотя я настраиваю его прямо в своей конфигурации?

require_once("facebook.php"); 

$config = array(); 
$config[‘appId’] = $APP_ID; 
$config[‘secret’] = $APP_SECRET; 
$config[‘fileUpload’] = false; // optional 

$facebook = new Facebook($config); 

Как выясняется, когда я использую

$facebook->getAppID(); 

или

$facebook->getAppSecret(); 

НИЧЕГО возвращается!

Вот почему моя функция getSignedRequestCookieName() возвращает только "fbsr_"

Вот почему

$expected_sig = hash_hmac('sha256', $payload, 
          $facebook->getAppSecret(), $raw = true); 

возвращает неправильный хэш!

НО ПОЧЕМУ?

Простой ответ: плохо формируется массив конфигурации ...

Использование "$ конфиг [„APPID“] = $ APP_ID;" ... обратите внимание на кавычки "APPID". Это была прямая копия/вставка из документов/примеров в документах разработчиков facebook.

Заменить эти кавычки со стандартными двойными кавычками

$config = array(); 
$config["appId"] = $APP_ID; 
$config["secret"] = $APP_SECRET; 
$config["fileUpload"] = false; // optional 

...вот результаты:

сиг: r0g% W (B^DDV

ожидается сиг: r0g% W (B^DDV

Теперь они совпадают ...

Короче ... сделать phpinfo(), чтобы убедиться, что вы получаете signed_request маркер .. если вы уверены, что получаете это (или «$ REQUEST [fbsr #######]] var), если вы уверены, что получаете кодированный подписанный запрос ... только ваш хэш не будет соответствовать, если вы не получаете там был секрет.

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