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 numérica de 50 dígitos del comprobante electrónico.
Fecha y hora del procesamiento en formato ISO 8601 con zona horaria (ej: "2024-10-01T15:51:22-06:00").
Estado del comprobante:
"aceptado" — Comprobante aceptado por Hacienda
"rechazado" — Comprobante rechazado por Hacienda
"aceptado parcialmente" — Aceptado con observaciones
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);