TransbankDevelopers / transbank-plugin-magento2-webpay-rest

Plugin Magento 2 using Transbank REST API
BSD 3-Clause "New" or "Revised" License
4 stars 10 forks source link

Notificaciones repetidas de orden cancelada #77

Closed isaac-sparta closed 4 months ago

isaac-sparta commented 9 months ago

Describe el bug

Si se realiza una compra, y en la pasarela de pago se hace clic repetidas veces en el botón para retroceder ("Anular compra"), la orden en Magento recibirá múltiples notificaciones de orden cancelada de parte de Transbank. Estas múltiples notificaciones de orden cancelada provocarán también que se descuadre el stock vendible de los productos que estaban en el carrito de la orden.

Ejemplo: -Agrego 1 unidad de un producto al carrito, y voy a la pasarela de pago de Transbank. Se crea el pedido que queda esperando confirmación de pago, y se crea una reserva por 1 unidad del producto. El stock vendible baja en 1 unidad debido a esa reserva. -En la pasarela de pago hago clic N veces en el botón Retroceder (ej. 10 veces).

Para reproducir

  1. Agregar 1 unidad de un producto al carrito.
  2. Ir a la pasarela de pago de Transbank. Con esto: se crea el pedido que queda esperando confirmación de pago, y se crea una reserva por 1 unidad del producto. El stock vendible baja en 1 unidad debido a esa reserva.
  3. En la pasarela de pago, hacer clic varias veces en el botón para retroceder / anular compra (ej. 10 veces).
  4. Al ver en backend la orden, ésta aparece cancelada, pero hay repetidos registros de orden cancelada (notificaciones de parte del plugin del medio de pago). Al revisar en base de datos de Magento en la tabla de reservas (inventory_reservation), hay repetidos registros que cancelan la reserva del producto. Esto descuadra las unidades en reserva en la BD Magento y por ende descuadra el stock vendible del producto en el carrito.

Comportamiento observado

La orden aparece cancelada, pero tiene repetidos registros de orden cancelada (notificaciones de parte del plugin del medio de pago). Al revisar en base de datos de Magento en la tabla de reservas (inventory_reservation), hay repetidos registros que cancelan la reserva del producto. Esto descuadra las unidades en reserva en la BD Magento y por ende descuadra el stock vendible del producto en el carrito.

Comportamiento esperado

La orden debería aparecer cancelada con 1 solo registro de orden cancelada desde el medio de pago. Un solo registro de anulación de la reserva en la tabla inventory_reservation. Y por ende el stock "volvería" a la misma condición anterior a la compra.

Capturas de pantalla

Pedido con múltiples registros de cancelación: image

Versiones (por favor agrega aquí la siguiente información):

Contexto adicional

Agrega cualquier otro información sobre el problema aquí.

isaac-sparta commented 9 months ago

Según lo solicitado, acá está un video con el fenómeno ocurriendo en ambiente de pruebas de Magento. Como quedó un poquito grande lo envío por drive. https://drive.google.com/file/d/1Su689r-cMDsDY-0OWbRLIb7jewdsC2UV/view?usp=sharing

Por otro lado comentar que al intentar reproducirlo recién, no me resultó para un producto simple no asociado a configurable, pero sí se dio el comportamiento erróneo en un simple asociado a configurable como en el video (ej. la talla de un producto). Por si ayudase a reproducir el issue en sus ambientes.

Gracias

mastudillot commented 9 months ago

Gracias @isaac-sparta por el reporte, estamos resolviendo otras cosas en el plugin y tomamos lo que nos reportas. Lo tenemos priorizado en el sprint.

mastudillot commented 4 months ago

Esto quedo resuelto en https://github.com/TransbankDevelopers/transbank-plugin-magento2-webpay-rest/pull/104 y en la siguiente versión del plugin estará incluido.

isaac-sparta commented 4 months ago

Gracias Mauricio. Una duda. Hay un fenómeno muy similar que es cuando un pedido recibe confirmación de pago exitosa, y unos segundos después recibe una notificación de pedido cancelado. Me imagino que a nivel de front end podría ocurrir si el cliente paga exitosamente y luego realiza una acción que la pasarela de pago considere como una cancelación (¿volver atrás? ¿cerrar la pestaña?).

El fix que implementaron acá, ¿en teoría debería corregir también un comportamiento como el que acabo de describir? Este es más difícil de reproducir según yo pero sí lo hemos observado repetidas veces en producción.

Muchas gracias.

mastudillot commented 4 months ago

Hola, perdona la demora en la respuesta, efectivamente lo soluciona, el fix implementa una protección de que si la orden se encuentra en un estado que consideramos final, no pueda ser alterada ante nuevas peticiones.