Skip to main content
La API de cancelación y extorno permite detener o revertir una operación iniciada previamente mediante POST /authorize. Con POST /reversals, Pay-me PinPAD determina la acción a partir del estado actual de la operación:
  • si la autorización sigue en curso, interrumpe el flujo activo y la cancela;
  • si la venta ya fue aprobada, ejecuta un extorno total.
En ambos casos, el sistema central envía el mismo operationNumber utilizado en la autorización original.
endpoint
El sistema central no elige la acción mediante un parámetro. Pay-me PinPAD evalúa el estado que tenga la operación cuando procesa POST /reversals y aplica la transición correspondiente.

¿Qué cubre esta operación?

Cancelación

Si POST /authorize todavía está en curso, Pay-me PinPAD corta el flujo activo de la transacción y devuelve un resultado final CANCELLED.

Extorno

Si la venta ya está APPROVED, Pay-me PinPAD busca la operación original y ejecuta una reversa total. El resultado aprobado es REVERSED con resultCode: "00".

Misma referencia

Las dos acciones reutilizan exactamente el operationNumber enviado en POST /authorize.

Decisión por estado

El mismo endpoint puede cancelar o extornar. El resultado depende del estado real de la operación al procesar la solicitud.

Cancelación y extorno no son sinónimos

Este endpoint pertenece a la interfaz local entre el sistema central y Pay-me PinPAD. No corresponde a DELETE /charges de la API de e-commerce.

Solicitud

URL completa:

Cuerpo JSON

No incluyas amount, currency, medio de pago ni datos de tarjeta. Cuando corresponde un extorno, este es total.

cURL

Reemplaza la dirección y el puerto por los configurados en tu Wiseasy P5L. Usa exactamente el mismo operationNumber de la autorización.

Respuestas de POST /reversals

Usa primero el código HTTP para identificar el tipo de respuesta. Después evalúa status y resultCode.

Ejemplos de respuesta

Cancelación confirmada — 200 CANCELLED

Una autorización que todavía estaba en curso fue interrumpida:
CANCELLED confirma que Pay-me PinPAD interrumpió la autorización antes de que terminara aprobada. No envíes un extorno adicional para esa operación.
El valor null de resultCode en este ejemplo es ilustrativo. Los códigos 14 y 15 todavía no están confirmados para la respuesta HTTP de Transit. Decide por status: "CANCELLED" y no programes lógica basada en esos códigos hasta validarlos con Alignet.
La venta ya estaba aprobada y la reversa terminó correctamente:
Registra el extorno únicamente cuando se cumplan ambas condiciones:
El endpoint respondió correctamente, pero el procesador no aprobó el extorno:
DENIED es un resultado de negocio. No lo interpretes como una falla HTTP ni reintentes automáticamente.
La espera HTTP terminó, pero la operación puede continuar:
Consulta la operación. No crees otra solicitud ni una nueva venta en paralelo.

Solicitud inválida — 400 Bad Request

Corrige el body antes de reenviar. Este error no representa un rechazo financiero.

Operación original no encontrada — 404 Not Found

Verifica que el valor coincida exactamente con la autorización original. No asumas que otra venta fue extornada.

Terminal ocupado — 409 Conflict

Este error corresponde a otra referencia que compite por el terminal. Una cancelación usa el mismo operationNumber de la autorización activa para dirigirse a ese flujo. Ante POS_BUSY, espera a que el terminal se libere antes de reintentar la solicitud que no fue aceptada.

Terminal no disponible — 503 Service Unavailable

Restablece la disponibilidad de Pay-me PinPAD y del SDK antes de reintentar.
Pay-me PinPAD no pudo determinar de forma inequívoca el estado de la venta original:
Esta respuesta usa un cuerpo compacto. Cuando UNKNOWN proviene de la búsqueda ambigua de la venta original, Pay-me PinPAD no inicia la reversa. No reintentes en bucle; conserva la evidencia y escala a Alignet.

Consultar el resultado final

Después de HTTP 202, un timeout o una conexión interrumpida, conserva la misma referencia y consulta:

Ir a Consulta de estado

Consulta la autorización original mediante GET /payments/{operationNumber} y confirma su estado antes de iniciar otra venta.
Para recuperar el resultado específico de la cancelación o el extorno, usa:
GET /payments/{operationNumber} consulta la autorización original. GET /reversals/{operationNumber} consulta la solicitud de cancelación o extorno. Usa ambas vistas para conciliar una operación incierta.

Estados

Tratamiento de UNKNOWN

La guía técnica confirma que un 502 UNKNOWN originado durante la búsqueda de la venta significa que Pay-me PinPAD no ejecutó la reversa. La misma guía indica que un reinicio durante un extorno puede dejarlo en UNKNOWN, pero no define si el procesador llegó a recibir la reversa ni un mecanismo automático de conciliación.
No generalices UNKNOWN como “extornado” ni como “no extornado”. Conserva el operationNumber, no repitas en bucle y solicita validación a Alignet. La semántica del reinicio durante PROCESSING debe confirmarse antes de producción.

Códigos de resultado

Trata CANCELLED como cancelación confirmada de una autorización en curso. Trata únicamente REVERSED junto con "00" como extorno aprobado. Conserva cualquier código desconocido y escálalo sin asignarle un significado.

Timeouts y reintentos

La guía proporciona 90 segundos como espera interna de referencia en desarrollo. Configura POST /reversals con al menos 100 a 110 segundos para que el timeout del sistema central sea mayor, tanto para cancelación como para extorno.
El timeout del sistema central describe la conexión, no el resultado de la cancelación o el extorno. Consulta GET /reversals/{operationNumber} antes de reenviar o tomar una decisión financiera.
Ante 202, respeta Retry-After. Si el header no está presente, la guía propone aproximadamente 2 segundos como referencia inicial. El timeout definitivo, el backoff y el tiempo máximo de consulta deben acordarse antes de producción.

Idempotencia y concurrencia

operationNumber es la clave de idempotencia de la solicitud:
  • si la misma cancelación o reversa está en proceso, Pay-me PinPAD devuelve HTTP 202 con su estado y no inicia otro flujo;
  • si ya finalizó, devuelve el resultado almacenado y no repite la acción;
  • si otro operationNumber ocupa el terminal, responde HTTP 409 con POS_BUSY;
  • la venta y el extorno se almacenan por separado aunque compartan la referencia.
Usa una sola cola por terminal. Ante una respuesta perdida, consulta primero. Si tu política permite reenviar el POST, conserva exactamente el mismo body y operationNumber.

Flujo recomendado para el sistema central

1

Conserva la referencia original

Recupera el mismo operationNumber que utilizaste en POST /authorize. No generes una referencia nueva.
2

Solicita la cancelación o extorno

Envía POST /reversals con el mismo operationNumber y un timeout HTTP mayor que la espera interna del terminal.
3

Interpreta la transición aplicada

CANCELLED indica que se interrumpió una autorización activa. REVERSED junto con 00 indica que se extornó una venta que ya estaba aprobada.
4

Recupera un resultado incierto

Ante HTTP 202, timeout o pérdida de conexión, consulta GET /reversals/{operationNumber} y GET /payments/{operationNumber}. No inicies otra venta en paralelo.
5

Escala estados indeterminados

Ante UNKNOWN o un límite de consulta agotado, conserva la referencia, evita reintentos en bucle y coordina la conciliación con Alignet.

Garantías y limitaciones

  • CANCELLED confirma que se detuvo el flujo activo de autorización. No lo declares exitoso hasta recibir ese estado final.
  • REVERSED junto con resultCode: "00" confirma que el procesador aprobó el extorno.
  • Si la venta se aprueba antes de que Pay-me PinPAD procese la solicitud, el mismo endpoint ejecuta el flujo de extorno en lugar de la cancelación.
  • Un extorno aprobado revierte una venta existente; no equivale a haber impedido la autorización original.
  • La guía no confirma cuándo se reflejará la reversa para el tarjetahabiente ni su efecto contable después del cierre o liquidación.
  • No está confirmada la ventana máxima para extornar, el tratamiento de ventas liquidadas ni la respuesta ante una venta ya extornada.
  • El catálogo completo de códigos del procesador y los códigos que permiten reintento están pendientes de confirmación.
  • El timeout definitivo de Pay-me PinPAD y el límite de consultas deben validarse en el ambiente objetivo.

Solicitud de autorización

Revisa POST /authorize y la creación del operationNumber original.

Operación y recuperación

Aplica las reglas generales de persistencia, timeout y recuperación del sistema central.