Ti consigliamo di progettare il codice in modo tale da mantenere i tuoi dati in uno stato valido.
La grande responsabilità che si deve affrontare è che si inviano i dati per Auth/Capture, e quindi, per qualsiasi ragione, qualcosa sulla propria parte non riesce. Hai addebitato il tuo cliente, ma per qualsiasi motivo, non sai questo fatto! Alla fine, un cliente irato inizierà a urlare per telefono. È un brutto momento.
L'idea generale è di mettere alcune misure di sicurezza in atto in modo da poter identificare questo tipo di problemi. Il problema dovrebbe essere molto raro, se mai dovesse succedere, quindi risolvere il problema sarà probabilmente un processo manuale.
Ecco cosa farei:
- design una tabella di database che tiene traccia dei pagamenti (chiamiamolo "pagamento"), e si riferiscono al vostro tavolo "ordine" (riferimenti così payment.order_id order.id).
- Quando è il momento di interagire con il gateway, impostare un nuovo record di pagamento, contenente tutti i dati non sensibili che si sta per passare al gateway di pagamento. Avere una colonna "stato" nella tabella dei pagamenti e impostarla su "in sospeso"
- Tentare la transazione di autenticazione/acquisizione con il gateway. Dopo aver ricevuto una risposta, aggiornare lo stato del record di pagamento su "approvato", "rifiutato" o "errore" e salvare eventuali metadati pertinenti (motivi di rifiuto, ID transazione, ecc.). Se il gateway va in timeout, probabilmente si tratta solo di una sorta di "errore", anche se potresti riprovare una o due volte.
Eseguire un cron job ogni tanto cercando i record di pagamento "in sospeso" e più vecchi di, diciamo, 30 secondi. Se ne trovi qualcuno, prendi il panico e dillo a uno sviluppatore/operatore.
Ci sono sicuramente altre cose che potrebbero andare storte, ma questo è il grande che mi viene in mente e la strategia che ho descritto è quella che ho usato in più occasioni per mitigare il rischio.
Cosa intendi per "grandi volumi di transazioni"? Puoi darci una stima approssimativa? – webbiedave
Fai un favore ai tuoi utenti e integrali con Paypal, Google Checkout, ... – Stephen
al momento solo circa 200 al giorno, ma ci si aspetta che aumenti presto a circa 1000. quindi ancora abbastanza piccolo, ma abbastanza grande che dobbiamo prendere alcune precauzioni e scrivere codice robusto in grado di gestire problemi imprevisti come timeout del server e problemi di concorrenza. – nick