ich genau das gleiche Problem habe .. hat mich 4 Tage gedauert es aufzuspüren ...
Hier ist das Ergebnis meiner Debug-Echo des bedingten, wo Sie $ haben sig wird mit $ expected_sig verglichen.
sig: [ꢖbuf^4 ֣ GP
erwartet sig: {.nwW: rB ForC8 $ % F
Aus irgendeinem Grund stimmt die gesendete Signatur NICHT mit einer der erwarteten codierten Signaturen überein.
Also habe ich mich gefragt ... was könnte hier falsch sein?
Könnte es sein, dass ich nicht das richtige "Secret" passiere, obwohl ich es gerade in meiner Konfiguration aufstelle?
require_once("facebook.php");
$config = array();
$config[‘appId’] = $APP_ID;
$config[‘secret’] = $APP_SECRET;
$config[‘fileUpload’] = false; // optional
$facebook = new Facebook($config);
Wie sich herausstellt, wenn ich
$facebook->getAppID();
oder
$facebook->getAppSecret();
wird nichts zurück verwenden!
Aus diesem Grund meine getSignedRequestCookieName() Funktion nur "fbsr_"
Aus diesem Grund
$expected_sig = hash_hmac('sha256', $payload,
$facebook->getAppSecret(), $raw = true);
kehrt die falsche Hash zurück!
ABER WARUM?
Einfache Antwort: ein schlecht gebildet Config Array ...
Mit "$ config [‚appId‘] = $ APP_ID;" ... die Zitate bemerken um "appId". Dies war ein direktes Kopieren/Einfügen aus den Dokumenten/Beispielen in den Entwicklerdokumenten von Facebook.
Ersetzen Sie diese Zitate mit Standard doppelte Anführungszeichen
$config = array();
$config["appId"] = $APP_ID;
$config["secret"] = $APP_SECRET;
$config["fileUpload"] = false; // optional
...hier ist das Ergebnis:
sig: r0g% W (B^Ddv
erwartet sig: r0g% W (B^Ddv
Sie passen jetzt ...
Lange Rede kurzer Sinn ... tun, um eine phpinfo(), um sicherzustellen, dass Sie ein signed_request Token sind immer .. Wenn Sie sicher sind, dass Sie das bekommen (oder die "$ REQUEST [fbsr #######]" var) ... wenn Sie sicher sind, erhalten Sie eine verschlüsselte signierte Anfrage ... die Der einzige Grund, warum Ihr Hash nicht übereinstimmt, ist, wenn Sie nichts bekommen das richtige Geheimnis drin.