Skip to main content
POST
/
VerificacionPago
POST /VerificacionPago
curl --request POST \
  --url https://api.example.com/VerificacionPago \
  --header 'Content-Type: application/json' \
  --data '
{
  "int_id_comercio": 123,
  "str_usr_comercio": "<string>",
  "str_pwd_Comercio": "<string>",
  "str_id_pago": "<string>",
  "int_no_pago": 123
}
'
{
  "int_estado": 123,
  "int_error": 123,
  "str_detalle": {},
  "int_cantidad_pagos": 123,
  "str_res_pago": "<string>"
}
URL de producción: https://www.zonapagos.com/Apis_CicloPago/api/VerificacionPago

Visión general

Este endpoint consulta el estado actual de una transacción previamente iniciada con /InicioPago. Se usa en dos momentos:
  1. Al recibir el callback del usuario — antes de entregar el producto.
  2. Desde la sonda — cada 10-15 minutos para transacciones en estado pendiente.

Headers

Content-Type: application/json

Cuerpo del request

A diferencia de /InicioPago, este endpoint recibe un objeto plano (sin anidar):
int_id_comercio
integer
required
Tu int_id_comercio. Ej. 678.
str_usr_comercio
string
required
Tu usuario técnico (mismo valor que str_usuario en /InicioPago). Máximo 40 caracteres.
str_pwd_Comercio
string
required
Tu clave (mismo valor que str_clave en /InicioPago). Máximo 50 caracteres.
Nota la C mayúscula en str_pwd_Comercio. Sí, rompe con la convención snake_case del resto del API.
str_id_pago
string
required
El str_id_pago que enviaste al crear la transacción en /InicioPago. Máximo 30 caracteres.
int_no_pago
integer
required
Número de intento de pago. Usar -1 para consultar todos los intentos asociados al str_id_pago.Si pagos mixtos están habilitados, un str_id_pago puede tener varios int_no_pago. Con -1 recibes todos; con un valor específico, solo ese.

Cuerpo del response

int_estado
integer
1 si el API ejecutó correctamente (incluso si no hay pagos). 2 si hubo error de autenticación o validación.
int_error
integer
0 si se encontraron pagos. -1 si hubo error (el detalle va en str_detalle).
str_detalle
string | null
Texto del error cuando int_error: -1. null en caso de éxito.
int_cantidad_pagos
integer
Cantidad de intentos de pago encontrados para el str_id_pago consultado.
str_res_pago
string
Detalle de las transacciones en formato de texto plano con separadores | y |;|. Ver cómo parsearlo.
Cuando int_cantidad_pagos: 0, este campo viene vacío o nulo.

Ejemplo completo

{
  "int_id_comercio": 678,
  "str_usr_comercio": "Usuario",
  "str_pwd_Comercio": "ClaveSecreta",
  "str_id_pago": "180921",
  "int_no_pago": -1
}

Parsear str_res_pago

El formato es:
campo1|campo2|...|campoN|;|campo1|campo2|...|campoN|;|
Los campos vienen en un orden fijo. Los primeros 21 campos son comunes a todos los medios de pago; los campos siguientes dependen del medio (int_id_forma_pago).
function parseStrResPago(str) {
  if (!str || str.trim() === "") return [];
  
  // Campos base (comunes a todos los medios)
  const CAMPOS_BASE = [
    "int_ped_numero",
    "int_n_pago",
    "int_pago_parcial",
    "int_pago_terminado",
    "int_estado_pago",
    "dbl_valor_pagado",
    "dbl_total_pago",
    "dbl_valor_iva_pagado",
    "str_descripcion",
    "str_id_cliente",
    "str_nombre",
    "str_apellido",
    "str_telefono",
    "str_email",
    "str_campo1",
    "str_campo2",
    "str_campo3",
    "str_campo4",
    "str_campo5",
    "dat_fecha",
    "int_id_forma_pago"
  ];
  
  // Separar pagos
  return str
    .split("|;|")
    .map(s => s.trim())
    .filter(s => s.length > 0)
    .map(pago => {
      const partes = pago.split("|");
      const obj = {};
      CAMPOS_BASE.forEach((campo, i) => {
        obj[campo] = partes[i] !== undefined ? partes[i].trim() : "";
      });
      // Campos extra dependen del medio de pago
      const extras = partes.slice(CAMPOS_BASE.length);
      obj._campos_adicionales = extras;
      return obj;
    });
}

// Uso
const pagos = parseStrResPago(response.data.str_res_pago);
console.log(`Encontrados ${pagos.length} intento(s) de pago`);
pagos.forEach(p => console.log(`${p.str_descripcion}: estado ${p.int_estado_pago}`));
Ver el detalle de los campos adicionales por medio de pago en Campos por medio de pago.

¿Cuándo consultar?

1

Al recibir el callback del usuario

ZonaPagos redirige al usuario a tu URL de retorno con id_comercio e id_pago. Al recibirlo, tu backend debe consultar VerificacionPago antes de mostrarle el estado al usuario.
2

Desde la sonda (obligatorio para PSE)

Para pagos en estado 999, 4001, 4000, 4003, tu backend debe consultar periódicamente hasta recibir un estado definitivo.
3

Al reprocesar manualmente

Si un pago quedó en estado dudoso, tu equipo de soporte puede consultar desde un panel admin.

Ver también

Estados de pago

Todos los valores de int_estado_pago y qué hacer con cada uno.

Implementar sonda

Guía paso a paso del job programado que consulta pagos pendientes.