2013-02-11 4 views
6

Sto sviluppando un sistema di biglietteria online per eventi (come i concerti). Una parte fondamentale è una tabella dei posti in cui ai visitatori verranno presentati i posti disponibili/i biglietti tra cui scegliere. Una volta effettuata una selezione, il sistema tenta immediatamente di prenotare i biglietti per 10 minuti (inserendo gli ID ticket in una tabella in cui l'ID ticket è la chiave). Solo se la prenotazione ha avuto successo, viene presentato un pulsante paypal per effettuare il pagamento.Prenotazione biglietti online con PayPal: impedisce a più visitatori di acquistare lo stesso biglietto

Tutto questo funziona bene. La prenotazione del biglietto non è un problema per me. Posso gestirlo nel mio sistema. Ma una volta che paypal entra in gioco, le cose si fanno difficili.

Il problema: Se l'utente per qualche motivo spende un sacco di tempo in Paypal (più di 10 minuti), la prenotazione di biglietti sul mio sito scadrà, permettendo che i biglietti per essere acquistati da un altro visitatore, che potrebbe accadere prima che il visitatore 1 effettui il pagamento. Il visitatore 1 non vede nulla di tutto questo perché è ancora in paypal ... Ad un certo punto nel tempo, riuscirà a effettuare il pagamento (ad esempio dopo 15 minuti), che funzionerà perfettamente perché paypal non sa nulla di prenotazioni scadute .

Alla fine, potrei avere due visitatori che hanno pagato lo stesso biglietto/posto!

Come posso evitare che ciò accada? Come gestisci le condizioni di gara se due sistemi sono coinvolti e uno di questi è fuori dal tuo controllo?

Il mio pensiero era: in realtà un assegno deve essere effettuato prima del pagamento, ma ovviamente non ho il controllo su ciò che accade in paypal!

So che posso usare l'IPN di Paypal e così via, ma questo succede solo DOPO il pagamento che è troppo tardi.

In alternativa, sarebbe fantastico se PayPal mi chiedesse tramite API di confermare un pagamento. Quindi potrei dire "no" nel caso in cui i biglietti siano stati venduti a qualcun altro. Ma non penso sia possibile con paypal.

risposta

2

Si consiglia di utilizzare Pagamento express. Il Pagamento express ti consente di controllare il momento in cui il pagamento viene eseguito, perché dovrai attivare una chiamata API a PayPal per elaborare effettivamente il pagamento.

L'altra possibilità che è possibile esaminare consiste nell'utilizzare un'autorizzazione anziché una transazione di vendita. In questo modo, se un altro acquirente prende posto, puoi annullare l'autorizzazione e l'acquirente non verrà addebitato. (Tuttavia, PayPal ti addebiterà l'autorizzazione annullata.)

+0

grazie. Checkout rapido suona bene e lo cercherò. Riguardo la seconda parte: questa è una caratteristica specifica di paypal? Ho cercato e non ho trovato nulla riguardo all'autorizzazione. – user1595494

+0

No, le autorizzazioni sono piuttosto standard nel settore delle carte di credito. Questa pagina offre una buona approssimazione dei diversi tipi di pagamento offerti da Express Checkout: https://www.x.com/developers/paypal/documentation-tools/express-checkout/integration-guide/ECRelatedAPIOps –

1

Una soluzione suggerita da Matt Cole è utilizzare "autorizzazione" anziché "vendita".

È possibile eseguire questa operazione impostando 'intent' su 'authorize' anziché su 'sale' ({intent: "authorize"}) nelle chiamate all'API Paypal quando si crea un pagamento Paypal. Una volta che il cliente approva la transazione, spetta a te autorizzare questa transazione acquisendo il pagamento.

Problemi correlati