Salve, ho realizzato un sito con sistema di pagamento online che permette l'acquisto di articoli con una disponibilità limitata degli stessi.
Ho implementato il sistema di pagamento paypal con IPN per l'aggiornamento delle transazioni interne al sito e tutto funziona alla perfezione.
MA
Ho scoperto uno scenario dal quale non so come discricarmi:
1: C'è un solo articolo disponibile
2: l'acquirente A inizia il pagamento paypal senza concluderlo
3: l'acquirente B che intende acquistare lo stesso oggetto, inizia il pagamento paypal senza concluderlo.
4: a questo punto UNO dei due acquirenti completa il pagamento prima dell'altro che segue subito dopo, paypal dice che va tutto OK a entrambi e tramite l'IPN aggiorno il database così da scalare la quantità ma a questo punto, uno dei acquirenti si trova nella situazione di aver pagato una cosa che non avrà (perchè la disponibilità è esaurita).
Chiarito lo scenario, cosa posso fare per evitare che si verifichi questa situazione?.
1: Dovrei in qualche modo avvisare paypal che la transazione non è valida per via dell'esaurimento dell'articolo ma, a quanto ho letto in giro, non posso farlo tramite l'IPN.
2: Potrei bloccare la disponibilità in anticipo registrando queste "opzioni" nel mio DB e facendole scadere (per esempio) dopo mezz'ora. Solo che se l'utente paga con mezz'ora di ritardo con paypal, si ritrova, anche in questo caso, ad aver pagato una cosa che potrebbe essere non più disponibile in quanto prima liberata dalla scadenza del tempo e poi acquistata da qualcun'altro.
In questo caso potrei specificare una "data di scadenza del pagamento", trascorsa la quale, paypal non deve accettare pagamenti per quella specifica transazione.
3: Ritornando all'ipotesi che scalo la quantità a pagamento avvenuto, mi pare che in Paypal c'è un opzione che permette al negoziante di controllare i pagamenti inviati e scegliere manualmente se accettarli o annullarli, restituendo i soldi all'acquirente.
Sapete darmi info su questa opzione del paypal Seller?
Infine, avete altri suggerimenti sulla questione? Come avete gestito una situazione del genere?
La documentazione paypal non è di molto aiuto in proposito.