Oauth facebook->getUser()始终返回0

Oauth facebook->getUser()始终返回0,oauth,facebook-php-sdk,Oauth,Facebook Php Sdk,我和许多其他人一样,都有一个问题,PHPSDK中的getUser方法始终返回零。 我发现原因是parseSignedRequest方法中的一个条件 if ($sig !== $expected_sig) { self::errorLog('Bad Signed JSON signature!'); return NULL; } 这种情况总是正确的。当我取消注释此条件时,它工作正常。我获得了正确的用户,并且我还可以在我要求的地方获取具有所有权限的令牌 但是我对这个肮脏的解决方案感到不舒服

我和许多其他人一样,都有一个问题,PHPSDK中的getUser方法始终返回零。 我发现原因是parseSignedRequest方法中的一个条件

if ($sig !== $expected_sig) {
  self::errorLog('Bad Signed JSON signature!');
  return NULL;
}
这种情况总是正确的。当我取消注释此条件时,它工作正常。我获得了正确的用户,并且我还可以在我要求的地方获取具有所有权限的令牌

但是我对这个肮脏的解决方案感到不舒服。为什么会这样呢。服务器上可能存在配置错误


亲切的问候

我也有同样的问题。。我花了4天时间才找到它

下面是我对条件的调试回音的结果,其中将$sig与$expected_sig进行比较

信号:[�ꢖ�B��U����F�^��4֣�全科医生�

预期信号:��{��.��西北地区�:�R��B�����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();

什么也不归还

这就是为什么我的getSignedRequestCookieName函数只返回fbsr_

这就是为什么

$expected_sig = hash_hmac('sha256', $payload,
                          $facebook->getAppSecret(), $raw = true);
返回错误的哈希

但是为什么呢

简单回答:一个格式错误的配置数组

使用$config['appId']=$APP_ID;…注意appId周围的引号。这是facebook开发者文档上的文档/示例的直接复制/粘贴

用标准双引号替换这些引号

$config = array();
$config["appId"] = $APP_ID;
$config["secret"] = $APP_SECRET;
$config["fileUpload"] = false; // optional
…以下是结果:

sig:r�0��g%���ͦ��W��B^���Ddv

预期信号:r�0��g%���ͦ��W��B^���Ddv

他们现在匹配

长话短说…执行phpinfo以确保获得签名的请求令牌…如果您确定获得该令牌或$request[fbsr]var…如果您确定获得编码的签名请求…哈希不匹配的唯一原因是您没有获得正确的机密

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