Il modo in cui di solito queste cose funzionano è più o meno così:
- Il cliente procede al checkout sul tuo sito di acquisti.
- Il tuo sito reindirizza al responsabile del pagamento, inviando i dati richiesti insieme alla richiesta (ID del tuo sito, importo, commenti, ecc.).
- Pagamento dei processi di elaborazione dei pagamenti.
- Il processore dei pagamenti reindirizza nuovamente al tuo sito.
- Il tuo sito verifica che il pagamento sia andato a buon fine e, in tal caso, completa l'ordine.
Il passaggio 3 è interamente tra il cliente e il processore di pagamento; il tuo sito è completamente fuori dal ciclo a questo punto.
Per il passaggio 5, ho visto tre approcci.
Il più solido è che il processore di pagamento ti passa semplicemente un ID transazione (nel passaggio 4), che puoi utilizzare per chiamare un servizio web fornito dal processore di pagamento, e questa chiamata ti dirà che l'ID della transazione effettivamente corrisponde alla tua richiesta ed è stato davvero un successo. Poiché il servizio web non è pubblicamente accessibile e la risposta contiene una sorta di token che identifica in modo univoco il tuo ordine, un cliente non può rieseguire il reindirizzamento sul tuo sito per riutilizzare il pagamento andato a buon fine.
Il secondo approccio fa lo stesso, ma al posto del sondaggio del provider di pagamenti, il fornitore di servizi di pagamento ti invia un messaggio. Il problema con questo approccio è che devi controllare lo stato dei pagamenti in modo asincrono, il che a sua volta significa che l'ordine del cliente non può essere completato direttamente dopo il reindirizzamento.
Il terzo approccio utilizza la crittografia per passare l'intera verifica attraverso il client. Questo di solito viene fatto inviando informazioni di pagamento complete, firmate digitalmente dal processore di pagamento, insieme alla richiesta. Il lato positivo di questo è che la chiamata di servizio web extra tra il server e il processore di pagamento non è necessaria, ma come svantaggio, tutte le informazioni sensibili passano attraverso il client, il che significa che la superficie di attacco è più grande - un acquirente malintenzionato potrebbe archiviare la risposta di pagamento, prova a decifrare la chiave utilizzata per firmare il messaggio e quindi a produrre le proprie risposte false sugli ordini futuri senza coinvolgere affatto il vero processore di pagamento. Questo è un problema, perché il tuo server penserà che il pagamento sia stato effettuato, mentre il processore di pagamento non ha assolutamente la minima idea che tutto stia accadendo.
Questa procedura è per lo più la stessa sia che si tratti di una carta di debito o di credito; la differenza sta in ciò che fa il processore di pagamento e ciò che esattamente dipende dalla carta, dall'emittente della carta, dalla nazione e da altre cose.