Foros

Integración API C2P Search – Error 0330 “No hay transacciones” (Solución real)

 

Hola equipo,

Quiero compartir mi experiencia integrando la API de Búsqueda de Pagos Móviles (C2P Search), ya que enfrenté el error:

0330 – No hay transacciones que coincidan con los campos de búsqueda

Durante varios días, a pesar de que aparentemente todo estaba correcto.

🧠 Contexto

Estoy desarrollando una plataforma que valida pagos de Pago Móvil en tiempo real usando este API.

Stack utilizado:

  • Backend: FastAPI (Python)
  • Cifrado: AES-128-ECB (según documentación oficial)
  • Endpoint: /sandbox/v1/mobile-payment/search

❗ Problema

El API siempre respondía:

{  "error_list": [    {      "error_code": "0330",      "description": "No hay transacciones que coincidan con los campos de busqueda"    }  ] }

Esto ocurría incluso cuando:

✔ El cifrado era correcto
✔ El payload estaba bien estructurado
✔ Los headers eran correctos
✔ Los números estaban en formato correcto (58XXXXXXXXXX)
✔ El monto y referencia coincidían con el Excel de prueba

🔍 Causa real (no evidente en la documentación)

El problema NO estaba en el código.

El problema era una combinación de:

1. 🔑 Credenciales incorrectas o desactualizadas

El integratorId y terminalId deben coincidir EXACTAMENTE con los últimos valores entregados por el banco.

En mi caso:

"integratorId": 31, "merchantId": 200284, "terminalId": "abcde"

⚠️ Si alguno de estos no coincide (por ejemplo usar 1 en vez de 31), el API responde 0330 aunque el resto esté perfecto.

2. 📊 Data de prueba desactualizada

El banco puede enviar múltiples archivos Excel.
No todos están activos en el sandbox.

👉 Es clave usar la data más reciente enviada por el banco.

Ejemplo funcional:

Referencia

Monto

Fecha

87860015898

77655

2026-04-10

3. 🔄 Mapeo correcto de teléfonos

Muy importante:

  • origin_mobile_number → teléfono del comercio
  • destination_mobile_number → teléfono del cliente pagador

🔐 Cifrado correcto (confirmado)

El cifrado funciona con:

  • AES-128-ECB
  • Key = SHA256(secret) → primeros 16 bytes
  • Base64 output

✅ Resultado esperado (cuando todo está correcto)

{  "transaction_list": [    {      "trx_date": "2026-04-10",      "payment_reference": 87860015898,      "amount": 77655,      "payment_method": "c2p"    }  ] }

🔥 Hallazgo importante

El API permite buscar por referencia de forma flexible:

✔ referencia completa
✔ últimos 4 dígitos
✔ últimos 5
✔ últimos 6

Ejemplo:

"payment_reference": "5898"

Esto devuelve la transacción completa.

🧪 Checklist de debugging

Si obtienes error 0330, valida en este orden:

  1. ¿Estás usando el integratorId correcto actualizado?
  2. ¿El terminalId coincide exactamente (string vs número)?
  3. ¿Estás usando la data más reciente del Excel?
  4. ¿La fecha trx_date coincide exactamente?
  5. ¿El monto es EXACTO (sin conversión)?
  6. ¿El teléfono origen/destino están en el orden correcto?
  7. ¿El cifrado AES está correctamente aplicado?

🎯 Conclusión

El error 0330 puede ser engañoso:

👉 No significa necesariamente que no exista la transacción
👉 Muchas veces indica un problema de contexto (credenciales / ambiente / data)

Espero que esto ayude a otros desarrolladores a integrar el API más rápido.

Gracias al equipo de Mercantil por el soporte 👍

Soporte

¿Está buscando ayuda? Consulte las preguntas más frecuentes en nuestra página de soporte.

Contáctenos

Envíenos un mensaje. Nos pondremos en contacto con usted en cuanto podamos.

Establecer relaciones