Skip to main content
Cuando Hacienda procesa un comprobante electrónico, envía la respuesta XML a la URL de webhook configurada en tu sistema. Este payload es enviado por Hacienda, no por el API de MiPOS.
Tu servidor debe estar preparado para recibir este POST en la URL de webhook que configuraste. La respuesta contiene el XML firmado por Hacienda codificado en base64.

Payload recibido

POST https://{tu-webhook-url}
folioId
string
Identificador del folio del documento procesado.
folioType
string
Tipo de folio. Generalmente "INVOICE".
folioDetails
array
Array con los archivos de respuesta.

Ejemplo del payload

{
  "folioId": "051744",
  "folioType": "INVOICE",
  "folioDetails": [
    {
      "fileType": "XML",
      "encodedFile": "PD94bWwgdmVyc2lvbj0iMS4wIi..."
    }
  ]
}

Decodificar la respuesta XML

El campo encodedFile contiene un XML MensajeHacienda codificado en base64. Al decodificarlo incluye:
CampoDescripción
ClaveClave numérica de 50 dígitos del comprobante
NombreEmisorNombre del emisor
NombreReceptorNombre del receptor
MensajeEstado: 1 = Aceptado, 2 = Aceptado parcialmente, 3 = Rechazado
DetalleMensajeDetalle del resultado del procesamiento
MontoTotalImpuestoTotal de impuestos
TotalFacturaTotal de la factura
$payload = json_decode(file_get_contents('php://input'), true);

foreach ($payload['folioDetails'] as $detail) {
    $xml = base64_decode($detail['encodedFile']);
    $doc = simplexml_load_string($xml);

    $clave = (string) $doc->Clave;
    $estado = (string) $doc->Mensaje; // 1=aceptado, 3=rechazado
    $detalle = (string) $doc->DetalleMensaje;
}