我有..花了我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)...如果你確定你正在得到一個經過編碼的簽名請求......如果你沒有得到,只有你的哈希不匹配的原因在那裏的祕密。