Un timeout de passarel·la és ambigu: el client pot veure un error quan el proveïdor ja ha acceptat el pagament. El disseny segur assumeix que la resposta del navegador es pot perdre i protegeix creació/cobrament amb identificadors estables i conciliació.
No demanis reintentar immediatament
Comprova primer si existeix comanda o intent de pagament. Un reintent a cegues pot crear un segon càrrec abans que arribi el callback.
Usa idempotència quan existeixi
Lliga la petició de pagament a una clau estable de checkout/comanda. Repetir la mateixa operació de xarxa hauria de recuperar el mateix pagament.
Conserva la comanda abans de sortir
Crea un estat recuperable amb dades suficients per reconciliar la resposta encara que el navegador esgoti el temps.
Accepta webhooks tardans
Un esdeveniment d’èxit posterior ha de moure la comanda existent a pagada una sola vegada. Estoc, correus i fulfilment també s’han de protegir contra duplicats.
Concilia els casos ambigus
Crea una vista operativa per “client ha vist error / estat del proveïdor desconegut” i compara ID, import i clau abans de capturar o retornar manualment.
Usa el rastreig de pagaments per reconstruir la transacció i comprovar si el cobrament ja existeix.
Dissenya l’estat de recuperació per al client
Després d’un timeout ambigu, el missatge segur no és “pagament fallit” ni “pagament correcte” fins que acabi la conciliació. Mantén la comanda recuperable, mostra que s’està comprovant la confirmació i evita reenviaments ràpids. Si el cobrament ja existeix, compara també la comanda pagada que continua pendent.