PayPal Payment Data Transfer ( PDT ) | OTHER chapters |
Come scrive PayPal: "Il Trasferimento dei dati del pagamento ( PDT, Payment Data Transfer ) è un metodo sicuro per il recupero dei dettagli relativi a una transazione PayPal che puoi rendere visibili al tuo cliente. Viene utilizzato congiuntamente ai Pagamenti su sito web, in modo che quando torna nel tuo sito web dopo avere effettuato il pagamento nel sito PayPal, il cliente è in grado di visualizzare immediatamente un messaggio di conferma con i dettagli della transazione". Le informazioni che il server HTTPS di PayPal invia al vostro server HTTP sono molto simili alle informazioni che avete ricevuto con la pagina di ritorno classica, ma il meccanismo PDT è leggermente più complesso della pagina di ritorno, poichè prevede un passaggio intermedio, tra la fine della transazione e l'invio di tutti i dati, relativi alla transazione stessa. Da questo punto di vista, PDT è molto più vicino al meccanismo IPN ( Instant Payment Notification ). Inoltre, visto che sia la transazione PDT, sia la transazione IPN, prevedono una chiamata ad una URL "https", sarà necessario che il vostro server abbia installato un qualche supporto ai protocolli SSL ( Secure Sockets Layer ) o TLS ( Transport Layer Security TLS ). Potrete eseguire i test delle impostazioni che vedremo nei paragrafi successivi, utilizzando l'ambiente virtuale Sandbox di PayPal, che abbiamo visto nel secondo articolo di questa guida. Ricordate sempre che le form HTML vanno inviate a due indirizzi internet ( URL ) differenti, a seconda che stiate utilizzando l'ambiente virtuale Sandbox, oppure che vi troviate ad operare in ambiente reale PayPal. Per Sandbox, utilizzate sempre l'indirizzo:
Quando, invece, vi trovate in PayPal, utilizzate sempre l'indirizzo:
Ricordate, inoltre, che il campo, contenuto nella vostra form di invio:
indica al server HTTPS di PayPal il nome dell'account sul quale versare i soldi, frutto della transazione. L'identificativo dell'account virtuale Sandbox è diverso dall'identificativo dell'account reale PayPal, naturalmente.
Entrate nel vostro account PayPal e seguite il percorso:
In questa pagina, due sono le opzioni da attivare:
Una volta impostate queste opzioni, premete il bottone "Salva". Nella nuova pagina che si aprirà, leggerete la conferma delle avvenute modifiche. Se rientrate nella pagina "Preferenze per i pagamenti su sito web", scoprirete che nella sezione "Trasferimento dei dati del pagamento (opzionale)", che ora è attivo, viene riportata una stringa alfanumerica ( token ), che rappresenta un codice identificativo del vostro account, per le transazioni PDT. Per esempio:
Questa stringa è una delle stringhe che il vostro programma PDT dovrà inviare al server HTTPS di PayPal, per poter ricevere tutti i dati relativi alla transazione appena avvenuta. Vediamo le fasi di una transazione finanziaria, con Payment Data Transfer ( PDT ) impostato:
Abbiamo detto che il server HTTPS, durante la transazione PDT, chiede che i dati scambiati tra il vostro server HTTP ed il server HTTPS di PayPal vengano trasmessi in forma criptata. Chi effettua la codifica dei dati è proprio il protocollo di trasmissione HTTPS ( Secure HyperText Transfer Protocol ). Il protocollo HTTPS non sostituisce il protocollo HTTP, il protocollo normalmente usato in tutte le trasmissioni internet ( TCP ), ma lo affianca: mentre HTTP si occupa della trasmissione stessa dei dati, HTTPS si preoccupa che questa trasmissione avvenga in un ambiente sicuro. I protocolli utilizzati per l'implementazione della sicurezza nelle transazioni HTTP sono protocolli di crittografia/autenticazione come il Secure Sockets Layer ( SSL ) o il Transport Layer Security ( TLS ), tanto è vero che, nel caso di TLS, si parla di HTTP Over TLS. In realtà, TLS non è altro che una versione di SSL. SSL, originariamente, fu sviluppato da Netscape. Quando IETF ( Internet Engineering Task Force ) decise di adottare SSL come standard universale, decise di cambiarne il nome in TLS. La versione 1.0 di TLS è equivalente alla versione 3.1 di SSL. Per capire, anche se solo sommariamente, quali compiti esegua TLS e di quanti altri protocolli si serva, è sufficiente leggere la spiegazione che ne viene data nella RFC ufficiale( RFC 5246 ): "Il protocollo TLS garantisce la riservatezza delle comunicazioni inviate via internet, permettendo alle applicazioni client/server di comunicare fra loro, evitando che le loro comunicazioni siano intercettate, alterate o contraffatte. Il protocollo è composto da due strati ( livelli ):
Il protocollo TLS Record si occupa della sicurezza della connessione, garantendo due fondamentali proprietà di una connessione sicura:
Il protocollo TLS Record viene utilizzato per incapsulare altri protocolli di livello superiore. Uno di questi protocolli incapsulati, il protocollo TLS Handshake, permette sia al server che al client:
Il concetto importante da sottolineare è che una transazione SSL implica una prima fase, handshake ( negoziazione ), durante la quale le due macchine stabiliscono quali protocolli di cifratura utilizzare nel corso della successiva trasmissione dei dati veri e propri. I dati, le nostre stringhe POST, verranno, poi, inviati, criptati o no, utilizzando i normali header HTTP. Questo significa che i programmi che utilizzerete per effettuare la connessione al server HTTPS dovranno, quanto meno, essere in grado di gestire la prima fase, o handshake, di una transazione SSL. Se poi il vostro server ha installato un pieno supporto ai protocolli SSL, tutta la transazione verrà completata eseguendo una cifratura ed una decifratura dei dati. In caso contrario, visto che PayPal non richiede necessariamente, pur caldeggiandola calorosamente, la cifratura dei dati, la transazione potrà anche essere conclusa in chiaro. Per maggiori dettagli sulla fase di negoziazione ( o handshake ) SSL, leggete questo interessante articolo di Antonio Altana.
Ora che avete impostato la pagina di ritorno PDT nel vostro account PayPal, rientrate nel vostro account e tornate alla pagina di creazione del bottone "Paga adesso", per creare un nuovo bottone.
Inserite i dati del vostro articolo in vendita:
Ricordatevi di deselezionare la voce "Salva il pulsante su PayPal", nella scheda "Passaggio 2. Gestisci le giacenze di magazzino, i profitti e le perdite (opzionale)". Quindi, premete il bottone "Crea pulsante". A questo punto, vedrete il codice HTML della form, in forma criptata ( è la modalità di default di PayPal, nel caso in cui venga escluso il salvataggio del codice sul server Paypal ), ma vedrete anche un link, subito sopra il codice, con scritto: "Rimuovi protezione codice". Cliccate e vedrete apparire il codice HTML in chiaro. Copiate quel codice su una pagina HTML del vostro sito. Il codice HTML della vostra form dovrebbe essere il seguente:
e dovrebbe comprendere gli stessi campi che avete utilizzato nel bottone "Paga adesso" del primo articolo, quando non avevate impostato alcuna pagina di ritorno. Questo significa che, con PDT, il server HTTPS di PayPal preleva le informazioni relative alla pagina di ritorno PDT direttamente dal vostro account PayPal. Prima di premere questo nuovo bottone "Paga adesso", dovrete creare la pagina di ritorno PDT. Iniziamo con PHP.
Salvate questo file con il nome "grazie.php" ed installatelo sul vostro server. Ora, premete il bottone "Paga adesso" appena salvato e verificate cosa accadrà al vostro utente, durante il processo di pagamento online. Vediamo, ora, il codice del vostro programma "grazie.php" più da vicino. Ricordate che il codice di programmazione, in un file PHP è sempre compreso tra le due TAG di apertura e chiusura:
Nelle prime righe, vengono dichiarate alcune variabili, che verranno utilizzate in seguito. La variabile:
è un array associativo ( sarà evidente solo più tardi ) che conterrà l'elenco delle variabili inviate dal server HTTPS di PayPal. E' l'equivalente dell'array associativo
è un array semplice, una lista, che utilizzerete come contenitore temporaneo dei dati inviati dal server HTTPS di PayPal. La variabile:
è l'indirizzo del server PayPal. Qui, ho inserito l'indirizzo dell'ambiente virtuale Sandbox: nel caso doveste installare questo programma per lavorare in ambiente reale PayPal, ricordatevi di modificare il valore di questa variabile in:
La variabile:
contiene l'identificativo PDT del vostro account PayPal, l'identificativo che trovate all'interno del vostro account PayPal:
In questo momento, quell'identificativo è l'identificativo PDT del vostro account virtuale Sandbox. Nel caso doveste installare questo programma per lavorare in ambiente reale PayPal, ricordatevi di modificare il valore di questa variabile, prelevandolo dal vostro account PayPal reale. La variabile:
contiene il tipo di transazione che chiedete al server HTTPS di PayPal di eseguire. Questa stessa variabile era già contenuta nella form HTML che avete salvato nella vostra pagina web, ma con un valore differente. Nella vostra form HTML, il valore di questa variabile era:
che significa ( basta verificarlo sulla pagina di PayPal Variabili HTML per Pagamenti su sito web ): "Il pulsante selezionato è un pulsante Paga adesso". Il vostro utente, quindi, premendo il bottone "Paga adesso", ha avvisato il server HTTPS di PayPal che il bottone premuto è un bottone "Paga adesso".
Il server HTTPS di PayPal, una volta completato il pagamento online, ha scoperto che, nel vostro account PayPal, avete impostato una pagina di ritorno PDT. Quindi, il server HTTPS di PayPal ha chiamato il programma "grazie.php", installato sul vostro server HTTP, inviandogli una variabile di verifica, chiamata
che dice al server HTTPS di PayPal che questo è un messaggio di sincronizzazione, tra il vostro server HTTP ed il server HTTPS di PayPal, affinchè quest'ultimo invii al primo tutti i dati relativi alla transazione appena conclusa.
Se la variabile
Se questa variabile
Un'ultima importante annotazione sulla variabile
Se, in fase di test, doveste provare più volte la transazione PDT, non fatelo facendo un semplice RELOAD della pagina: in questo caso, infatti, il vostro programma utilizzerebbe più volte lo stesso ID di transazione, rispedendolo più volte al server HTTPS di PayPal. PayPal avverte che, nel caso il server HTTPS di PayPal ricevesse più volte lo stesso ID di transazione, PayPal sospenderebbe, in via precauzionale, l'identificativo PDT del vostro account PayPal (
Questo può avvenire per una varietà di motivi, ma significa, sostanzialmente, che l'istanza di
L'elenco delle opzioni disponibili e dei valori ad esse assegnabili, lo trovate alla pagina
Ora, possiamo effettuare la connessione al server HTTPS di PayPal:
La connessione viene eseguita dalla funzione PHP
La risposta del server HTTPS di PayPal contiene una prima riga che riporta l'esito della transazione PDT ( SUCCESS, in questo caso ), seguita da una serie di righe, ciascuna composta da una coppia chiave/valore delle variabili PayPal, relative al pagamento online appena concluso. Attenzione:
Ora che abbiamo la risposta del server HTTPS di PayPal, il lavoro è tutto in discesa. Dobbiamo solo estrarre i dati da quella lunga stringa di testo appena ricevuta. Per fare questo, il vostro programma "grazie.php" utilizza la funzione PHP
Per separare le righe che compongono il messaggio ricevuto dal server HTTPS di PayPal, utilizziamo la funzione PHP
anche se è possibile che questa conversione venga effettuata direttamente da PHP ( PHP legge
La variabile
il programma esegue tutte le restanti righe del codice.
Il blocco
per eseguire una ricerca ( senza sostituzione ) all'interno di una stringa, e l'operatore:
per eseguire una ricerca con sostituzione all'interno di una stringa, PHP mette a disposizione le due funzioni:
Per il resto, la sintassi delle espressioni regolari è esattamente la stessa usata negli esempi del precedente articolo. Identica è anche la parte finale del programma, che verifica il valore della variabile:
per poi stampare tutte le variabili ricevute. Scrivere lo stesso programma in Perl, potrebbe rivelarsi un po' più complicato. Perl, infatti, per supportare le transazioni HTTPS, mette a disposizione alcune librerie, quali:
Se aveste installato la libreria
Intanto, accedete al vostro account PayPal ( o Sandbox ) ed impostate la pagina di ritorno PDT, inserendo, come pagina di ritorno, un file Perl, che andremo a creare ora: "grazie.pl".
I campi della form HTML, invece, saranno gli stessi generati nel precedente esempio PHP, visto che la pagina di ritorno PDT non prevede alcun campo HTML obbligatorio supplementare. Prima di creare il file Perl, dovremo creare il file PHP che avrà il solo compito di effettuare la connessione al server HTTPS di PayPal:
Salvate questo file, con il nome "gr.php" ( o come preferite ) ed installatelo, sul vostro server HTTP, in una cartella a vostro piacimento. In questo esempio, lo mostrerò installato nella cartella "cgi-bin", insieme al file "grazie.pl". Come potete vedere, questo file è molto simile al programma PHP che abbiamo utilizzato prima, con due sostanziali differenze:
L'array associativo
L'interfaccia utilizzata definisce le modalità di invocazione di PHP, oltre ad una serie di variabili e/o di funzioni disponibili. Le interfacce più utilizzate sono:
Di default, i server, soprattutto i server di hosting, utilizzano la SAPI CGI, la quale non processa gli argomenti inviati da linea di comando ( o da QUERY_STRING ). Per sapere in quale modalità viene eseguito PHP sul vostro server, create un file "test.php" con scritto:
e vedrete stampato a video il nome della SAPI utilizzata ( "cgi", "cli" ). Oppure, create lo stesso file "test.php" e scrivete:
Una volta eseguito "test.php", cercate la voce "Server API". Naturalmente, se il vostro server supportasse le chiamate CLI ( Command Line Interface ), da riga di comando, sarà necessario apportare solo qualche lieve modifica sia al file Perl, sia al file PHP. Per semplicità, ho scelto la modalità CGI, anche se più dispendiosa, perchè dovrebbe funzionare in ogni caso. Vediamo ora il file "grazie.pl".
Una parte di questo file dovrebbe essere già comprensibile, visto che abbiamo utilizzato funzioni e meccanismi già usati nel precedente esempio in Perl. La riga:
dice a Perl di caricare il modulo Perl
Il nostro UserAgent
del vostro programma "grazie.pl". Nel precedente articolo, "PayPal: la pagina di ritorno, PDT e IPN", abbiamo parlato della modalità Perl di esecuzione Taint Mode, impostata nella prima riga del programma:
Taint Mode è una modalità di esecuzione che costringe l'interprete di Perl a verificare costantemente che qualsiasi variabile, il cui valore sia prelevato dall'esterno, non venga mai passata alla shell dei comandi. La variabile d'ambiente
Le variabili, oggetto dell'attenzione di Taint, sono le variabili in arrivo dal server HTTPS di PayPal, tra le quali dovremmo trovare anche la variabile
PayPal, chiamando il vostro programma PDT, invia alcune variabili, di cui la più importante, per voi, è la variabile
La sola novità di queste righe è rappresentata da quelle espressioni regolari applicate alle variabili
Sappiamo già, dal precedente articolo, "PayPal: la pagina di ritorno, PDT e IPN", che le parentesi tonde, all'interno di una stringa di ricerca (
significa: salva in
senza il timore che il modulo
A questo punto, la variabile
Come potete vedere, la stringa di testo ricevuta è composta dagli header HTTP e dalla risposta del server HTTPS di PayPal. Gli header HTTP sono gli header relativi alla connessione tra il vostro programma Perl ed il vostro programma PHP.
Quindi, sono gli header inviati dal vostro server HTTP e non dal server HTTPS di PayPal. Gli header del server PayPal, se ricordate, li avevamo esclusi, impostando l'opzione
Gli header HTTP sono separati dal corpo del messaggio ( contenente le variabili PayPal ) da due caratteri consecutivi "a capo":
Quindi, risalviamo in
il contenuto del primo elemento del nuovo array
è la riga contenente l'esito della transazione PDT ( SUCCESS / FAIL ).
Se il vostro server supporta le transazioni SSL e ha installato il modulo Perl
Apportate queste variazioni, il vostro programma "grazie.pl" eseguirà la transazione, chiamando la libreria Perl Nella guida PayPal Order Management Integration Guide troviamo alcune avvertenze utili, relative a PDT. 1) 2)
i vostri utenti non saranno obbligati ad iscriversi a PayPal, prima di eseguire il pagamento. In questo caso, però, il reindirizzamento alla vostra pagina di ritorno PDT non sarà automatico. Come nel caso della pagina di ritorno semplice, al vostro utente verrà presentato un bottone "Continua". Solo se il vostro utente premerà quel bottone, verrà avviata la chiamata al vostro programma PDT. 3) 4) 5)
|
|
PayPal Payment Data Transfer ( PDT ) | The .bit guides: original contents |