Attualmente sto progettando un sistema di voucher da implementare nella nostra applicazione di e-commerce aziendale.
Al momento ho una tabella voucher nel database che contiene le seguenti informazioni:
- Codice voucher unico
- Conteggio rimanente voucher - > Quante volte è possibile utilizzare questo buono nella transazione di acquisto
- Altre colonne
Attualmente, il cliente inserisce il codice del buono nella pagina di pagamento, prima che avvenga il pagamento (utilizzando carta di credito e internet banking).
Utilizzo il gateway di pagamento ospitato, il che significa che reindirizzo il cliente al sito Web del gateway di pagamento. Lì l'input del cliente e completare il pagamento e reindirizzato al nostro sito web
La mia domanda riguarda quando dovrei decrementare il numero rimanente di conteggi informazioni?
Ho preso in considerazione due alternative, come segue:
- Il cliente inserisce il codice del buono e spinge il pulsante di conferma del codice del buono. Ci sarà una chiamata ajax per convalidare il codice del buono, ottenere l'importo della transazione scontata e quindi decrementare il conteggio rimanente del buono. Il punto debole di questa soluzione è che, quando il pagamento non riesce o lo stock si esaurisce all'improvviso, il buono è già utilizzato, quindi il cliente si arrabbia.
- Il cliente inserisce il codice del buono e spinge a convalidare il codice del buono. ci sarà una chiamata ajax solo per ottenere la convalida del codice e l'importo della transazione scontata a causa dell'utilizzo del buono. Decrementiamo il conteggio rimanente del buono dopo che il pagamento è stato eseguito correttamente. La debolezza di queste soluzioni è che, se dopo il pagamento, il conteggio rimanente del voucher è già diventato zero a causa di un altro utilizzo da parte di clienti diversi, significa che abbiamo addebitato l'importo della transazione errata e abbiamo subito una perdita.
Esistono altre alternative migliori rispetto a quelle di cui sopra o dovrei semplicemente scegliere una delle soluzioni di cui sopra?