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}
Identificador del folio del documento procesado.
Tipo de folio. Generalmente "INVOICE".
Array con los archivos de respuesta. Show Propiedades de cada detalle
Tipo de archivo. Generalmente "XML".
Contenido del archivo XML codificado en base64. Al decodificarlo se obtiene el MensajeHacienda con el estado del comprobante.
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:
Campo Descripció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 ;
}