我有..花了我4天追查确切同样的问题...
这里是有条件的我调试回声,那就是你有$的结果sig与$ expected_sig进行比较。
SIG:[ꢖbuf^ 4֣GP
预期SIG:{.nwW:RB 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开发人员文档上docs/examples的直接复制/粘贴。
与标准的双引号
$config = array();
$config["appId"] = $APP_ID;
$config["secret"] = $APP_SECRET;
$config["fileUpload"] = false; // optional
更换这些报价...这里的结果:
SIG:r0g%的W(B^DDV
预计SIG:r0g% w ^(B^DDV
现在他们匹配...
长话短说...做的phpinfo(),以确保你得到一个signed_request令牌.. 。如果你确定你得到了这个(或者“$ REQUEST [fbsr #######]”var)...如果你确定你正在得到一个经过编码的签名请求......如果你没有得到,只有你的哈希不匹配的原因在那里的秘密。