Close

PHP: Recorrer XML del CFDI 3.2

Hace tiempo estuve involucrado en el desarrollo de un CFDI y tiene partes del desarrollo que involucra trabajar con XML para obtener sus valores.
Les voy a mostrar una forma con la que podemos recorrer nuestro XML con el objeto DOMDocument de php y con una URL externa de SAT.

Una vez que tienes tu XML timbrado, de seguro te pedirán leer el XML para obtener valores del mismo.
Existe una forma de recorrerlo con una directriz se SAT donde ellos de proporcionan un template del XML, esta situado en la liga: “http://www.sat.gob.mx/TimbreFiscalDigital” anteriormente si entrabas a la liga te dejaba ver la estructura que lleva el XML pero ya no, ahora te pide un usuario y contraseña entonces con un foreach tomamos el template del sitio de SAT y lo empezamos a recorrer comparándolo con nuestro XML.

OJO: esto solo obtiene los atributos del nodo TimbreFiscalDigital 

A continuación muestro como lo realice :

Conclusión: ¿SAT alguna vez tumbara el template del sitio web? no lo creo ya que a base de ese esquema es utilizado para su validación de la estructura del XML , incluso si llegan a ver un XML timbrado abra un namespace con la liga “http://www.sat.gob.mx/TimbreFiscalDigital”

10 thoughts on “PHP: Recorrer XML del CFDI 3.2

    1. Hola elmer, me parece que al timbrar, el XML timbrado almacena una cadena que corresponde al valor del QR. Podrias capturar la cadena, y con alguna funcion de PHP generas tu el código QR con base a la cadena que capturaste del xml timbrado. Saludos

  1. Hola buenas tardes, tengo la duda de que cuando escribo la siguiente linea “http://www.sat.gob.mx/TimbreFiscalDigital” pero quiero cambiar TimbreFiscalDigital por Emisor, Comprobante, Domicilio, me marca este error Notice: Undefined variable: rfc in C:\xampp\htdocs\pruebaxmlcfdi\index.php on line

  2. Me es de gran ayuda lo que publicaste, tengo una duda en los atributos referentes a Folio, sub totoal, iva y total ¿que nombre de atributo es? por mas que hago lo siguiente:

    $folio = $elemento->getAttribute(‘folio’);
    $total = $elemento->getAttribute(‘t_Importe’);

    No logro verlo, supongo que el nombre no es, pero así viene en el XML que tengo de ejemplo. Agradecería me ayudaran. Saludos

  3. Yo de nuevo, he hecho varias pruebas usando la pagina http://www.sat.gob.mx/cfd/3 para el nodo de comprobante, pero no obtengo respuestas 🙁

    esto es lo que he puesto

    load(“MI_FACTURA.xml”);
    foreach ($dom->getElementsByTagNameNS(‘http://www.sat.gob.mx/cfd/3’, ‘*’) as $elemento) {
    $serie = $elemento->getAttribute(‘serie’);
    $folio = $elemento->getAttribute(‘folio’);
    $total = $elemento->getAttribute(‘total’);

    }

    echo “serie $serie
    folio $folio
    total $total”;

    ?>

  4. Hola!!
    estoy haciendo un pequeño sistema de facturación electrónica y estoy atorado con la generación del xml.
    tienes algún tutorial para generar el xml?

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.