Originariamente inviato da brodik
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_request2);// 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'-_''+/'));
}
?>
Grazie gentilisismo, un ultima cosa, che si intende con:
esplodendo la variabile