Certo, usano la crittografia perché non usando IPN sarebbero delle groviere che camminano

Ma usando le IPN PayPal ti ritorna indietro la tua richiesta e quindi la puoi tranquillamente controllare tutto quello che vuoi

in generale quello che controllo io è l'importo perché se l'importo è uguale a quello segnato nell'ordine allora l'ordine è pagato interamente altrimenti segno la transazione ma notifico che il pagamento non è valido (sia all'utente sia all'amministratore)

non ti serve controllare altro oltre all'importo perché se tu carichi al momento della conferma dell'ordine i dati sul database, li hai scritti tutti li e se ti corrisponde l'importo (che poi intendiamoci, è l'unica cosa che qualcuno vorrebbe cambiare) vuol dire che il pagamento è apposto

Certo, qualcuno potrebbe alterare le quantità od i prodotti che vengono inviati a paypal, ma questo è un problema? No, perché tu questi dati li hai scritti sul database e a quelli ti devi attenere.
Inoltre conservandoti la richiesta relativa alla transazione, se per caso qualcuno ci gioca e poi si lamenta tu lo puoi scoprire nell'arco di pochi secondi. (personalmente mi serializzo per intero il $_POST della richiesta IPN nel db insieme alle informazioni sulla transazione)

Per usare le IPN devi passare una url che indica quale pagina deve ricevere la notifica del pagamento (IPN => Instant Payment Notification => Notifica Istantanea del Pagamento) ... pagina che, una volta effettuato il pagamento su paypal, o una volta annullata la transazione, sarà richiamata e ti sarà notificata la situazione.

Il file può tranquillamente essere un file php ... anzi ... DEVE essere una pagina che può gestire i dati quindi PHP (o jsp, o cgi, o pl, o asp o qualsiasi altra cosa ... basta che sia in grado di smistare la richiesta)

Sul sito di paypal ci sono degli esempi in PHP che riportano a grandi linee le operazioni che devi fare per gestire le transazioni correttamente con le IPN

Personalmente:
- la prima cosa che faccio è di salvarmi la richiesta sul database
- poi verificare se la richiesta che mi è stata effettuata è valida (chiunque potrebbe richiamare la pagina ovviamente, ma paypal ha un meccanismo di verifica che ti permette di accertarti della situazione), di conseguenza mi segno che è valida
- mi controllo gli importi e le valute, facendo eventualmente, la conversione in base a delle tabelle che aggiorno giornalmente in automatico
- mi controllo l'indirizzo e-mail del ricevente del pagamento
- ed infine controllo lo stato/tipo dell'operazione (pagamento effettuato, pagamento annullato, rimborso, e-check e via dicendo)

Qui qualche informazione utile
https://www.paypal.com/it/ipn
https://www.paypal.com/it/cgi-bin/we...n-info-outside
https://www.paypalobjects.com/WEBSCR...ationGuide.pdf
https://cms.paypal.com/cgi-bin/marke...n_code_samples

L'esempio, specificatamente per php, lo trovi qui:
https://cms.paypal.com/cms_content/U...IPN_PHP_41.txt

Come vedi, c'è spiegato passo passo cosa fare

// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
ovvero
// Controlla che il valore della variabile $_POST['payment_status'] sia Completed
// Controlla che la variabile $_POST['txn_id'] non sia stata precedentemente processata
// Controlla che il valore della variabile $_POST['receiver_email'] corrisponda al valore del tuo indirizzo e-mail su paypal (è il ricevente del pagamento, caso mai qualcuno alterasse questo valore per ricevere i soldi su un proprio conto)
// Controlla che il valore della variabile $_POST['payment_amount'] corrisponda all'importo dell'ordine e che il valore della variabile $_POST['payment_currency'] corrisponda alla valuta selezionata da te (altrimenti tu metti EUR, qualcuno lo cambia per dire in YEN e non paga nulla praticamente ) .... se ti interessa gestire valute di tipo diverse devi effettuarti la conversione ... utile per i pagamenti internazionali
// Infine gestisci normalmente il pagamento