Come integrare il pagamento online Paypal al tuo sito | NEXT chapters |
Con Paypal puoi fare shopping in tutto il mondo in modo gratuito e sicuro sia con carta di credito ( Visa, Visa Electron, MasterCard ), sia con carta prepagata ( Postepay, Vodafone Cash Card, Kalibra ed altre ancora ), senza condividere le tue informazioni finanziarie con chi riceve il pagamento. Quando accedi al loro sito, PayPal verifica che sul browser internet che utilizzi sia in esecuzione Secure Sockets Layer 3.0 ( SSL ) o la versione successiva. Le informazioni inviate dal tuo computer a PayPal vengono protette mediante SSL, con una chiave di crittografia pari a 128 bit ( la lunghezza massima disponibile ora in commercio ). Allo stesso tempo, PayPal è un ottimo strumento per ricevere i pagamenti dal tuo sito web. Il processo è molto semplice:
Se la transazione è andata a buon fine, troverai sul tuo conto Paypal la somma appena pagata dall'utente, detratti i costi della transazione stessa. Come è possibile capire da questo breve prospetto, il sistema di pagamento Paypal potrebbe essere integrato ai contenuti del tuo sito web con estrema facilità, anche se, in questo caso, non avresti alcuna parte nel processo e dovresti, al ricevimento della e-mail di conferma di Paypal, aggiornare manualmente le tabelle di database interessate, prelevando i dati dalla e-mail stessa. Fortunatamente, Paypal prevede la possibilità di interagire con il programma di pagamento, in modo da automatizzare anche gli aggiornamenti da apportare al tuo gestionale. Utente Commerciante Carrello elettronico
In molti casi, la funzione del carrello elettronico si riduce alle funzioni dei punti: EF. Si tratta di casi particolari in cui il catalogo è, in realtà, composto da un solo prodotto. Il prezzo, in questo caso è unico e sempre ben definito. Può solo variare la quantità: quindi, in questi casi, il carrello elettronico dovrà semplicemente aggiornare il totale da pagare calcolandolo sulla quantità dei pezzi richiesti dall'utente. Visto che l'oggetto di questo articolo è l'integrazione del sistema di pagamento Paypal al nostro sito web, partiremo proprio da questo caso particolare. Il nostro carrello elettronico, quindi, avrà come pagina di partenza una pagina che riporterà già il prezzo totale dell'acquisto da completare. Nel caso, invece, di un catalogo composto da più prodotti, il compito della gestione delle fasi precedenti l'acquisto verrà svolto dal carrello elettronico, ma il punto di partenza della transazione finanziaria sarà sempre e comunque la pagina in cui sarà riportato il totale della transazione ( comprese le spese di spedizione, trasporto, tasse, etc. ). Paypal, infatti, prevede la possibilità di trasmettere ai suoi server le informazioni relative a ciascun prodotto, ma perchè complicarci la vita? La funzione di Paypal è di accettare pagamenti in nostra vece: per accettare un pagamento, la sola informazione utile è il totale della somma da incassare! Il primo passo per accettare pagamenti online con Paypal è: creare un proprio account Paypal. La creazione di un account Paypal è completamente gratuita. Paypal, infatti, richiede esclusivamente una piccola percentuale ( fino al 3,4% ) sulle vendite effettivamente incassate, più un fisso di 0,35 euro per ogni transazione. Vediamo, in dettaglio, i costi per l'utilizzo di Paypal:
Le tariffe per la ricezione dei pagamenti a seguito dell'acquisto di merci e servizi variano a seconda del volume di vendite mensile ( pagamenti di acquisto ricevuti su base mensile ):
Tutto questo per dire di aprire con tranquillità un nuovo account PayPal. Clicca qui per aprire il tuo nuovo account PayPal e clicca su "Registrati oggi stesso". Scegli un account Premier o Business ( non Personale ): infatti, il conto Personale serve esclusivamente per pagare con carta di credito, non per ricevere denaro. La differenza tra i conti Premier e Business è che a quest'ultimo sono permessi gli accessi multiutente. Appena aperto il tuo account, PayPal ti chiedera' se vuoi inserire la tua carta di credito per accreditare il tuo conto: NON farlo, al momento, perche' non e' necessario. Infatti, il conto Paypal serve sia a pagare, sia a ricevere il denaro ( il tuo caso ). Mentre per pagare serve ovviamente una carta di credito, per ricevere denaro non serve. Ora che hai registrato il tuo nuovo account Paypal, puoi creare il bottone Paypal all'interno del tuo sito. Il bottone Paypal altro non è che un bottone di input per una form che trasporta i pochi dati necessari a Paypal per concludere la transazione. I dati necessari sono:
Con "codice identificativo della transazione" intendiamo il codice generato dal tuo programma di carrello elettronico relativo a questa specifica transazione, il codice che dovrebbe anche essere una chiave primaria all'interno di una tabella del database in cui hai memorizzato le poche ( ma essenziali ) informazioni disponibili sulla transazione stessa ( punto 2a del primo paragrafo di questo scritto ). Ogni campo di questa form dovrà essere nominato, naturalmente, con il nome previsto dai protocolli di Paypal:
C'è una ulteriore variabile che dovresti compilare e che conterrà il nome della transazione che verrà mostrata al tuo utente durante il processo di pagamento. Se, per esempio, l'utente sta acquistando uno o più oggetti dal tuo negozio virtuale, che si chiama "Shopping Center" ( o qualsiasi altro nome di fantasia ), potrai nominare questa variabile con il testo:
Prima di continuare nella compilazione della form di invio a Paypal, si rende necessaria una precisazione. Se i campi business, amount, currency_code e item_name vengono effettivamente utilizzati da Paypal ( business dice a Paypal a quale account accreditare questa transazione, amount dice a Paypal la somma da richiedere all'utente, currency_code dice a Paypal in quale valuta accettare il pagamento, item_name dice a Paypal quale descrizione della transazione stampare nella pagina dell'utente ), il campo custom è un campo di cui Paypal non sa che fare! Se inviassi solo questi campi della form, Paypal processerebbe il pagamento e ti invierebbe una mail di conferma senza saperti dire a quale transazione precisa il pagamento corrisponde, poichè nella mail di conferma NON viene riportato il campo custom. Se nella tua tabella di database, tu avessi due o più transazioni dello stesso importo, non saresti in grado di dire a quale di questi record la transazione si riferisce. Come possiamo utilizzare, dunque, questa variabile custom? Vediamo come la definisce Paypal: "Variabile di tipo pass-through che non verrà mai visualizzata dal cliente. Se la variabile viene omessa, non ti sarà restituita alcuna variabile". Pass-through significa, sostanzialmente, che se Paypal la riceve, semplicemente te la reinvia indietro, senza nemmeno sfiorarla, come campo POST, in una eventuale transazione successiva. Avrai già intutito, quindi, che Paypal permette al commerciante di scegliere se ricevere, oltre alla mail di conferma, un qualche messaggio HTTP immediatamente successivo alla transazione. Scegliendo di ricevere un messaggio HTTP, sarai in grado di ricevere, oltre alle variabili impostate da te ( compresa la nostra variabile custom ), anche tutta una serie di informazioni relative alla transazione appena conclusa. Tutte queste informazioni, ti saranno inviate da Paypal come campi POST di una normale chiamata HTTP. Come dire, quindi, a Paypal che si desidera ricevere tutte queste informazioni via HTTP? Paypal rende disponibili più sistemi, ma i principali sono:
Quindi, la soluzione più efficace dovrebbe essere: creare uno script di ricezione dei dati IPN sul nostro server e creare una pagina di ritorno per riaccogliere l'utente, di ritorno dal server Paypal, all'interno del nostro sito. Vorrei, per sicurezza, sottolineare che i due script dovranno essere due differenti script: lo script IPN riceverà i dati della transazione appena conclusa, effettuerà le necessarie verifiche sui dati ricevuti, inserirà questi dati nella relativa tabella del database; lo script di ritorno, invece, riceverà ugualmente i dati relativi alla transazione appena conclusa, ma non li tratterà in alcun modo, servendosene, al limite, solo per ringraziare l'utente dell'avvenuto pagamento. A questo punto, dobbiamo chiederci: come informare Paypal che, per ogni transazione, dovrà chiamare sia lo script IPN, sia la pagina di ritorno? Paypal prevede sia la possibilità di inviare queste informazioni via POST, inserendole nei campi della nostra form, sia di impostarle direttamente dal nostro account Paypal. Mentre allo script IPN dedicheremo un paragrafo a parte in seguito, per lo script di ritorno possiamo già dire che è sempre meglio utilizzare la form HTML, perchè se impostato dall'account Paypal non avremo la possibilità di ricevere i dati della transazione. Ed ecco due ulteriori campi da aggiungere alla nostra form HTML, ambedue relativi allo script di ritorno:
dove:
Per completezza di informazione, precisiamo anche la variabile che eventualmente dovresti utilizzare per attivare anche IPN dalla form HTML ( mentre nella nostra guida imposteremo IPN direttamente dall'account Paypal ):
Bene. Ora dovremmo aver compilato tutti i campi necessari all'avvio del processo di pagamento Paypal. Mancano ancora un paio di informazioni necessarie. La prima è un ulteriore campo di input richiesto da Paypal, nel quale si comunica il tipo di transazione che ci si appresta ad eseguire:
Il valore _xclick identifica il Metodo con Passaggio a PayPal dell'importo cumulativo del carrello, la scelta che abbiamo fatto inizialmente, che prevede l'invio di un singolo nome per l'intero carrello e il prezzo totale del contenuto del carrello come se fosse stato acquistato un singolo oggetto. L'ultima informazione vitale mancante è la URL a cui inviare i dati della nostra form:
Riassumiamo, quindi, l'intera form da preparare nella pagina di avvio del pagamento del tuo sito web:
Ora non ci resta che preparare i due script che Paypal, su nostra indicazione, andrà a chiamare una volta completata la transazione:
Ricorda che fino a questo momento, tu non hai ancora alcuna informazione sul tuo utente: sai solo che desidera acquistare uno o più articoli dal tuo catalogo ( memorizzati nel tuo programma di carrello elettronico ), il cui costo totale ( prodotti + eventuali spese di trasporto, tasse, diritti fissi, etc ) è riportato nel campo amount. Grazie al sistema IPN + pagina di ritorno, Paypal ti invierà tutti i dati relativi alla transazione, eccetto i dati relativi alla carta di credito utilizzata: dati anagrafici dell'utente, eventuale indirizzo di spedizione, importo totale pagato a Paypal, spese trattenute da Paypal per la transazione, importo netto versato sul tuo conto. Un'ultima precisazione: la nostra form è ottimale per attivare il processo di pagamento online di Paypal con carta di credito. Per amor di completezza, aggiungo che Paypal prevede altri campi da integrare, eventualmente, a questa form. Ognuno di essi ha un significato preciso e può essere utilizzato alla bisogna. Puoi trovare una lista completa dei campi accettati dal sistema Paypal alla pagina:
Abbiamo detto in precedenza che sarebbe meglio utilizzare ambedue gli script previsti da Paypal per il controllo della transazione: pagina di ritorno e script IPN. Vorrei sottolineare come Paypal utilizzi ambedue gli script per inviare le stesse informazioni relative alla transazione appena avvenuta. Nonostante ciò, è bene ribadire alcune avvertenze:
Vediamo ora quali sono alcune delle informazioni, le più importanti, che riceverai da Paypal. Paypal invia queste informazioni come una serie di coppie chiave
Esprime il tipo di transazione avvenuta. Il valore web_accept indica una pagamento ricevuto ( il nostro caso ).
Questo campo ( txn_id ) è l'ID della transazione assegnato da Paypal. E' il valore che troverai sia nella mail di conferma di avvenuto pagamento, sotto la voce: "ID della transazione", sia all'interno del tuo account Paypal, nei dettagli della transazione, sotto la voce: "ID univoco della transazione". Quindi, è il primo valore ( chiave primaria ) da inserire nella tabella dei pagamenti Paypal ricevuti.
Questo è il campo creato da te, contenente il tuo ID della transazione ( punto 2a del primo paragrafo ). Questo valore è, molto probabilmente, la chiave primaria della tabella dove tu hai inserito i dati della transazione prima di reinstradare il tuo utente sul dominio Paypal. Quindi, per soddisfare i requisiti della referenzialità, è un valore da inserire nella tabella dei pagamenti Paypal ricevuti, così da riconoscere che la transazione con ID custom ( xyz0000001 ) è stata completata nella transazione Paypal con ID txn_id ( abcdefghilmnopqrs ).
Questi sono i campi dedicati al tuo utente che ha effettuato la transazione. Vediamo il loro significato:
Ci sono, poi, alcuni campi dedicati al commerciante venditore ( tu ):
dove business è il campo identificativo ( ID ) dell'account Paypal del venditore. Se il pagamento è stato inviato all'account principale del venditore, questo campo coincide con il campo receiver_email. receiver_id è l'ID dell'account Paypal del venditore ( il tuo account ).
Questi ultimi, finalmente, sono i campi dedicati alla transazione appena completata. Vediamo il significato dei meno intuitivi:
Abbiamo visto i campi principali che Paypal invia al tuo script IPN. Molti altri campi potrebbero essere inviati da Paypal, soprattutto in relazione alle tue impostazioni iniziali ( cioè, alle Preferenze impostate all'interno del tuo account Paypal e ai campi inviati da te a Paypal con la form di partenza ). Puoi trovare una lista di variabili che è possibile ricevere da Paypal, seguendo questo link. Instant Payment Notification ( IPN ) è un processo composto da tre momenti distinti:
Ci sono due modalità distinte per informare il sistema Paypal che si desidera la notifica IPN:
Il primo sistema ( un campo nella form di invio dei dati a Paypal ) è molto più flessibile del secondo ( il tuo Profilo Paypal ). Infatti, se vuoi accettare pagamenti da differenti siti, puoi inviare URL differenti con programmi IPN diversi per ciascuno dei siti di provenienza. Inoltre, la URL che specifichi nella form di invio dei dati sovrascriverà la URL che eventualmente hai impostato nel tuo Profilo Paypal. La sezione del programma IPN che può essere modificata in base al sito di provenienza del pagamento è la parte relativa alla elaborazione dei dati ricevuti ( punto 3 ), mentre la ricezione dei dati e la notifica a Paypal dell'avvenuta ricezione devono essere presenti in qualsiasi script IPN, ovviamente. La notifica di avvenuta ricezione deve essere inviata a Paypal, affinchè Paypal sia certo che la transazione non è stata intercettata da terzi. Per lo stesso motivo, sarebbe meglio che anche tu verificassi la correttezza dei dati ricevuti da Paypal, quanto meno i dati più importanti, quali: il prezzo, l'ID della transazione ( compreso il tuo campo custom ), il campo receiver_email ( vorresti che il pagamento fosse inviato ad un account diverso dal tuo?? ), e tutti quei campi che riterrai opportuno verificare. In cosa consiste la convalida?
Questo è probabilmente il passaggio più importante da comprendere. Paypal considererà chiusa la transazione, solo nel momento in cui potrà inviarti un VERIFIED, dopo aver ricevuto il tuo POST. Ma la transazione da verificare in questo passaggio non è la transazione economica tra Paypal ed il tuo acquirente, perchè quella transazione è già avvenuta ( ed il suo esito è stato inviato tra i campi ricevuti dal tuo programma IPN ). Il VERIFIED si riferisce al controllo che Paypal effettua sulla sicurezza del colloquio tra te, venditore, e Paypal stesso. Un eventuale messaggio INVALID significherà semplicemente che il tuo programma o non ha ricevuto i dati, oppure ha reinviato a Paypal una stringa non corretta. Ma il pagamento, se è andato a buon fine, non verrà minimamente inficiato dal tuo errore. Quasi sempre un messaggio INVALID rivela un errore di programmazione nel tuo script IPN. Quindi, se hai ricevuto un messaggio INVALID, cerca solo di verificare se questo ha comportato una qualche perdita dei dati che avresti dovuto ricevere da Paypal e se all'interno del tuo account Paypal quella transazione è stata confermata. Se il messaggio INVALID si ripete per più transazioni, verifica se il tuo script IPN contiene un errore di programmazione. Come abbiamo già detto, se Paypal riceve un errore tenterà più volte di ricontattare il tuo script IPN: ma questo non è il nostro caso. Infatti, Paypal tenterà di ricontattare il tuo script IPN solo nel caso in cui dovesse ricevere dal tuo server un messaggio diverso da: "200 OK", cioè se il tuo script in quel momento non è raggiungibile. Un altra osservazione da ribadire è che il tuo script IPN viene chiamato in background da Paypal: quindi, il dialogo tra lo script IPN ed il server Paypal avviene all'insaputa del tuo acquirente. Ciò significa che è inutile tentare di stampare a video un qualsiasi messaggio, perchè nessuno potrà mai leggerlo. Vediamo ora la struttura minima di uno script IPN. Questo script è in Perl:
Qui il dialogo tra il nostro script IPN ed il server Paypal è concluso. Da questo punto in poi, il nostro script dovrà semplicemente elaborare i dati ricevuti da Paypal, verificarne la corretteza ed inserirli in un record della nostra tabella relativa alle transazioni Paypal. Per separare i diversi campi dalla stringa Paypal basterà eseguire queste semplici righe:
L'hash $Main::POST contiene ora tutte le variabili ricevute da Paypal ( sulle quali il metodo GET_POST_decode ha eliminato le codifiche URL presenti ). A questo punto, possiamo eseguire una serie di verifiche sui dati per accertarci della loro correttezza, per poi passare all'inserimento dei dati ricevuti nella tabella di database relativa alle transazioni Paypal. E' difficile rendere in un codice universale questi passaggi, poichè dipendono dalla organizzazione del tuo database, ma possiamo identificare i controlli minimi che andrebbero eseguiti sui dati ricevuti:
L'esempio riportato è in Perl, ma è possibile utilizzare altri linguaggi per la creazione del tuo script IPN. Cliccando il link seguente, troverai alcuni esempi in: ASP.Net/C#, ASP.Net/VB, ASP/VBScript, Cold Fusion, Java/JSP, PERL, PHP.
Puoi trovare una descrizione di IPN alla seguente pagina Paypal: Come testare il pagamento Paypal Durante la preparazione delle tue pagine web per il pagamento online con carta di credito, è possibile eseguire dei test per verificare che tutto funzioni correttamente? E se si, come? Naturalmente, non possiamo eseguire una serie di test utilizzando la procedura standard appena descritta, altrimenti dovremmo, ogni volta, eseguire un pagamento reale! Anche in questo caso, Paypal ci viene in aiuto, mettendo a disposizione del venditore ( tu ) un ambiente virtuale identico all'ambiente reale, un ambiente in cui le transazioni vengono eseguite rispettando alla lettera tutte le procedure previste per i pagamenti reali, ma NON comportano un reale prelievo e un reale accredito alle parti acquirente e venditore. Questo ambiente vituale si chiama SANDBOX. Sandbox è un ambiente parallelo praticamente identico all'ambiente di esecuzione dei processi di pagamento Paypal: come dire, quindi, a Paypal che desideriamo che i nostri script vengano eseguiti all'interno dell'ambiente Sandbox e non nell'ambiente reale?
Lascia inviariato tutto il resto e testa a tuo piacimento il tuo pagamento online, facendo attenzione ad utilizzare, come acquirente, il tuo account virtuale acquirente! Una volta certo che il tuo programma funziona, se vuoi testarlo dal vivo ( cioè utilizzando il tuo account venditore reale Paypal ), riannulla le modifiche appena fatte per l'ambiente Sandbox ed effettua una transazione reale del valore di un centesimo. Attenzione, però: l'account reale dell'acquirente non può essere lo stesso account che hai aperto come venditore. Inoltre, l'acquirente dovrà inserire una carta di credito reale e valida. |
|
Come integrare il pagamento online Paypal al tuo sito | The .bit guides: original contents |