2009-11-24 13 views
8

questa domanda è simile a this one ma con un tocco (così la risposta accettata per la domanda più vecchio non è valido per il seguente scenario)e-commerce gestione del magazzino con il pagamento esterna del gateway

Ho un sito per la vendita di biglietti (PHP/MYSQL). Supponiamo che io sono solo a sinistra un biglietto:

  • acquirente A mette il biglietto nel suo carretto e va alla pagina di gateway di pagamento (ad esempio PayPal.)
  • il biglietto è bloccato per 5 minuti, quindi acquirente B non può comprare si
  • acquirente Un attende 5 minuti con la pagina paypal aperta, non fare nulla
  • il biglietto è sbloccato in modo acquirente B mette nel suo carretto e va alla pagina di PayPal
  • acquirente a esegue la procedura di pagamento su paypal con successo
  • l'acquirente B esegue la procedura di pagamento su paypal con successo

posso aspettare più a lungo, ma non penso che questo risolva il problema nel caso più generale. inoltre, se lo faccio, sarà possibile fare qualche tipo di DoS, bloccando gli articoli in magazzino per lunghi periodi di tempo.

qual è il modo migliore per gestire questo scenario?

risposta

1

Che ne dici di una soluzione più sociale anziché tecnica? Perché non rendere assolutamente ovvio che un biglietto diventerà sbloccato quando aspetti troppo a lungo?

+0

questo non risolverà il problema perché, anche se è ovvio, entrambi i pagatori finiscono per fare due pagamenti legali per un articolo. – gpilotino

+0

Sì, hai ragione, non impedirà a uno dei due clienti di acquistare un biglietto nel modo descritto. Potresti anche dire che il primo cliente ha aspettato a lungo. Forse puoi includere la regola dei 5 minuti nella richiesta di Paypal ...? –

+0

in questo caso la domanda diventa: fare (tutti) i timeout di supporto (configurabile) dei gateway di pagamento? anche se, questo risolverà solo il primo tempo =) – gpilotino

6

Tutti i gateway di pagamento faranno un postback per farvi sapere (es.) Il riferimento di pagamento ecc. La maggior parte invierà anche le informazioni di autorizzazione/autenticazione, come i risultati di controllo CSC/CVV2 in modo che voi (il commerciante) abbiano l'ultima parola se accettare il pagamento o meno.

Al ricevimento del postback dovresti essere in grado di controllare se il biglietto è ancora "bloccato" e, in caso contrario, emettere un'inversione di pagamento tramite il gateway di pagamento per annullare il pagamento. È quindi necessario visualizzare un messaggio 'scusate, timeout superato, riprovare'

Se il gateway non supporta una funzionalità di stile di "inversione istantanea", quindi supporterà almeno una sorta di funzionalità "vuota" in base alla quale i fondi sono mai effettivamente prelevato dalla carta cliente e la sospensione di autorizzazione si interrompe automaticamente (di solito dopo due giorni, anche se su alcune carte potrebbe richiedere più tempo). Per il (presumibilmente piccolo) numero di transazioni in time-out, questo può essere accettabile. Sarebbe opportuno monitorare il numero di timeout delle transazioni in modo da poter regolare il periodo di timeout.

In alternativa, se il ticket non è più bloccato, (e di nuovo, se il gateway lo supporta) inviare un pagamento di rimborso.

+0

dopo che il postback è avvenuto dopo che il pagamento è scaduto, quindi entrambi gli utenti troveranno meno denaro sul loro cc all'improvviso. correggimi se ho torto, ma questo sarà l'equivalente di andare manualmente al back-end del gateway di pagamento e controllare "non accettare questo pagamento" (le inversioni di pagamento di solito impiegano giorni quindi voglio evitare di far fronte a migliaia di euro probabilmente). – gpilotino

+0

Non parlo per ogni gateway, ma so che la maggior parte di quelli del Regno Unito ti permettono di inviare un messaggio di 'inversione' per annullare il pagamento. Si tratta di un'inversione istantanea e non impiega i soliti due o più giorni per abbandonare. – PaulG

+0

bello sapere, ti inviterò che grazie – gpilotino

1

Penso che non si dovrebbe bloccare il biglietto se qualcuno lo mette nel suo carrello come in quei 5 minuti. potresti finire per allontanare altri clienti ...

Ti suggerisco di consentire a tutti di aggiungere il biglietto al suo carrello a meno che qualcuno non effettui effettivamente il pagamento e lo acquisti. Ora, quando gli altri procedono per il checkout, basta far lampeggiare un messaggio come "Scusa Sei in ritardo ... Biglietto esaurito !!!" e il biglietto dovrebbe essere rimosso dal loro carrello.

In questo modo il biglietto non verrà bloccato dai clienti e comunque lo scenario di due persone che effettuano il pagamento per lo stesso biglietto non si presenterà.

+3

sai se il pagamento è completato con successo solo dopo che è stato finalizzato. se entrambi gli utenti sono già in pagamento (es.paypal) non hai il controllo: pagheranno entrambi (su paypal) per l'ultimo biglietto. – gpilotino

2

È probabile che non è possibile utilizzare una pagina di ingresso gateway di pagamento esterna e fare ciò che si sta tentando di fare.

Paypal e molti altri processori hanno un percorso di integrazione del servizio web diretto. Ciò significa che raccogli le informazioni di pagamento sulla tua pagina, che vengono inviate al tuo server e fai la chiamata al servizio web e ricevi una risposta immediata dal processore. (Non ricordo cosa PayPal chiama il prodotto che fa questo, ma si chiamava PayFlow Pro ed è stato acquistato da Verisign.)

Quindi non bloccare i biglietti quando vengono inseriti nel carrello. Il tuo flusso di lavoro sarà:

  1. Raccogliere le informazioni di pagamento.
  2. Una volta che le informazioni di pagamento vengono registrate sul server: a. Prova a bloccare i biglietti - restituire un errore se non disponibile b. In caso di blocco riuscito, elaborare l'autorizzazione
  3. In caso di autorizzazione riuscita, i ticket vengono rimossi dal pool disponibile.
  4. In caso di autorizzazione o errore non riusciti, i biglietti sono sbloccati e disponibili per altri utenti.

Non è necessario gestire i timeout di blocco. Sono bloccati solo il tempo necessario per verificare un pagamento valido.

Non hai chiesto di risolvere il problema impedendo l'esposizione PCI. Dal momento che probabilmente chiedi:

Ci sono processori là fuori che ti permettono di incorporare la raccolta di informazioni di pagamento nella tua pagina. Ci sono alcuni che ti permettono di ottenere un "token" per sostituire un numero di carta in modo che il tuo server non riceva mai un numero di carta. Il token può quindi essere utilizzato nella chiamata al servizio web sul lato server. Ottieni ciò di cui hai bisogno e non devi occuparti dei problemi PCI relativi alla ricezione dei numeri di carta.

Problemi correlati