commento direttamente il codice
Codice PHP:
<?php
//Sostituire alle XXXXXXXXXXXX i dati della propria applicazione
define('FACEBOOK_SECRET', 'XXXXXXXXXXXX', true); // definisce la costante FACEBOOK_SECRET
define('FACEBOOK_ID', 'XXXXXXXXXXXX', true); // definisce la costante FACEBOOK_ID
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);// crea due variabili ($encoded_sig e $payload) esplodendo la variabile $signed_request (con un massimo di due parti) es. ciao.pippo diventa ciao (variabile $encoded_sig) e pippo (variabile $payload)
// decodifico i dati
$sig = base64_url_decode($encoded_sig); //decodifica la variabile dalla codifica in base64 (vedi la funzione in fondo)
$data = json_decode(base64_url_decode($payload), true); //decodifica la variabile dalla codifica JSON
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { // se lavariabile $data['algorithm'] scritta in maiuscolo è diversa da HMAC-SHA256
error_log('Algoritmo sconosciuto. Ci aspettiamo HMAC-SHA256'); // da errore
return null;
}
// verifico la firma digitale
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); // genera valore hash usando il metodo HMAC, con algoritmo sha256 della variabile $payload utilizzando la chiave $secret, ritornando un valore binario
if ($sig !== $expected_sig) { // se le due variabili sono diverse tra loro da errore
error_log('Firma digitale non corretta!');
return null;
}
return $data; // ritorna il valore
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
?>