🔧 Solución de Problemas
Aquí encontrarás soluciones a los problemas más comunes al usar MATICERTS.
🔐 Problemas de Autenticación
Error: "Token inválido" o "Unauthorized"
Síntomas:
{
"error": "unauthorized",
"message": "Invalid or expired token"
}
Causas Posibles:
- Token expirado
- Token mal formado
- Falta el prefijo
Bearer - Token revocado
Soluciones:
-
Verifica el formato del token:
# ❌ INCORRECTOcurl -H "Authorization: eyJhbGciOiJIUzI1NiIs..."# ✅ CORRECTOcurl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." -
Regenera el token si ha expirado:
curl -X POST "https://sandbox-api.maticerts.com/api/v1/auth/login" \-H "Content-Type: application/json" \-d '{"email": "tu-email@empresa.com","password": "tu-contraseña"}' -
Si usas PAT, verifica que no esté revocado:
- Accede al panel de administración
- Revisa la sección "Tokens"
- Regenera si es necesario
Error: "Credenciales inválidas"
Síntomas:
{
"error": "invalid_credentials",
"message": "Email or password is incorrect"
}
Soluciones:
-
Verifica tu email y contraseña:
- Asegúrate de escribir correctamente
- Verifica mayúsculas/minúsculas
- Comprueba que no haya espacios
-
Restablece tu contraseña:
- Ve a https://maticerts.com/forgot-password
- Sigue las instrucciones en tu email
- Intenta nuevamente
-
Verifica que tu cuenta esté activa:
- Comprueba tu email para confirmación
- Contacta al soporte si no recibiste el email
📝 Problemas con Solicitudes
Error: "Solicitud no encontrada"
Síntomas:
{
"error": "not_found",
"message": "Request with ID 'req-12345' not found"
}
Soluciones:
-
Verifica el ID de la solicitud:
# Asegúrate de usar el ID correctocurl -X GET "https://sandbox-api.maticerts.com/api/v1/solicitudes-de-certificado/req-12345" \-H "Authorization: Bearer $TOKEN" -
Comprueba que la solicitud pertenece a tu cuenta:
- Listar todas tus solicitudes:
curl -X GET "https://sandbox-api.maticerts.com/api/v1/solicitudes-de-certificado" \-H "Authorization: Bearer $TOKEN" -
Verifica que no haya sido eliminada:
- Las solicitudes se conservan por 90 días
- Después se archivan automáticamente
Error: "Datos incompletos" o "Validación fallida"
Síntomas:
{
"error": "validation_error",
"message": "Field 'email' is required",
"details": {
"email": "This field is required"
}
}
Soluciones:
-
Verifica que todos los campos requeridos estén presentes:
const solicitud = {nombre: "Juan Pérez", // ✅ Requeridoemail: "juan@empresa.com", // ✅ Requeridodocumento: "1234567890", // ✅ Requeridotipo_documento: "CC", // ✅ Requeridotipo_certificado: "digital", // ✅ Requeridoproposito: "Firma de documentos" // ✅ Requerido}; -
Valida el formato de los datos:
// Email válidoconst emailValido = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);// Documento válido (números)const documentoValido = /^\d+$/.test(documento);// Nombre no vacíoconst nombreValido = nombre.trim().length > 0; -
Revisa los valores permitidos:
const tiposDocumento = ['CC', 'CE', 'PA', 'NIT'];const tiposCertificado = ['digital', 'codigo_firma', 'sello_tiempo'];if (!tiposDocumento.includes(tipo_documento)) {console.error('Tipo de documento no válido');}
⏳ Problemas de Estado y Progreso
La solicitud está "PENDIENTE" por mucho tiempo
Síntomas:
- Estado no cambia después de 30 minutos
- Progreso se detiene en 0%
Soluciones:
-
Verifica el estado actual:
curl -X GET "https://sandbox-api.maticerts.com/api/v1/solicitudes-de-certificado/req-12345" \-H "Authorization: Bearer $TOKEN" -
Revisa los pasos completados:
{"estado": "PENDIENTE","pasos": [{"nombre": "Validación de datos","estado": "PENDIENTE","error": "Email no verificado"}]} -
Acciones según el error:
- Email no verificado: Revisa tu bandeja de entrada
- Documento rechazado: Verifica que sea válido
- Datos incompletos: Actualiza la solicitud
Error: "Solicitud expirada"
Síntomas:
{
"error": "request_expired",
"message": "This request has expired and can no longer be processed"
}
Soluciones:
-
Las solicitudes expiran después de 7 días:
- Crea una nueva solicitud
- Asegúrate de completarla dentro del plazo
-
Para solicitudes urgentes:
- Contacta al soporte
- Podemos extender el plazo en casos especiales
📥 Problemas de Descarga
Error: "Certificado no disponible"
Síntomas:
{
"error": "not_available",
"message": "Certificate is not ready for download yet"
}
Soluciones:
-
Verifica que el estado sea "COMPLETADO":
curl -X GET "https://sandbox-api.maticerts.com/api/v1/solicitudes-de-certificado/req-12345" \-H "Authorization: Bearer $TOKEN" -
Espera a que se complete el proceso:
- Tiempo promedio: 5-15 minutos
- Máximo: 24 horas
-
Si sigue sin estar disponible:
- Contacta al soporte
- Proporciona el ID de la solicitud
Error: "Archivo corrupto" al descargar
Síntomas:
- El archivo descargado no se puede abrir
- Mensaje de error al importar el certificado
Soluciones:
-
Intenta descargar nuevamente:
curl -X GET "https://sandbox-api.maticerts.com/api/v1/solicitudes-de-certificado/req-12345/certificado" \-H "Authorization: Bearer $TOKEN" \-o certificado.p12 -
Verifica la integridad del archivo:
# En Linux/Macfile certificado.p12# Debería mostrar: "data" o "PKCS#12 data" -
Si el problema persiste:
- Elimina el archivo descargado
- Intenta nuevamente
- Contacta al soporte si continúa
🔄 Problemas de Integración
Error: "CORS - Cross-Origin Request Blocked"
Síntomas:
Access to XMLHttpRequest at 'https://sandbox-api.maticerts.com/...'
from origin 'http://localhost:3000' has been blocked by CORS policy
Soluciones:
-
Configura CORS en tu servidor:
// Node.js con Expressconst cors = require('cors');app.use(cors({origin: 'https://tu-dominio.com',credentials: true})); -
Usa un proxy en desarrollo:
// En package.json"proxy": "https://sandbox-api.maticerts.com" -
Realiza las peticiones desde el backend:
// ❌ Evita hacer peticiones directas desde el frontend// ✅ Usa tu backend como intermediario// Frontendconst response = await fetch('/api/certificados/validar', {method: 'POST',body: JSON.stringify(data)});// Backendapp.post('/api/certificados/validar', async (req, res) => {const result = await maticerts.validar(req.body);res.json(result);});
Error: "Timeout - La petición tardó demasiado"
Síntomas:
Error: Request timeout after 30000ms
Soluciones:
-
Aumenta el timeout en tu cliente:
// Node.jsconst response = await fetch(url, {timeout: 60000 // 60 segundos});// Pythonresponse = requests.get(url, timeout=60) -
Usa polling en lugar de esperar:
async function esperarCertificado(solicitudId, maxIntentos = 120) {for (let i = 0; i < maxIntentos; i++) {const solicitud = await obtenerSolicitud(solicitudId);if (solicitud.estado === 'COMPLETADO') {return solicitud;}if (solicitud.estado === 'ERROR') {throw new Error(solicitud.error);}// Espera 5 segundos antes de intentar nuevamenteawait new Promise(resolve => setTimeout(resolve, 5000));}throw new Error('Timeout esperando certificado');} -
Contacta al soporte si el servidor es lento:
- Podemos investigar problemas de rendimiento
- Proporciona el ID de la solicitud
📞 Contacto y Soporte
Si ninguna solución funciona:
-
Reúne información:
- ID de la solicitud
- Timestamp del error
- Pasos que realizaste
- Mensaje de error exacto
-
Contacta al soporte:
- Email: soporte@maticerts.com
- Teléfono: +57 1 XXXX-XXXX
- Chat: https://maticerts.com/chat
-
Proporciona logs:
# Exporta los logs de tu aplicación# Esto ayuda a diagnosticar el problema más rápido