Generar Cadena Original del Complemento CFDI v3.3 en PHP

Hola tyros, yo de nuevo.

Hoy quiero compartirles algo que acabo de aprender, a generar la cadena original del Timbre fiscal digital. Me refiero a esta parte:
Es relativamente fácil. Aquí les dejo el código:

//Obtenemos el archivo desde un input "file"
$file = $_FILES['fileUpload']['tmp_name'];
//Cargamos el archivo
$xml = simplexml_load_file($file);
//Registramos los Namespaces
$ns = $xml->getNamespaces(true);
$xml->registerXPathNamespace('cfdi', $ns['cfdi']);
$xml->registerXPathNamespace('tfd', $ns['tfd']);
//Leemos el complemento:
$result = $xml->xpath('//tfd:TimbreFiscalDigital');
$tfd_str="";
while (list(, $node) = each($result)) {
    $tfd_str .= $node->asXML();
}
//Truco: Es necesario agregar "xmlns:xsi", haremos un "str_replace"
$tfd_str = str_replace("xsi:", ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:', $tfd_str);
// Ruta al archivo XSLT
$xslFile = "docs/sat/cadenaoriginal_TFD_1_1.xslt"; //Descargalo desde la página del SAT
// Crear un objeto DOMDocument para cargar el archivo de transformación XSLT
$xsl = new DOMDocument();
$xsl->load($xslFile);
// Crear el procesador XSLT que nos generará la cadena original con base en las reglas descritas en el XSLT
$proc = new XSLTProcessor;
// Cargar las reglas de transformación desde el archivo XSLT.
$proc->importStyleSheet($xsl);
// Generar la cadena original y asignarla a una variable
$cadena_original_sat = $proc->transformToXML(simplexml_load_string($tfd_str));

Listo, la cadena original se encuentra en la variable "$cadena_original_sat"

Aquí puedes consultar el ejemplo funcionando: Visor CFDI v3.3

1 comentario:

  1. XSLTProcessor::importStylesheet(): xsl:version: only 1.1 features are supported in me arroja ese error, como puedo corregirlo

    ResponderEliminar