Skip to main content
El sistema envía un callback HTTP POST a tu endpoint configurado cuando Hacienda devuelve el estado de un comprobante electrónico. Este callback incluye la clave del documento, la fecha, el estado y la respuesta XML.
Configura tu URL de callback al registrar el emisor. El callback se envía automáticamente cuando Hacienda responde.

Payload recibido

POST https://{tu-callback-url}/callback.php
clave
string
Clave numérica de 50 dígitos del comprobante electrónico.
fecha
string
Fecha y hora del procesamiento en formato ISO 8601 con zona horaria (ej: "2024-10-01T15:51:22-06:00").
ind-estado
string
Estado del comprobante:
  • "aceptado" — Comprobante aceptado por Hacienda
  • "rechazado" — Comprobante rechazado por Hacienda
  • "aceptado parcialmente" — Aceptado con observaciones
respuesta-xml
string
Respuesta XML de Hacienda codificada en base64. Contiene el MensajeHacienda firmado.

Ejemplo del payload

{
  "clave": "50601102400300404520200200070010000042681104691472",
  "fecha": "2024-10-01T15:51:22-06:00",
  "ind-estado": "aceptado",
  "respuesta-xml": "PD94bWwgdmVyc2lvbj0iMS4wIi..."
}

Procesar el callback

$payload = json_decode(file_get_contents('php://input'), true);

$clave = $payload['clave'];
$estado = $payload['ind-estado'];
$fecha = $payload['fecha'];
$xml = base64_decode($payload['respuesta-xml']);

// Procesar según estado
switch ($estado) {
    case 'aceptado':
        // Marcar factura como aceptada
        actualizarEstado($clave, 'aceptada');
        break;
    case 'rechazado':
        // Notificar rechazo y revisar errores
        $doc = simplexml_load_string($xml);
        $detalle = (string) $doc->DetalleMensaje;
        notificarRechazo($clave, $detalle);
        break;
}

http_response_code(200);