Quando un utente cancella la nostra applicazione da Facebook è possibile averne notifica così da poter avviare una serie di operazioni gestite da una pagina sul proprio sito (ad esempio inviare una email di notifica e così via).
La prima cosa da fare è entrare nelle impostazioni dell’applicazione e inserire una url di callback come da figura:
È fondamentale settare su “abilitato” il campo “Oauth 2.0 for Canvas” altrimenti la procedura non andrà a buon fine.
A questo punto, nel momento in cui l’utente cancella l’applicazione, Facebook richiama la pagina del nostro sito indicata precedentemente, inviando una POST REQUEST con un singolo parametro (signed_request) simile a:
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0
Il parametro è codificato secondo un algoritmo specifico di Facebook e viene inviato via POST anziché via GET per questioni di sicurezza.
Dal parametro signed_request è possibile estrarre l’id utente che ha cancellato l’applicazione. Per fare questo bastano due funzioni fornite da Facebook:
<?php
// chiave segreta dell'applicazione
$conf['secret_key'] = "a314dc24dc4a45775e4efef5fa547151";
//chiamo la funzione
$fb_data = parse_signed_request($_REQUEST['signed_request'], $conf['secret_key']);
// idutente
$fb_userid = $fb_data['user_id'];
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode dei dati
$sig = base64_url_decode($encoded_sig);
$fb_data = json_decode(base64_url_decode($payload), true);
if (strtoupper($fb_data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check della firma
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $fb_data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
A questo punto otteniamo la variablie $fb_userid da utilizzare per le nostre operazioni.
