fix(checkout): restaurar carrito al volver del redirect sin completar pago#5
fix(checkout): restaurar carrito al volver del redirect sin completar pago#5Sebah01a wants to merge 1 commit into
Conversation
Magento consumes the quote (cart) when placing the order before redirecting to Fintoc. If the customer hits browser back without completing payment, the cart appears empty. Restoring the quote right before returning the redirect_url keeps the cart alive during the redirect. The success page clears the quote naturally on payment completion; the cancel callback is idempotent (already calls restoreQuote in processCancelAction).
| throw new LocalizedException(__('Invalid response from Fintoc API')); | ||
| } | ||
|
|
||
| try { |
There was a problem hiding this comment.
No entendí, cuando se llama esto? Antes de redireccionar al usuario al Checkout de Fintoc? Si es así, no creo que sea la mejor opción, puede pasar que tengas 2 pagos al mismo tiempo para el mismo carrito.
There was a problem hiding this comment.
La Anto me acuerdo que estaba haciendo algo para hacer expired el pago cuando el usuario se va de la página, tal vez es mejor escuchar ese webhook y con eso devolver el carrito
There was a problem hiding this comment.
Esto se llama cuando el usuario vuelve del Checkout de Fintoc, pero no por el cancel_url, entonces lo que antes pasaba es que el carrito no se hacíaa restore (solo se hacía cuando llegaba por cancel_url). Por eso aplicamos esta misma lógica fuera del scope
EDIT:
Me confundí, si se llama antes de redireccionar al usuario al Checkout. Dejé una demo en la descripción para mostrar el flujo. Entiendo que podría generar 2 CS para el mismo carro, pero al final el pago sería solo desde una CS. O lo dices porque el dashboard de magento mostraría carritos "fantasmas"?
There was a problem hiding this comment.
pero al final el pago sería solo desde una CS
Mmmm pero es que esto puede no ser verdad, una persona podría tratar de pagar el mismo carrito 2 veces y creo que eso trae mas problemas. Estilo:
- Aprieto pagar -> Me voy a nuestro Checkout.
- Vuelvo al carrito sin cerrar el Checkout orginal.
- Aprieto pagar de nuevo -> Me voy a nuestro Checkout.
- Completo el pago en 2 partes -> Pague 2 veces el mismo carrito
There was a problem hiding this comment.
Entiendo. Podríamos expirar cada CS que sea abandonada
Porque el webhook expired sería solo cuando pasa el tiempo de vida de la CS o no?
me imagino que podemos hacer esto:
- Usuario sale del Checkout
- Se obtiene la última orden que hizo (la que se acaba de salir)
- Usamos el endpoint
expirede la CS para - Creamos una nueva CS si pone pagar de nuevo.
Consideraciones: el expire solo funciona para CS en created, por lo tanto con CS in_progress habría que redirigir de vuelta a la misma CS
Que opinas de algo así?
There was a problem hiding this comment.
Mmm igual me parece! Si el pago esta in_progress no redirigiria de vuelta al Checkout si no que esperaría que cuando llegue el WH dependiendo del estado que hacer con el carrito! Igual confirmaría con producto que opinan de funcionar así
Contexto
Cuando el cliente vuelve al store sin completar el pago en Fintoc (botón atrás del navegador), el carrito aparece vacío. Magento cierra el carrito al crear la orden antes del redirect, y los handlers existentes con
restoreQuote()solo se ejecutan cuando Fintoc redirige porcancel_url. Entonces cuando el usuario volvía atrás, por otro lado que no sea elcancel_url, no se restauraba el carrito.quote = carritoCausa raíz
Place Order→ Magento crea la orden →quote.is_active = 0(carrito muerto)redirect_urlpay.fintoc.comCommitcontroller →restoreQuote()no se ejecuta →/checkout/cartlo ve vacío.Solución
Agregar un
restoreQuote()enController/Checkout/Create.phpjusto antes de devolver elredirect_urlal frontend.Grabacion.de.pantalla.2026-05-08.a.la.s.5.35.15.p.m.mov