Buscar en este blog

viernes, 24 de mayo de 2013

Cómo firmar el DTE

Cómo se firma el DTE


Bueno en este tema existen muchos que pueden dar una opinión acerca de cómo realizar esta tarea, sin embargo la experiencia me ha demostrado que el problema no es firmar el documento sino más bien que es lo que debemos firmar. Muchas personas me dicen que firman sus documentos DTE pero al momento de enviarlos al SII este les regresa que la firma es inválida. Expondré aquí la forma que utilizo personalmente para realizar el proceso, sin perjuicio que existan otros desarrolladores que utilicen una forma mas elegante.

Consideraciones generales

Una de las primeras cosas que realizo al momento de intentar firmar el documento DTE es ordenar la información a firmar. Los desarrolladores con más experiencia en este tema saben que al construir un documento XML este no es necesariamente el mismo cuando uno lo visualiza en otros visualizadores de documentos XML. Bueno regresando a lo nuestro, primero ordenemos el DTE

Identación



Si Ud. Cuenta con un documento DTE con estas características lo primero que debería hacer es quitar la identación del documento. Esto tiene una razón, puesto que el CAF entregado por el SII no trae identación es preferible dejar todo el documento alineado según el CAF. Entonces al momento de calcular la firma sobre el CAF no generará errores de timbre. Esta es mi opinión, no exenta de comentarios y observaciones.



















Deje el documento DTE de esta forma.


















CAF

Una vez ordenado el documento DTE, es necesario agregar el CAF al documento, para esto es necesario tomar el nodo CAF desde el archivo de autorización de folios del SII. Cuando digo tomar, es rescatar el nodo sin realizar ninguna modificación o identación. El nodo CAF debe ser insertado tal cual en el documento DTE. Si se modifica de alguna forma el cálculo del timbre fallará.

Entonces segun esto el DTE debería quedar como sigue:




Posterior a esto se encuentra la generación del timbre del TED, cuya información se encuentra disponible en la sección Ejemplo Timbre Electrónico del DTE . Cuando genere el timbre del TED su DTE debería tener esta forma:















Aplicar Firma al DTE


Bueno ya tiene preparado su DTE para ser firmado. Ahora debemos aplicar la siguiente rutina de firma al DTE expuesto. Antes debo señalar que al momento de abrir el documento XML en .Net utilice la propiedad PreserveWhiteSpace = true del objeto XmlDocument. Esto logra abrir el DTE sin ordenar los nodos o identarlo. Si no lo hace de esta forma el timbre que calculo se invalidará.

Una vez abierto el DTE (xml) puede aplicar esta rutina para su firmado:




#region FIRMA DTE

public static void firmarDocumentoXml(ref XmlDocument xmldocument, X509Certificate2 certificado, string referenciaUri )
{
 ////
 //// Cree el objeto SignedXml donde xmldocument
 //// representa el documento DTE preparado para
 //// ser firmado. Recuerde que debe ser abierto 
 //// con la propiedad PreserveWhiteSpace = true
 SignedXml signedXml = new SignedXml(xmldocument);

 ////
 //// Agregue la clave privada al objeto signedXml
 signedXml.SigningKey = certificado.PrivateKey;

 ////
 //// Recupere el objeto signature desde signedXml
 Signature XMLSignature = signedXml.Signature;

 ////
 //// Cree la refrerencia al documento DTE
 //// recuerde que la referencia tiene el 
 //// formato '#reference'
 //// ejemplo '#DTE001'
 Reference reference = new Reference();
 reference.Uri = referenciaUri;

 ////
 //// Agregue la referencia al objeto signature
 XMLSignature.SignedInfo.AddReference(reference);
 KeyInfo keyInfo = new KeyInfo();
 keyInfo.AddClause(new RSAKeyValue((RSA)certificado.PrivateKey));

 ////
 //// Agregar información del certificado x509
 keyInfo.AddClause(new KeyInfoX509Data(certificado));
 XMLSignature.KeyInfo = keyInfo;

 ////
 //// Calcule la firma y recupere la representacion
 //// de la firma en un objeto xmlElement
 signedXml.ComputeSignature();
 XmlElement xmlDigitalSignature = signedXml.GetXml();

 ////
 //// Inserte la firma en el documento DTE
 xmldocument.DocumentElement.AppendChild(xmldocument.ImportNode(xmlDigitalSignature, true));

}



#endregion

Para ser honesto esta rutina es capaz de firmar el DTE y El SETDTE solo se debe pasar la referencia adecuada para indicar que nodo debe firmar.


Bueno espero que esta breve rutina les permita avanzar en sus proyectos. Como siempre los invito a dejar un comentario acerca de como mejorar estas rutinas.



206 comentarios:

  1. estimado una consulta, existe alguna instruccion en .net para agregar el CAF desde xml?

    ResponderEliminar
    Respuestas
    1. Estimado, no existe una instrucción que haga eso directamente, debes crear una rutina que extraíga el contenido del CAF sin nodificaciones y lo inserte como nodo al documento DTE. Te recomiendo que lo extraígas utilizando XmlDocument y antes de cargar el CAF en este objeto le indiques PreserveWhiteSpace = true. Eso abre el CAF sin ordenarlo. Que es lo que necesitas para trabajar con el. Si tienes problemas escribeme nuevamente y te envío mas información.

      Eliminar
  2. Estimado, no existe una instrucción que haga eso directamente, debes crear una rutina que extraíga el contenido del CAF sin nodificaciones y lo inserte como nodo al documento DTE. Te recomiendo que lo extraígas utilizando XmlDocument y antes de cargar el CAF en este objeto le indiques PreserveWhiteSpace = true. Eso abre el CAF sin ordenarlo. Que es lo que necesitas para trabajar con el. Si tienes problemas escribeme nuevamente y te envío mas información.

    ResponderEliminar
    Respuestas
    1. te pasaste muchas gracias....pero estoy con una duda que te escriba mas abajo

      Eliminar
  3. firme con la rutina que indicas, pero no se supone (segun recuerdo de la doc. del sii) que los tag (X509Certificate y SignatureValue) deben ser a lo mas de 76 caracteres por linea, lo que a mi me genera es todo en una sola linea???

    ResponderEliminar
    Respuestas
    1. Es verdad pero yo en el tiempo he enviado muchos DTEs con este formato y el SII los acepta sin problemas. Descubrí esto hace varios años y no he tenido problemas. Tambien puedes crear una rutina que ordene el nodo x509certificate. Tambien te funcionará.

      Eliminar
  4. Estimado tengo una duda en el cierre del nodo despues sigue bck8Cq2y6yP86bof2jXc87YZeranEDR8ZMXCmqWTb9iTA6wBSy2G5x3OSNtKu+04Vq8tZ/SL2POlBAmJDYl8+g== esto se casa igual del CAF, lo que pasa que no puedo extraer --algoritmo="SHA1withRSA"-- esta seccion me toma solo el contendo

    ResponderEliminar
  5. Hola marcelo, seguí tu blog desde la web del programador y la verdad me parece excelente que compartas esta información sin ningún afán de lucro, solo me queda una duda, yo programo con clipper 5.2, como puedo generar y conectar al servidor para enviar y recibir todo lo que explicas aquí en tu blog??, no estoy familiarizado con muchos términos que utilizas en verdad. disculpa la ignorancia, te escribo desde México, serán tus términos diferentes por la nación?, aquí no he leído nada igual, saludos!!!

    ResponderEliminar
    Respuestas
    1. Estimado colega,
      Voy a revisar mis documentos y te cuento si puedo ayudarte con tus desarrollos.
      Gracias por tus comentarios.

      Eliminar
  6. marcelo.

    se puede bajar el listado de emisores autorizados??

    ResponderEliminar
    Respuestas
    1. Logan,

      Puedes entrar a la pagina del SII en esta url
      https://palena.sii.cl/cvc/dte/ee_empresas_dte.html
      luego seleccionas los emisores que buscas y le dices consultar.
      El resultado de esta operacion regresará una lista de lo que buscas. Existe un link sobre esta lista que te permitirá descargar el listado completo.

      Espero haberte ayudado.

      Eliminar
    2. si eso lo se, pregunte mal.
      Mi duda es si esta descarga la puedo automatizar?

      Eliminar
    3. La verda es que no tengo información del sii de como hacerlo o si existe un servicio que permita reliazarlo. Creo que no, pero desde el punto de vista programatico solo necesitarias poder realizar una referencia al link de la página de resultado utilizando un objeto request y bajar el resultado a tu maquina.

      Así que si la respuesta es positiva pero requiere desarrollo.

      Eliminar
    4. si en eso estaba... incluso trate de hacer el request a https://palena.sii.cl/cvc/dte/ee_empresas_dte.html simulando los head... me funciona siempre y cuando este en session en el sii. incluso trate de meter el token que tambien va y nada.

      seguire viendo..

      Eliminar
  7. Después de varias pruebas e intentos y muchas tazas de café, pude construir el libro correctamente ,firmarlo y enviarlo (a mano pero enviarlo), funcionando perfectamente según tus recomendaciones y especificaciones.

    Muy agradecido por toda la información y tiempo

    ResponderEliminar
    Respuestas
    1. Estimado,

      Podría contactarse conmigo por favor 62242459

      Muchas gracias

      Eliminar
  8. Marcelo, hace poco nos hiciste una asesoría de la cual estamos muy agradecidos, gracias a ti pudimos enviar sin problemas los DTE y Libros al SII. Recomiendo al 100% tus asesorías, ya que la información sobre este tema es muy escasa y prácticamente todo es plataforma JAVA. Este blog permite a muchos seguir adelante con nuestros proyectos de facturación electrónica, te agradezco enormemente.

    Saludos.

    ResponderEliminar
  9. Buen material, me ha servido bastante se agradece.
    Pero tengo un problema con la firma, el dte lo firmo y luego vuelvo a firmar el set, lo subo a sii y me es rechazado por firma.
    Alguna sugerencia o flujo que debo seguir, incluso cree una nueva rutina de firma con la documentación de microsoft y el resultado es el mismo.

    ResponderEliminar
    Respuestas
    1. Olvidenlo, era error entro teclado y la silla.
      Me funciono perfecto.

      Eliminar
    2. Mauricio,
      Lamento no poder contestar rapidamente, el trabajo me tiene full.

      Que bueno que solucionaste tu problema.

      Eliminar
    3. Estimado, Mauricio o Marcelo, cual fue la solución a su problema ya que tengo el mismo problema, logro firmar los 2 los cuales al comprobarlos por separados funcionan correctamente pero al juntarlos, da error de firma al subirlo al SII.
      De antemano muchas gracias!!

      Saludos..

      Eliminar
  10. Marcelo,

    Estamos enviando un archivo XML firmado al SII con respecto a la Cesión electrónica, el cual hemos validado schema y consumo correcto del servicio automático del SII, sin embargo arroja un error "Rechazado por Firma de Sobre". ¿A que se podrá referir con Firma de Sobre?

    ResponderEliminar
    Respuestas
    1. Carlos,

      buenos días, mira lo primero es ver la posibilidad que me envies el documento para verlo y despues puedo comentarte que es lo que podría estar ocurriendo.

      Dejame revisar los formatos de envio de las cesionespara saber si descubro algo.

      Atte.
      Marcelo Rojas R

      Eliminar
    2. Gracias Marcelo.... te envié un correo con el XML.

      Eliminar
    3. Carlos,
      Tengo el mismo error al generar la cesión electrónica. Favor puedes indicarme como solucionaste el problema ?

      Gracias.

      Eliminar
  11. Gracias por compartir esto me ha funcionado bien....cuando envio al sii me da el siguiente error:

    (TED-2-510) Firma Timbre Electronico Incorrecta

    si pudieses guiarme donde tengo el error por favor??

    ResponderEliminar
    Respuestas
    1. Particularmente este error tiene relacion con el timbre del documento, para solucionarlo verifica que el CAF este bien insertado en el documento DTE. Te recomiendo que leas este articulo para que puedas insertar correctamente los datos del CAF. Recuerda que el caf debe ir insertado en el dte sin cambios ni arreglos. aunque se vea feo. No lo ordenes ni corrijas. eso solucionara el problema:

      http://lenguajedemaquinas.blogspot.com/2013/05/ejemplo-timbre-electronico-del-dte.html

      Eliminar
  12. Hola Marcelo, gracias por compartir esta información. Sabes, tengo un problema con respecto a la validación. Estoy en PHP y no logro detectar el problema. La firma de los DD con la private key está OK (de acuerdo al resultado de la doc y el tuyo), el mecanismo de firma con el archivo de certificado también (recupero token sin problemas), el tema es que al generar la firma de DTE y SETDTE si no le coloco la URI me indica "RPR - DTE Aceptado con Reparos (TED-2-510) Firma Timbre Electronico Incorrecta", pero si agrego la URI de acuerdo a los formatos definidos en documentación SII, me indica "RCH - DTE Rechazado (DTE-3-505) Firma DTE Incorrecta (Rechaza DTE)". El CAF lo incorporo obedientemente tal cual, extraigo de archivo, corto el trozo CAF y pego completito, sin tocar ni modificar. La razón social en el caf tiene acento..no se me ocurre qué más podría ser..alguna idea??? Como puedo validar por separado solo el DTE (y no el SETDTE). Gracias.

    ResponderEliminar
    Respuestas
    1. Aclaro que antes de incorporar el CAF saqué todos los espacios como indicas y la carga del XML la realizo con preserveWhiteSpace = TRUE

      Eliminar
    2. Resolví parte con respecto a la URI, pero sigo con Firma Incorrecta. Reviso los archivos con una herramienta y el trozo del CAF es exactamente igual... veo una diferencia en que el archivo CAF está codificado ANSI y el generado en "Western European (Windows)"... tendrá algo que ver?

      Eliminar
    3. Efectivamente debes cambiar la codificacion de recuperación por ISO-8859-1

      Eliminar
    4. solucionaste este tema??? yo no puedo, me da este error cuando en el documento hay caracteres con tildes o ñ

      Eliminar
  13. Hola Marcelo, muy buen post y totalmente de mucha ayuda, te escribo porque estoy generando el documento y me entrega error "Rechazado por Error en Firma", quite todos los espacios de acuerdo a tus consejos y nada, hay algo que en me puedas orientar, por tu respuesta gracias.

    ResponderEliminar
  14. Recomiendo 100% los servicios de asistencia técnica de Marcelo, conoce muy bien el tema de facturación electrónica y además los problemas y posibles soluciones que van apareciendo, muchas gracias!!!!

    ResponderEliminar
  15. Estimado, una consulta con respecto al armado de DTE en C#.
    de donde se saca el TimeStamp que va en la etiquetas TmstFirmaEnv, TSTED , y TmstFirma ??

    ResponderEliminar
    Respuestas
    1. Estimado,
      los valores de estos nodos deben ser insertados al momento de iniciar el firmado del documento. El fomato del nodo es yyyy-mm-ddThh:mm:ss. Recuerda que este valor debe ser calculado cuando se va a firmar el documento. No funcionara si calculas el valor hoy y firmas mañana.

      Eliminar
    2. Si lo estoy haciendo con un StringBuilder esta bien esto:
      sb.Append("xxxx");

      sb.Append(""+DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")+"");

      sb.Append("");

      Eliminar
    3. que raro no se publica el texto que va dentro de las llaves "<>" "" pero se entiende?

      Eliminar
    4. No logro entender bien tu problema, si quieres puedes llamame al 24042279

      Eliminar
  16. te puedo enviar un pantallazo a abaddon.1974@gmail.com?? o alguna otra parte??

    ResponderEliminar
  17. Macelo
    Utilizando PreserveWhiteSpace = true no ordena los nodos y se procede a la firma pero despues de firmar como vuelves a ordenar los nodos para subir el dte al sii ya que ellos piden es formato

    ResponderEliminar
    Respuestas
    1. Cesar,
      La verdad es que utilizando PreserveWhiteSpace = true el documento xml es abierto sin realizar ningun tipo de orden sobre los nodos. Al momento de firmarlo lo guardo tal como esta, sin modificaciones pues eso invalidaría la firma. Asi que despues de firmarlo no hago ningun orden sobre el documento y lo envío tal cual.

      Eliminar
    2. Macelo,
      Me podrías ayudar cuando subo el archivo a SII, me arroja un error el la firma.
      te puedo mandar el archivo?? para ver si encuentras algo?

      de ante mano gracias

      Eliminar
  18. Saludos Marcelo.
    Junto con agradecerte esta gran iniciativa que creo q a ayudado a muchos, sobretodos los que usamos C#.
    Es que queria preguntar si tienes algunos tips el "SET de pruebas".
    Por ejemplo:
    - Que Rut se usa, en el XML del DTE, para el supuesto cliente.
    - En la caratula del ENVIO_DTE que datos colocas en y

    A modo de sugerencia seria genial si desarrollaras este punto en algun post.

    ResponderEliminar
  19. Hola Marcelo, oye sabes me da un error de signature cuando intento enviar el dte, mi dte es este:
    https://drive.google.com/file/d/0B3PT3OZNKSszN3ltcDBzVFFxQkk/edit?usp=sharing

    lo extraño es q tengo todo ordenado hasta el momento de la firma, pero la firma se agrega en forma desordenada y es justo ahi donde me tira error. ¿que sera?

    me dice:
    Linea:104 The element type "Signature" must be terminated by the matching end-tag "</Signature>".
    con status 7

    en mi dte esta correctamente cerrado el signature, eso es lo extraño..

    aqui puedes bajar en formato xml:
    https://drive.google.com/file/d/0B3PT3OZNKSszLW9ZRFlIRWlpeUE/edit?usp=sharing

    ResponderEliminar
  20. lo solucione, tuve que agregar la siguiente linea al final de la secuencia:

    secuencia.Append("--7d23e2a11301c4--\r\n");

    esta es una linea de cierre q va despues de agregar envioDTE a la secuencia

    ResponderEliminar
    Respuestas
    1. Kataku, me sirvió tu solución, comparto las líneas original y solucionado:

      Original:
      secuencia.Append("\r");
      secuencia.Append(xdocument.ToString(SaveOptions.DisableFormatting));
      secuencia.Append("\r\n");

      Solucionado:
      secuencia.Append("\r");
      secuencia.Append(xdocument.ToString(SaveOptions.DisableFormatting));
      secuencia.Append("\r\n");
      secuencia.Append("--7d23e2a11301c4--\r\n");

      Eliminar
    2. Gracias!! también me sirvió la solución :)

      Eliminar
  21. Hola Kataku:
    Se que esta pregunta no tiene nada que ver con lo que estás preguntando, pero me gustaría saber como hiciste para firmar, por separado, los nodos SetDoc y el F243096-1?? Yo tengo casi armado mi DTE y no he podido firmar los nodos por separado, a pesar de de haber proporcionado las referencias respectivas.
    Como lo hiciste tu??

    Revisé tu archivo y al compararlo con el archivo de ejemplo "F60T33-ejemplo.xml" se ve que está todo correcto.

    Saludos,
    DanielZ.

    ResponderEliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. Cuando firmo me quedan las dos, por debajo de"/ SetDTE " y por sobre "/ EnvioDTE "
    Algo ocurre y algo estoy haciendo mal.

    Gracias por algún consejo.

    ResponderEliminar
  24. Hola Marcelo Rojas:

    En primer lugar, deseo expresar mis agradecimientos por la valiosa e interesante información de su blog, me ha sido de gran utilidad.

    Lo segundo, tiene que ver unas consultas sobre el archivo EnvioDTE.xml, sobre el cual ya he logrado insertar :

    Caratula, Encabezado, Detalles, CAF y el timbre, el cual se obtiene, como ya lo ha mencionado, al computar DD + La clave privada del CAF.

    También he logrado firmar el archivo pero tengo dos consultas al respecto.
    a. Entiendo que se debe firmar el nodo "EnvioDTE" y también el nodo interno DTE.
    Hasta el momento he firmado el primer nodo (nodo raíz) y me faltaría el DTE.
    ¿Cómo lo hago? en la referencia coloco "F60T33" pero al ejecutarlo necesariamente, me firma el SetDTE.. algo estoy haciendo mal pero no se que puede ser.

    Desde ya agradezco si fuese posible tu orientación al respecto.

    De antemano gracias.

    ResponderEliminar
  25. Hola,
    Recibí del SII el mensaje: "RFR - Rechazado por Error en Firma"
    Alguien sabe a qué firma se refiere? EnvioDTE, DTE, TED?

    Gracias,
    JC

    ResponderEliminar
    Respuestas
    1. Hola, tengo el mismo problema (en PHP) lograste solucionarlo?

      Eliminar
    2. Yo lo solucione.

      Eliminar
    3. Como lo hiciste me puedes pasar un numero de contacto por favor.

      Eliminar
    4. Igual estoy interesado en saber como lo solucionaste. Ademas, ¿alguien sabe como saber a que firma se refiere?

      Eliminar
  26. Estoy con el mismo problema de la firma y les comento lo que he hecho hasta ahora:

    - Al codificar a ISO-8859-1, sólo cambia el caracter '&' a '&', pero esto no me cambia las tildes.
    - He intentado cambiar las tildes a mano, reemplazando 'á' por 'á' y tambien 'á' por 'á', pero la codificación ISO-8859-1 me vuelve a reemplazar el caracter '&' dejando '&aacute;' y '&#225;'.
    - También he quitado los acentos, reemplazo 'á' por 'a' y el servicio me lo acepta sin problemas, pero al declarar avance, me responde que el ítem que devería llevar acento, no es lo que se esperaba.

    Gracias.

    ResponderEliminar
    Respuestas
    1. Solucionado,

      Luego de hablar con Marcelo (gracias por tu disposición), me indica que en el método para generar la firma del timbre, hay que cambiar lo siguiente:

      Antes:
      ASCIIEncoding ByteConverter = new ASCIIEncoding();

      Ahora:
      Encoding ByteConverter = Encoding.GetEncoding("ISO-8859-1");

      Esto, porque ASCIIEncoding no toma en cuenta las tildes.

      referencia al método para generar la firma del timbre: http://lenguajedemaquinas.blogspot.com/2013/05/ejemplo-timbre-electronico-del-dte.html

      Eliminar
  27. Hola Marcelo,

    Estoy desarrollando en PHP con Symfony2 la firma de los DTE. Avancé sin mayores problemas hasta el momento de enviar al SII el XML firmado. Envío el xml y siempre recibo "RFR - Rechazado por Error en Firma". He tratado de firmar de formas distintas el documento pero consigo el mismo resultado. Será que el xml necesita algún formato particular? todo a la izquierda? El digest de la firma se debe calcular de afuera hacia adentro, es decir, primero calculo el digest para el envío (SetDTE), luego el digest para cada documento (Documento)?

    Actualmente para firmar lo que hago es usar las funciones de php para openssl y lo aplico en el orden: Documento (canonizado) -> firma -> SetDTE (canonizado) -> firma.

    Si pudieras darme algun tips o ayuda con respecto al porque o a las posibles causas del error RFR te lo agradecería.

    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. ¿Lograste solucionar este problema? yo no puedo, me es imposible. He intentado de mil formas, he revisado mil documentos y no lo logro. Gracias

      Eliminar
  28. GRACIAS MARCELO por tan maravilloso aporte...

    Donde encuentro las instrucciones para llenar los 4 archivos de envio, tengo el DTE listo pero no puedo subirlo para evaluacion. Aprovecho de comentar que estoy desarrollando en VB6, si alguien puede colaborar o necesita ayuda, nos comunicamos por esta via.

    Gracias a todos por participar de este interesante y buenisimo blog.

    ResponderEliminar
  29. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  30. Te cuento que estoy firmando ambos nodos, pero por alguna razón los dos nodos quedan juntos y al final y dentro del nodo EnvioDTE.¿Que puede ser?.. lo uso así:

    SII.GenerarXML.firmarDocumentoXml(ref doc, cert, "#N150"); //
    SII.GenerarXML.firmarDocumentoXml(ref doc, cert, "#SETDTE");

    ResponderEliminar
    Respuestas
    1. Eso pasa ya que firmas ambos nodos usando el mismo XmlDocument (la variable "doc" en este caso), para que eso no pase tienes que firmar el DTE en un XmlDocument separado, luego en otro XmlDocument (el del EnvioDTE) agregas el DTE que firmaste y finalmente firmas el xml del EnvioDTE.

      Eliminar
    2. a mi me pasa exactamente igual, aun cuando lo hago por separado, al firmar el DTE la firma se genera en el nodo EnvioDTE, luego guardo y abro en otro doc y la otra firma igual queda en la misma posición, aún cuando estoy pasando los uri correspondientes, es decir URI=#FXXXX y URI=#SetDoc.
      ¿Alguien sabe como se soluciona esto?

      Eliminar
  31. hola como insertan el nodo CAF completo en el DTE justo despues de
    cuando importo el nodo lo inserta dentro del usando InsertAfter() me sale ... datos del it o sea lo pone dentro del InnerText. Como lo hacen ustedes ??

    ResponderEliminar
    Respuestas
    1. Ya que esta página me ha ayudado bastante (GRACIAS!), hago mi pequeño aporte:

      Bueno lo que hago yo es que antes de firmar el DTE tengo el xml completo, con el nodo TED y el nodo CAF todo alineado a la izquierda, o sea el CAF lo agrego modificado.

      Luego hago lo siguiente:

      //tomo solo el nodo CAF del DTE
      XmlNode nodoCAF = xmlDTE.SelectSingleNode("/DTE/Documento/TED/DD/CAF");

      //reemplazo el nodo CAF con el original del SII
      nodoCAF.InnerXml = xmlCAF.SelectSingleNode("/AUTORIZACION/CAF").InnerXml;

      Donde xmlDTE es el xml del DTE completo y xmlCAF es el xml del archivo de folios (FoliosSII...) cargado con PreserveWhitespace = true.

      Ojalá les sirva.

      Eliminar
  32. alguien sabe de (DTE-3-505) Firma DTE Incorrecta (Rechaza DTE)
    -- gracias

    ResponderEliminar
    Respuestas
    1. solucionaste este problema???

      Eliminar
    2. Revisen los acentos y caracteres latinos, para no tener problemas pueden usar ISO-8859-1

      Eliminar
    3. recontraverificado aun no logro construir el set de pruebas por estos caracteres, necesito asesoría, ya llevo 2 semanas entrampado en esto y no logro dar con el error

      esteban.alarcon@telcom.cl
      81390094

      Eliminar
    4. Problema solucionado, no era exactamente problema del encoding, sino que al firmar el SetDTE se volvían a recodificaban los caracteres acentuados provocando que el DTE sea distinto al firmado inicialmente. también ocurre al obtener el digest del timbre electrónico (FRMT)

      Eliminar
    5. Esteban Alarcón, Y cómo lo solucionaste, podrías ayudarnos con ese dato. Desde ya gracias.

      Eliminar
    6. He revisado una y otra vez la firma del timbre, no hay tildes ni signos raros en el CAF, pero me sigue enviando error de firma en timbre. Al generar el timbre lo codifico en ISO-8859-1 pero aún así tengo el error.
      Mi pregunta es si al leer la clave privada también tengo que codificarla en ISO y el DD también?? que otra cosa más puedo revisar?

      Eliminar
    7. lo solucionaste? tengo el mismo problema

      Eliminar
    8. NO, aún sigo con el problema...

      Eliminar
    9. ¿Alguien puede darme una mano con esto?, ya no se que más hacer

      Eliminar
  33. alguien sabe como constriuir un archivo de autorización de pruebas?
    Saludos,

    ResponderEliminar
  34. Me tira el siguiente error:
    -------------------------------------------------------------------
    Errores de Caratula

    Doc. Informado No Corresponde a Contenido - TpoDTE: 33
    ------------------------------------------------------------------
    He revisado la caratula una y otra vez y no e logrado identificar el problema
    Alguien sabe como soluconarlo?? cualquier ayuda se agradece

    PD: Excelente Blog me ayudo muucho en el tema de las firmas. Gracias :D

    ResponderEliminar
  35. Marcelo, realmente te pasaste, gracias a tu asesoría, por fin pude resolver este tema que me tenia sin dormir...

    (Altamente recomendable, muy humano e interesado en ayudar)

    Un fuerte abrazo y queda pendiente ese asadito,
    Gracias totales.
    CHARLES.

    ResponderEliminar
  36. Agradezco sus aportes, me han ayudado muchísimo!
    MI consulta:
    Los campos de tipo Base64 deben tener un máximo de 76 caracteres por línea lo cual no he podido cumplir ni para la firma del CAF ni para los datos del certificado (X509 Certificate). ¿A qué se puede deber este error?

    Saludos!

    ResponderEliminar
    Respuestas
    1. Estimado,

      Te recomiendo que no le des formato a estos campos dejalos tal cual, es decir para el lado. Es verdad que el SII te pide que sea con formato pero funciona correctamente si lo dejas para el lado.

      Atte.
      Marcelo Rojas Rojas

      Eliminar
  37. Estimado,

    Existe algun modo de poder visualizar el DTE XML a PDF ?.


    Saludos.

    ResponderEliminar
    Respuestas
    1. Estimado,

      Puedes utilizar herramientas gratuitas como ITEXT sharp para generar tus documentos pdfs.

      Eliminar
  38. Muy bueno el post, nos ayudo mucho.
    ahora la pregunta es
    ¿Como se firma el SetDTE?
    ¿se hace de la misma forma?
    se hace con ...?
    yo lo hago con PHP
    gracias de antemano

    ResponderEliminar
  39. Muchas Gracias!!!!

    Realmente todos los que visitan tu Blog, sacamos ideas de como debe hacerse!!!
    Gracias

    ResponderEliminar
  40. Felicitaciones Marcelo Rojas

    Qué útil ha resultado este post en contraposición con la escasa y dispersa 'ayuda' que brinda el SII, supuestamente el principal interesado en que esta simbiosis resulte.

    Pero por otro lado, todos los que hemos leído estos foros, nos hemos dado cuenta que muchas preguntas acusan más dudas conceptuales (me incluyo) que de programación.

    Por lo mismo, y para no abusar del altruismo del autor de este espacio, quiero proponer que se repita la idea de unas clases, (tal como una vez se hizo en el Café Los Gabrieles - Stgo Centro). Pero la diferencia es, que al final de éstas me comprometo a hacer un buen manual con ejercicios resueltos que podía titularse: “Resolviendo los acertijos del SII”, para subirlo gratuitamente a la red.

    Las 4 ó 5 clases deberían ser principalmente CONCEPTUALES con un ejercicio ‘real’ resuelto al final de éstas, por c/u de los participantes. Para tal efecto, podría usarse la aplicación gratuita OpenSsl y XML Copy Editor

    Por ejem, la primera clase podría ser:

    a) - Certificado Digital
    - Uso Llave Pública y Llave Privada. Verificación de firmas
    - Generación Firma Electrónica (Formato SHA1+RSA) en Base64
    - Generación Timbre Electrónico (Formato PDF417)

    Y así hasta que al final del curso el alumno pueda generar un Dte válido y firmado, listo para ser enviado.

    La idea está mucha más desarrollada, pero si hay interés lo conversamos.

    ResponderEliminar
  41. Hola, primer que nada muchas gracias por la informacion. Ahora tengo un problema respecto a la firma digital. Puedo generar el digestValue sin problemas, sin embargo no puedo hacerlo con el SignatureValue. Estoy probando con un ejemplo y no me da el mismo valor. Para hacer esta firma tengo que entregar como parametro todo el SignedInfo? (
    ) asi lo estoy haciendo pero no me funciona.
    Espero me puedan ayudar ya que slo me falta esto

    ResponderEliminar
    Respuestas
    1. Estimado Jaime puedes utilizar la siguiente rutina para poder firmar el documento completo de una vez.

      public static void firmarDocumentoXml(ref XmlDocument xmldocument, X509Certificate2 certificado, string referenciaUri)
      {
      // Create a SignedXml object.
      SignedXml signedXml = new SignedXml(xmldocument);

      // Add the key to the SignedXml document. 'key'
      signedXml.SigningKey = certificado.PrivateKey;

      // Get the signature object from the SignedXml object.
      Signature XMLSignature = signedXml.Signature;

      // Create a reference to be signed. Pass ""
      // to specify that all of the current XML
      // document should be signed.
      Reference reference = new Reference();
      reference.Uri = referenciaUri;

      // Add the Reference object to the Signature object.
      XMLSignature.SignedInfo.AddReference(reference);

      // Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
      KeyInfo keyInfo = new KeyInfo();
      keyInfo.AddClause(new RSAKeyValue((RSA)certificado.PrivateKey));

      ////
      //// Agregar información del certificado x509
      //// X509Certificate MSCert = X509Certificate.CreateFromCertFile(Certificate);
      keyInfo.AddClause(new KeyInfoX509Data(certificado));

      // Add the KeyInfo object to the Reference object.
      XMLSignature.KeyInfo = keyInfo;


      // Compute the signature.
      signedXml.ComputeSignature();

      // Get the XML representation of the signature and save
      // it to an XmlElement object.
      XmlElement xmlDigitalSignature = signedXml.GetXml();



      ///
      /// inserte la firma en el DTE
      xmldocument.DocumentElement.AppendChild(xmldocument.ImportNode(xmlDigitalSignature, true));

      }

      Eliminar
  42. Hola Marcelo:

    Agradezco tu valiosa labor de intentar de aclarar estos temas que lamentablemente no se han documentado adecuadamente.

    Quisiera saber si me puedes contestar la siguiente pregunta que no he visto contestada en ninguna parte con claridad:

    ¿En qué hay que fijarse al firmar un libro de compras o ventas? ¿Se firma el libro completo o sólo el nodo EnvioLibro? ¿Se aplica solamente la firma final del archivo completo o se usa un folio y CAF como en las facturas?
    Estoy hablando de ambiente de producción.

    Agradecería inmensamente una pronta respuesta.

    ResponderEliminar
    Respuestas
    1. Se me olvidaba: Recibo del SII el mensaje "LRF - Envio de Libro Rechazado por Firma".

      Gracias de antemano.

      Eliminar
    2. Estimado, lamentablemente el tiempo es escaso y no he podido responder tan rapido como me gustaría. Mira lo que se firma es el nodo EnvioLibro. El error de la firma puede ser por varias razones favor especificar el metodo de como firmas los libros.

      Gracias

      Eliminar
  43. hola, una consulta, yo tengo el mismo problema, al enviar el libro de guias de despacho, el sii me arroja el error "LRF - Envio de Libro Rechazado por Firma", ¿hay alguna manera de detectar cual es el error de la firma usando la misma firma o el documento generado? saludos!

    ResponderEliminar
  44. Hola, estoy generando la firma con un certificado .pfx y me envía un error indicando lo siguiente:
    Excepción no controlada del tipo 'System.Security.Cryptography.CryptographicException' en mscorlib.dll
    Información adicional: La contraseña de red especificada no es válida.

    ¿a que se puede deber eso?

    ResponderEliminar
    Respuestas
    1. Solucionado, me faltaba indicarle el password del certificado

      Eliminar
  45. hola estoy transformando mi sistema no tienes esta rutina en vb6 te lo agradecería ya que esto me esta provocando una ensalada que aun no entiendo , yo genero mis xml en vb6 y lo estamos utilizando con una empresa externa , todo ok pero queremos que estar trabajando en forma independiente ya que el soporte es pesimo ,

    ResponderEliminar
    Respuestas
    1. Estimado,

      Cuando pueda llamame al 224042279 para entender bien el problema

      Eliminar
  46. Alguien puede ayudarme con la firma del DTE ya que aparece bajo el nodo SetDTE, ¿como hago para que quede bajo el nodo Documento?

    ResponderEliminar
    Respuestas
    1. Cuando pueda llamame al 224042279 para entender bien el problema

      Eliminar
  47. Hola Marcelo, Excelente trabajo compartiendo y ayudando!

    Tengo una consulta ya que recibo el siguiente msj de respuesta por parte del SII:




    XXXXXXXX-2
    XXXXXXX-6
    40983408
    13/05/2016 12:24:17
    RFR - Rechazado por Error en Firma



    Según tu experiencia ¿cúal puede ser el error en la firma?
    o cúal es el error más común que se comete al firmar?

    Saludos y muchas gracias, quedo atento a tus comentarios!

    ResponderEliminar
  48. S.O.S alguien puede darme una mano, estoy programando en VB.net y e provado varias soluciones sugeridas pero el mensaje siempre es el mismo (DTE-3-505) Firma DTE Incorrecta (Rechaza DTE) Ayudaaaa

    ResponderEliminar
  49. Estimado Marcelo lamento profundamente molestarte, me hubiera gustado mucho resolver el problema personalmente pero se me acabaron las opciones y ya no tengo peras (estoy desesperado), he realizado el proceso completo desde la creacion del DTE hasta la firma, pero El SII me responde con el mensaje "RFR - Rechazado por Error en Firma" he alineado el doc a la izquierda tal como indicaste e insertado el CAF sin tocarlo y luego calculado el DD y creado el FRMT, me he preocupado de codificar correctamente el fichero, y lo firmo con la rutina que compartiste pero me sigue entregando ese implacable error, me podrias echar una mano

    ResponderEliminar
    Respuestas
    1. Hermann Pempelfort31 de mayo de 2016, 7:25

      Tengo el mismo problema, el documento está identico al original de SII, la verdad que llevo una semana y sigue dandome el mismo error. Lo único que me queda probar es cambiar el orden en que firmo.

      Indiqueme alguien si estoy haciendo algo mal.
      1) Genero el XML completo, EnvioDTE-SetDte-Caratula-Documento-Encabezado, etc (Completo).
      2) En el proceso anterior genero la FRMT del TED.
      3) Firmo el Documento
      4) Firmo SetDte
      Envío, el documento está identico al que SII da como ejemplo, pero me sigue arrojando "Rechazado Error en Firma".

      Lo único que llegaré a probar es cambiar el orden en que se generan las firmas, ya no se me ocurre nada más.

      Eliminar
    2. Hola Hermann Pudiste solucionar el problema?, yo tengo el mismo problema pero no lo puedo solucionar.

      Eliminar
    3. Hola Cristian, no la verdad que sigo teniendo el mismo problema. Ahora estamos cambiando la librería que firma, la que ocupa Nic.

      Eliminar
    4. Hola Hermann, es probable que el error no esté en la firma sino en el envío. Me di de cabezazos como 4 semanas en la firma y finalmente no era eso. Lo que pasa es que la mensajería de SII es malísima. Prueba enviar el documento firmado no a través de tu software sino que a través del SW del SII.

      Saludos
      Alejandro

      Eliminar
  50. Estimado yo formateo cada datos de tipo texto

    public static string mtdQuitarAcentosCaracteresNoUnicode(string strTexto)
    {
    string normalizedString = strTexto.Normalize(NormalizationForm.FormD);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < normalizedString.Length; i++)
    {
    UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(normalizedString[i]);
    if (uc != UnicodeCategory.NonSpacingMark)
    {
    sb.Append(normalizedString[i]);
    }
    }
    return (sb.ToString().Normalize(NormalizationForm.FormC));
    }

    ResponderEliminar
  51. Hola primero gracias por tu bloq es de gran ayuda.
    si me puedes ayudar con esto
    estoy tratando de realizar la firma de DTE ya esta la autentifican automatica
    creo el xml






    33
    72300
    2015-11-05


    76155060-8
    Agrocampo Negocios Agricolas Limitada
    Fabricacion Y Com.De Implementos Agricolas-maquinaria Y Productos Agricolas ,ser
    515009
    San Miguel Sitio 16
    Talca
    Talca


    76.658.280-K
    Agricola Pobeña S.A
    Agricola
    85966257
    Tucapel # 296, Ñuñoa
    Ñuñoa
    Ñuñoa


    30000
    0
    19
    5700
    35700



    1

    INT1


    Repuesto
    1

    30000
    0
    0
    30000


    1
    D
    Descto.
    %
    0




    EFECTIVO
    2015-11-05








    luego segun lo que entendido debo agrear el CAF y la firma
    este CAF tengo que pedirlo a Sii o puede ser cualquiera ?
    y como firmo el DTE


    esto tengo
    Public Shared Sub firmarDocumentoXml_dos(ByRef xmldocument As XmlDocument, certificado As X509Certificate2, ByRef referenciaUri As String)


    Try


    Dim signedXml As New SignedXml(xmldocument)
    signedXml.SigningKey = certificado.PrivateKey

    Dim XMLSignature As Signature = signedXml.Signature

    Dim reference As New Reference()
    reference.Uri = referenciaUri

    XMLSignature.SignedInfo.AddReference(reference)
    Dim keyInfo As New KeyInfo()
    keyInfo.AddClause(New RSAKeyValue(DirectCast(certificado.PrivateKey, RSA)))

    keyInfo.AddClause(New KeyInfoX509Data(certificado))
    XMLSignature.KeyInfo = keyInfo

    signedXml.ComputeSignature()

    Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()

    xmldocument.DocumentElement.AppendChild(xmldocument.ImportNode(xmlDigitalSignature, True))

    Catch ex As Exception
    Dim erro = ex.Message
    End Try

    End Sub

    pero me sale este error: No se puede resolver el Uri http://schemas.xmlsoap.org/soap/envelope/.

    agradeciera tu ayuda
    gracias por todo jorquerajl@hotmail.com

    ResponderEliminar
  52. Quiero expresar mis agradecimientos a Marcelo que gracias a su precisa asesoría pude por fín enviar y que me sean aceptadas las DTE.
    Tenías razón Marcelo en cuanto al tipo de letra al guardar el CAF en la base de datos, todo solucionado.
    Mil gracias.

    ResponderEliminar
  53. Alguien ha utilizado las nic labs estoy en la fase 4 y me da "Error Tecnico: TED - Firma invalida" alguien me puede ayudar.

    ResponderEliminar
  54. Estimado primero que todo, muchas gracias por compartir tus conocimientos, realmente me ha sido de mucha ayuda, muchas gracias, lo otro es que tengo un problema cuando envió el documento firmado al SII me aparece "Rechazado por Error en Firma []", no se porque podría ser primero armo el DTE lo firmo,luego armo el EnvioDTE,incluyo el DTE y después firmo el SETDTE quizás estoy haciendo mal en el proceso? Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Rodrigo Portilla6 de enero de 2017, 8:07

      Rechazado por Error en Firma []: Significa que el sobre no esta firmado correctamente, es decir, existe un error cuando firmas el SetDTE, por lo general se debe a el xml se está firmando en UTF-8 y no en ISO-8859-1. Lo otro es revisar que al canonizar no se cambie la indetentación o se agreguen espacios versus el xml final que envías al SII. Recomendación firmar un xml sin acentos o caracteres extraños, luego que funcione agregar acentos para detectar donde está el problema.

      Eliminar
    2. Muchas gracias por tu ayuda Rodrigo, lo haré pero el caf contiene acento supongo que si se los elimino por codigo me invalidaria inmediatamente la firma no? ,tambien tengo una duda cuando armo el envioDTE, resulta que armo el nodo a partir de una variable string por ejemplo, string envio = "......" y luego agrego el DTE firmado al string ,luego convierto la codificacion y cargo todo al xmlDocument y firmo el nodo quizas esto estará afectando el xml? . Gracias de antemano

      Eliminar
    3. para poder utilizar estos caf con acentos, agregar al documento xml (CAF) la instruccion de procesamiento
      , esto hara que el compilador de c# pueda leer bien el caf

      Eliminar
    4. string envio = Nodo EnvioDTE + Nodo SetDTE + Nodo Caratula

      Eliminar
    5. Gracias estimado, lo haré

      Eliminar
    6. Estimado aplique los cambios sugeridos, pero aún así me tira el mismo error, que otra cosa podría ser?

      Eliminar
  55. Hola gracias por compartir tu código estimado te lo agradezco mucho ,también tengo un caf razón social con acento y lo transformo a "& # 211 ;"(Sin espacio) el carácter con acento pero automáticamente se transforma a "& amp ; # 211 ;"(Sin espacios) y al mandar el documento al SII me da error que el valor es muy largo como podría arreglar eso?

    ResponderEliminar
    Respuestas
    1. Estimado

      favor enviar el documento caf para revisarlo y ver como podemos ayudarte

      Eliminar
    2. Estimado ya lo arregle, de todas formas gracias, ahora me tira error: (CAF-3-514) Firma del CAF incorrecta, eso significa que la firma de nodo CAF es incorrecta o la firma del nodo TED(ya que contiene el CAF) es la incorrecta?

      Eliminar
    3. Tecnicamente significa que al CAF se le realizo una alteración.

      Eliminar
  56. Buenas, me sale este error cuando despliego mi apliacacion(Web Service) en ISS instalado en un servidor Windows 2012, pero en mi computadora persona en Visual Studio si lo corre con normalidad (el archivo del certificado *.pfx lo copie y si lo encuentra la aplicación al momento de correr en el servidor): System.Security.Cryptography.CryptographicException: El sistema no puede encontrar el archivo especificado. en System.Security.Cryptography.CryptographicException.

    ResponderEliminar
    Respuestas
    1. Estimado,
      Lo que ocurre es que cuando trabajas en tu pc personal el sistema operativo es capaz de leer tus certificados intalados en tu maquina, pero es una cosa distinta en un servidor. En el server no le da permisos a tu app para leer los certificados instalados en el servidor por un tema de seguridad. El objeto x509certificate tiene varias flags para solucionar esto. Tambien puedes serializar el certificadoen una campo varbinary de la base de datos SQL y leerlo desde alli. Claro que deberas guardar la clave del certificado para poder instanciarlo con el objeto x509certificate mas tarde.

      Eliminar
  57. Estimado, te cuento que estoy enviando al SII el set de pruebas de factura electrónica y me responde invariablemente con el mensaje "Rechazado por Error en Firma []".
    Estoy desarrollando en VB6 y he probado el software mediante algunos XML enviados satisfactoriamente hace algunos meses atrás en el proceso de certificación de otra empresa. Pero solo logro emular la firma para DTE (con y sin tildes) y no para SETDTE. Probablemente se deba a un error en los datos que firmo precisamente para obtener el SETDTE.
    He validado el esquema del XML generado mediante el validador online xmlvalidation.com
    ¿Alguna sugerencia? Ya son varias semanas que llevo entrampado en esta situación.

    ResponderEliminar
  58. Marcelo: según tu experiencia, como puedo saber y solucionar el error de firma?
    gracias...
    Pablo

    ResponderEliminar
    Respuestas
    1. Estimado Pablo

      Según mi experiencia debes tener presente lo siguiente:

      - Verificar que al momento de generar el timbre del documento los caracteres esten codificados en ISO-8859-1 y no en ASCII
      - El archivo CAF debe estar identico al que entrega el SII al momento de generar el timbre.

      Con esto deberías pasar con el documento sin problemas

      Eliminar
    2. Marcelo: haber si entiendo
      el CAF entregado por SII no viene formateado
      y al sumar el nodo CAF al XML del DTE, lo esta formateando.. esto no debe ocurrir?

      Eliminar
    3. Marcelo, puedo abusar de ti y enviarte el XML que estoy generando y el CAF entregado?
      y decirme si esta correcta la generación?

      Eliminar
    4. tengo otro problema:
      tengo firmado el DTE341075.xml, lo valido con el software XOLIDOSIGN e indica que esta correctamente firmado. No obstante, al importar este DTE al EnvioDTE.xml, firmar el EnvioDTE.xml, el mismo software me indica que la firma del DTE y la estructura de firma es incorrecta. Yo comparo los XML generados y son iguales...alguna sugerencia?

      Eliminar
  59. Alguien sabe por que no puedo descargar CAF en modo de certificación ??? me sale un mensaje que dice: no está autorizado para ingresar a esta opción. Y si ingreso con el R.U.T de empresa dice: Rut del Contribuyente ingresado no está autorizado para esta opción ya que es usuario del Portal Mipyme.

    Saludos!!!

    ResponderEliminar
  60. Amigos Una consulta. Estoy subiendo varios documentos al SII y queda rechazados por el siguiente motivo:

    Detalle de Rechazos y Reparos de DTE
    ====================================

    Folio Tipo Estado
    ------------------------------------------------------------------------------
    139 33 RCH - DTE Rechazado
    (CAF-3-514) Firma del CAF incorrecta
    (TED-2-510) REPARO- Firma Timbre Electronico Incorrecta (Durante Abril de 2017, será cambiado a RECHAZO)

    Desde ya muchas gracias.

    ResponderEliminar
  61. Estimado, la rutina o como generas el objeto "X509Certificate2" como lo haces???? gracias cualquier orientación se te afradece!!!

    ResponderEliminar
  62. Estimados, estoy tratando de desarrollar la cesión en java, tengo el envío del documento pero la generación del sector me está dando problemas ya que siempre me lo techada por error de schema si alguien me pudiera ayudar estaría muy agradecido

    ResponderEliminar
  63. Claudio: tuve el mismo problema y al generar el XML el nodo EnvioDTE queda seguido de
    "
    <EnvioDTE...."

    ResponderEliminar
  64. standalone="no"? EnvioDTE coloca un salto de línea entre ellos..así lo solucione yo

    ResponderEliminar
  65. tengo otro problema:
    tengo firmado el DTE341075.xml, lo valido con el software XOLIDOSIGN e indica que esta correctamente firmado. No obstante, al importar este DTE al EnvioDTE.xml, firmar el EnvioDTE.xml, el mismo software me indica que la firma del DTE y la estructura de firma es incorrecta. Yo comparo los XML generados y son iguales...alguna sugerencia?

    ResponderEliminar
  66. estimados:
    alguien sabe de que se trata el siguiente error CHR-00004: no se encontro envió(XML)?
    como antecedente, el error me aparece cuando hago el envió del XML por UpLoad automático, en cambio cuando lo realizo en forma manual en el SII, me acepta el XML sin problemas..

    gracias...

    ResponderEliminar
  67. ¿Como lo podría hacer para firmar más de un documento del SET?

    ResponderEliminar
    Respuestas
    1. Estimado,
      Personalmente para poder firmar 2 o mas dtes que estan en un set dte, extraigo los dtes y los firmo por separado, luego los inserto nuevamente en el set dte y firmo el set dte.

      Espero que la información le ayude.

      Eliminar
  68. Estimado,

    Muchísimas gracias Marcelo así lo estoy haciendo.

    ¿Estoy creando el Set de prueba no tendréis algún ejemplo de los diferentes tipos y de las notas de credito en xml?


    ResponderEliminar
  69. Estimado Marcelo, primero agradecer tu blog me a sido de mucha ayuda, y segundo es saber si existe alguna forma de pasar ese codigo C# a php? desde ya muchas gracias

    ResponderEliminar
  70. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  71. Hola Marcelo, he leído el blog casi completo y es un gran aporte, desde ya te doy las gracias por dedicar tiempo a ayudarnos a todos a entender este mundo de la facturación con SII.
    Quiero comentarte que yo decidí hacer todo con Spring y usando jdk8 (nada de apache) por lo que tuve varios problemas que fui solucionando, pero ahora tengo el problema de (DTE-3-505) Firma DTE Incorrecta (Rechaza DTE) y no he podido salir de ahí.
    Si me pudieras dar algunas sugerencias seria genial.
    Gracias desde ya.

    ResponderEliminar
  72. Hola Marcelo:
    en el ambiente de Certificación utilizó el RUT de SII (60803000-K).
    Consulta:
    en el ambiente de Producción, en la CARATULA, se ocupara el RUT de SII o el RUT del cliente, para luego hacer el UPLOAD.

    gracias.
    saludos...

    ResponderEliminar
    Respuestas
    1. Estimado Pablo,

      Todos los envíos en ambiente de producción o certificación deben ir con el rut del SII. solo cuando envías el documento a tu cliente el rut debe ser el de tu cliente.

      Atte.
      Marcelo Rojas Rojas

      Eliminar
  73. Hola Marcelo:
    los datos de un contribuyente, se pueden obtener online?
    por ejemplo: existe algún Webservices que extraiga esa información?

    datos como el correo de intercambio registrado en el SII.

    gracias...

    saludos...

    ResponderEliminar
    Respuestas
    1. Estimado,
      Actualmente no existe un web services que permita descargar la lista completa de los contribuyentes o simplemente consultar uno para saber sus datos. Sin perjuicio de esto es posible recuperar la información utilizando programación.

      Puedes revisar esta página para ver si es lo que necesitas.

      https://lenguajedemaquinas.blogspot.com/2017/10/dll-recuperacion-lista-contribuyentes.html

      Atte.
      Marcelo Rojas Rojas

      Eliminar
  74. Buenas Tardes, Marcelo!

    Espero te encuentres bien, mira aunque no programo o nunca he entrado al mundo en .NET ...se agradecen todos tus ejemplos porque me hago algunas ideas de como ir estructurando los archivos en el lenguaje que utilizo como PHP (-=

    Y como estoy recién levantando a pulso un sistema ERP con modulos de facturación integrado....me queda mucho por hacer......uF!!!!

    Quería consultarte de la mano...

    Independiente del lenguaje q se este trabajando....estos mismos ¿deben crear el xml desde 0 para cada proceso...quiere decir:
    - EnvioDTE (cabeceras, datos, firma ,etc)? Utilizando las librerías respectivas...?

    O se toma un tipo de formato xml y en base a esa estructura se van añadiendo o llenando los tags de los mimmos xml.?

    Y lo último........

    Cuales serían las unicas formas de enviar los DTE's al SII
    (previo obviamente haber creado los xml con sus firmas respectivas...)?

    Ya que no es la idea que al terminar este mini erp con fact....los clientes solo creen las facturas...y despues tengan que ir a la pagina del sii....al formlario que estos ofrecen para subir (UPLOADED) los documentos.

    EL uso de webservices del sii es obligación para el envio y recepción ? o solo es opcional?

    Desde ya muchas gracias por tu orientación , gestión y profesionalismo.

    Atte,

    Wlaidmir



    ResponderEliminar
    Respuestas
    1. Uf, tienes varias preguntas.

      Ok veamos,

      1.- Efectivamente debes generar los documentos xml desde cero,para ello puedes utilizar una plantilla xml, una clase que lo genere o incluso puedes generarlos a mano para tus pruebas, el documento xml solo es un documento de texto con formato y un encoding ("ISO-8859-1") especifico.

      Posterior a esto debes comprobar que este bien construído utilizando el schema del sii. de esta forma sabras que tu documento no será rechazado por el SII.

      Luego lo debes timbrar y posterior a esto firmarlo.

      Luego lo ensobras en un nuevo documento xml denominado EnvioDte y lo firmas. En este momento estas listo para envarlo al SII utilizando los web services.

      Con respecto a los web services, son obligatorios para todos los documentos que debas enviar al SII.


      Uf Uf

      Bueno eso sería, facil y bonito.
      "Ahora bien, estos pasos parecen faciles, pero la practica te indicará todo un mundo de correcciones que se debe hacer para que los procesos fluyan correctamente"


      Gracias por escribir.

      Atte.
      Marcelo Rojas Rojas

      Eliminar
  75. Uf, tienes varias preguntas.

    Ok veamos,

    1.- Efectivamente debes generar los documentos xml desde cero,para ello puedes utilizar una plantilla xml, una clase que lo genere o incluso puedes generarlos a mano para tus pruebas, el documento xml solo es un documento de texto con formato y un encoding ("ISO-8859-1") especifico.

    Posterior a esto debes comprobar que este bien construído utilizando el schema del sii. de esta forma sabras que tu documento no será rechazado por el SII.

    Luego lo debes timbrar y posterior a esto firmarlo.

    Luego lo ensobras en un nuevo documento xml denominado EnvioDte y lo firmas. En este momento estas listo para envarlo al SII utilizando los web services.

    Con respecto a los web services, son obligatorios para todos los documentos que debas enviar al SII.


    Uf Uf

    Bueno eso sería, facil y bonito.
    "Ahora bien, estos pasos parecen faciles, pero la practica te indicará todo un mundo de correcciones que se debe hacer para que los procesos fluyan correctamente"


    Gracias por escribir.

    Atte.
    Marcelo Rojas Rojas

    ResponderEliminar
    Respuestas
    1. Perfecto, entendí y estoy mas claro aún Se agradece....

      Solo 3 consultas...y no te molesto más (-;

      1.- En el proceso de certificación....

      Según algunas indicaciones de los manuales del mismo SII y algunos videos externos....y lo que tu mismo me afirmas....Entonces se deben enviar los casos del set de pruebas de los DTE's en un único archivo "SOBRE" de (EnvíoDTE) para el proceso de certificación? o normalmente aunque una vez certificado y quiero enviar solo un DTE a un cliente (independiente del tipoDOC) tiene que estar incluido o empaquetado en un nuevo doc xml como lo sería 1 EnvíoDTE ? aunque sea solo uno?

      2.- Una vez creado el DTE o EnvíoDTE y quiero enviarlo....¿No existe ningún procedimiento manual (o formulario POST) en el sii para software de mercado para adjuntar y enviar mientras construyo el cliente de estos webservices ? o esta parte es mucho mas fácil de lo que parece? y es solo hacer un form con los campos necesarios para enviarlo?

      Te pregunto en detalle ya que tu tienes las experiencia en estos procedimientos y aparte de ya tener tu software certificado obviamente....

      3.- Y esta última consulta es:

      Tengo una idea (proyecto) a corto plazo...con respecto a ofrecer una especie de gestión fácil servicio de boletas electrónicas a ciertos clientes...

      ¿También existe un proceso de certificación aparte para este tema de las boletas? o solo se certifica como un tipo de documento más?...


      Muchas gracias nuevamente por tu Orientación, tiempo y gestión profesional.

      Atte.

      Wladimir.

      Eliminar
  76. buenas marcelo tengo el siguiente inconveniente ya tengo el DTE.xml creado, firmado y demas. el problema que se me presenta es al momento del envio recibo la siguiente respuesta por parte de sii

    CHR-00004: no se encontro envio(XML)

    en el header de la peticion esta:

    User-Agent: Mozilla/4.0
    Cookie: TOKEN=vhjzdbfvjsd
    Content-Type: multipart/form-data

    en el body:

    archivo:ejemplo.xml
    rutSender: 09988776
    dvSender: 3
    rutCompany: 12223456
    dvCompany: 4

    ando sin salida a que la respuesta que me da el sii es que no estoy enviando el documento cosa que si lo estoy colocando en el body de la peticion

    ResponderEliminar
    Respuestas
    1. hola
      tuve el mismo problema y lo solucione con dos cambios:
      1.- el archivo XML de envió, en el xml version="1.0" encoding="ISO-8859-1" DEBE HABER UN SALTO DE LINEA EnvioDTE xmlns="http://www.sii.cl/SiiDte"
      2.- el RUT del RECEPTOR DEBE SER el de SII

      Eliminar
    2. nada todavia hice esas dos modificaciones y me sigue arrojando el mismo error

      Eliminar
    3. envíame el XML para revisar...pnaviapohl@gmail.com

      Eliminar
  77. buenas tardes como estan, estoy tratando de firmar mi primer dte para el sii pero no he encontrado gormas muy claras de como hacerlo hasta el momento siempre recibo el siguiente error:
    (ENV-3-0) Error en Schema - [0] LSX-00213: only 0 occurrences of particle "Signature", minimum is 1
    no sabran a que se refiere esto?
    gracias de antemano

    ResponderEliminar
    Respuestas
    1. Puedes enviarme el documento DTE, así lo reviso y te cuento
      abaddon.1974@gmail.com

      Eliminar
  78. Marcelo:
    Sera posible algunos TIPS para automatizar la descarga de CAF y empresas autorizadas (emisores/receptores) utilizando HTTP request con el método GET.
    se que previamente me debo autenticar, pero trato de hacerlo con el certificado o con TOKEN y nada.
    Por tu ayuda muchas gracias...

    Pablo.

    ResponderEliminar
    Respuestas
    1. Estimado,

      No utilices el token generado por el medio de "Autenticación automática" debes tomar la página del sii donde se hace el login de usuario y generar desde allí el token. Es una tarea larga pero ese es el modo.

      Eliminar
    2. Marcelo:
      se obtiene ingresando usuario y clave o se le puede indicar el certificado?

      Eliminar
    3. Marcelo:
      hice el ingreso a la pagina del login del SII. Lo hice con RUT y CLAVE, pero la respuesta no es un XML para obtener el TOKEN.
      como puedo usar el certificado?
      da una respuesta al ingresar satisfactoriamente? de que tipo?

      gracias...

      envió un ejemplo de como hice el ingreso con RUT y CLAVE.
      LET boundary = Security.RandomGenerator.CreateRandomString(15)
      LET val="https://misiir.sii.cl/cgi_misii/siihome.cgi"
      DISPLAY SFMT("Connecting to URL '%1' ...",val)
      LET req = com.HTTPRequest.Create(val)
      # Use POST
      CALL req.setMethod("POST")
      CALL req.setVersion("1.0")
      # Zip content
      CALL req.setHeader("Accept-Encoding","gzip, deflate")
      CALL req.setHeader("User-Agent","Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp 5.0.2.4)")
      CALL req.setMultipartType("form-data",NULL,boundary)
      LET val="CLAVE"
      LET part = com.HTTPPart.CreateFromString(val)
      CALL part.clearHeaders()
      CALL part.setHeader("Content-Disposition",'form-data; name=\"clave\"')
      CALL part.setHeader("Content-Type","text/xml")
      CALL req.addPart(part)
      LET val="9999999-0" --RUT
      CALL req.removeHeader("Content-Type")
      CALL req.setHeader("Content-Disposition",'form-data; name=\"rutcntr\"')
      CALL req.doTextRequest(val)
      # Process response
      LET resp = req.getAsyncResponse()
      IF resp.getStatusCode() == 200 THEN
      DISPLAY "Done."
      LET xTokenGlosa = resp.getTextResponse()
      DISPLAY SFMT("Respuesta SII '%1' ...",xTokenGlosa)

      Eliminar
  79. Buenos días Marcelo, quería hacerte una consulta al enviar mi de me dale el siguiente error : RFR - Rechazado por Error en Firma, por casualidad no sabes cuál es la diferencia entre el campo digestvalue y signaturevalue?
    Gracias de antemano.
    Saludos

    ResponderEliminar
  80. hola Marcelo y si alguien sabe:
    cual es el formato correcto del Reporte de consumo de folios (RCOF) de boletas electrónicas, cuando no se ha utilizado ninguno el periodo tributario?
    caratula...
    resumen (que datos y cuales en cero)
    firma...

    ResponderEliminar
  81. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  82. Hola Marcelo, tengo una duda o un problema, realice el envio del Libros Contable Electronico y me lo rechazan por error llave publica, converse con el SII via correo y me dicen que modifican su software.

    Pasos basicos es:
    1.Armo el XML
    2.Tomo el CAL que tengo en la Base de Datos y lo concateno al XML
    3.Estampo la Firma Electronica.

    Lo que sucede es que el CAL toma la identacion del XML y hemos realizado varias pruebas y sigue sin poder tomar la forma que dice el SII.

    La Forma en como tu explicas todo pegado hacia la Izquierda como se ve en una de tus explicaciones.

    ResponderEliminar
    Respuestas
    1. Estimada,

      Lo mas probable es que estes firmando en "caliente" el documento. Te recomiendo que una vez que agregues el nuevo nodo al documento lo guardes. Y posterior a esto lo abras para finalmente firmarlo.

      Sí el problema persiste, puedes llamarme al 997800285

      Atte,
      Marcelo Rojas Rojas

      Eliminar
    2. Gracias Marcelo.

      Voy a revisar con mi equipo y te comento.

      Eliminar
  83. Estimados:
    Recurro a ustedes como último recurso. Resulta que al igual que un comentario anterior (de 2014, sin respuesta), me señala error de caratula. Por más que comparo y reviso el XML se encuentra idéntico al de prueba pero no logro dar con el problema.

    El error en cuestión es:
    Errores de Caratula
    Doc. Informado No Corresponde a Contenido - TpoDTE: 33


    Agradezco cualquier ayuda u orientación para solucionar esto.

    ResponderEliminar
    Respuestas
    1. Hola, yo tube ese error, la forma que encontré para solucionarlo fue generar y descargar un nuevo set de pruebas desde el ambiente de certificación y realizar nuevamente los pasos, ya me ha pasado un par de veces y creo que es un problema del SII, como que aveces el set de pruebas que se descarga no es el mismo que ellos guardan en el sistema

      Saludos.

      Eliminar
    2. Muchas gracias por su ayuda. Realizaré lo que me indica.

      Eliminar
  84. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  85. Hola Marcelo, estoy teniendo el ERROR DE VALOR DE FIRMA al parecer es por algo que se pierde al grabar el archivo XML, estoy utilizando xmlDocument para trabajar el archivo y al grabarlo lo hago con xmlDoc.save("c:\temp\miarchivo.xml") este me está generando algo extraño... Si pudieras compartir la forma que tienes para grabar el XML te lo agradeceria

    ResponderEliminar
  86. Marcelo o el que pueda ayudar:
    por medio del correo de intercambio recibo XML's, que trato de validar la firma. hay XML que vienen con la firma 'Detached', el cual la remuevo para luego verificar la firma, pero de igual modo me indica firma invalida.
    alguna sugerencia para validar la firma de documentos de proveedores?

    ResponderEliminar
  87. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  88. Hola Marcelo el ultimo comentario fue hace mas de un año, aqui en pandemia intengo ayudar a una empresa que tiene que informar Archivos XML para la OCDE al SII , algo que comenzo a partir de 2018, me pasaron el problema y aqui sufriendo por el soporte de SII

    Pregunta Cuando se firma un XML pasandole la referencias a la URI, la firma envuelve el TAG , SII entrega un formato que no he podido replicar con Programas para XML y menos con Codigo C#

    Ellos dicen que tu XML

    de la Forma


    {?xml version="1.0" encoding="UTF-8" standalone="no"?}
    {crs:CRS_OECD xmlns:cfc="urn:oecd:ties:commontypesfatcacrs:v1" xmlns:crs="urn:oecd:ties:crs:v1"
    xmlns:ftc="urn:oecd:ties:fatca:v1" xmlns:iso="urn:oecd:ties:isocrstypes:v1"
    xmlns:stf="urn:oecd:ties:stf:v4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" }

    {/crs:CRS_OECD}

    lo debes firmar asi de manera envolvente


    {?xml version="1.0" encoding="UTF-8"?}
    {Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="SignatureId"}
    {SignedInfo}
    {CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /}
    {SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /}
    {Reference URI="#RefId-85a9a9d5503548908d2db12a9e8296de"}
    {Transforms}
    {Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /}
    {/Transforms}
    {DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /}
    {DigestValue}...{/DigestValue}
    {/Reference}
    {/SignedInfo}
    {SignatureValue}...{/SignatureValue}
    {KeyInfo}
    {X509Data}
    {X509Certificate}...{/X509Certificate}
    {/X509Data}
    {/KeyInfo}
    {Object Id="RefId-85a9a9d5503548908d2db12a9e8296de"}
    {crs:CRS_OECD xmlns:cfc="urn:oecd:ties:commontypesfatcacrs:v1" xmlns:crs="urn:oecd:ties:crs:v1"
    xmlns:ftc="urn:oecd:ties:fatca:v1" xmlns:iso="urn:oecd:ties:isocrstypes:v1"
    xmlns:stf="urn:oecd:ties:stf:v4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" }

    {/crs:CRS_OECD}
    {/Object}
    {/Signature}

    pero lo que termina pasando cuando lo intentas firmar con el codigo C# clasico , no envuelve el XML sino que adjunta o pone al final del archivo la firma justo antes del cierre de tu "tag" o el "element" que quieres firmar. En el ejemplo de ellos es Object.

    Gracias !
    Firmar XML-CRS-OCDE...

    ResponderEliminar
  89. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  90. Hola Marcelo.

    Tengo tu aplicación para firmar DTE y funcionaba pefecto, pero ahora tengo un problema al querer firmar documentos.
    El problema se da en la función "DecodeRSAPrivateKey", al momento de hacer el "importParameters" de los RSAParameters se cae e indica: Datos incorrectos.

    ¿Sabes a qué se deba esto? Antes funcionaba perfecto la aplicación.

    Quedo atento.

    Saludos.-

    ResponderEliminar
  91. Hola Marcelo.
    muchas gracias por toda esta información de valor, quisiera hacer una pequeña pregunta respecto al certificado que se usa para la firma, es el mismo certificado que se usa para acceder al SII Chile, o debe ser otro que tenga la configuración de algoritmo hash de firma Sha1.

    ResponderEliminar
    Respuestas
    1. Estimado,

      El certificado debe ser para factura electrónica y este te sirve para firmar tus documentos dtes y también para acceder al SII

      Eliminar
  92. Hola
    Tengo problemas con un CAF con letra Ñ, respuesta del sii
    "Firma del CAF incorrecta"

    ResponderEliminar
  93. para aquellos que tienen el problema '(ENV-3-0) Error en Schema - CHR-00002: Line too long (4090)' les recomiendo que creen sus documentos dtes con indentación para evitar el largo máximo de la cadena que reclama el SII. Este es solo un error de formato. Técnicamente los servidores pueden leer un documento XML sin los retornos de carro, pero el SII solicita que este documento este indentado.

    Nota: Este problema no necesariamente tiene relación con la firma electrónica y su formato.

    Cosa curiosa es: llamé al SII para consultar por el código del error 'CHR-00002: Line too long (4090)' y luego de algunos me indicaron que pasarían al segundo nivel del SII para responder mi consulta. Después me colgaron.

    ResponderEliminar
    Respuestas
    1. Y como se indenta ??

      Mi codigo:
      Asi formateo firma; donde formateaXML corta firma en lineas de 76 caracteres.

      Dim fic As String
      fic = DirPath + "\XML\" + Archivo_XML + ".xml"
      Dim sw As New System.IO.StreamWriter(fic, False, Encoding.GetEncoding("ISO-8859-1"))
      texto = texto + FormateaXML(sig_DTE.OuterXml)
      texto = texto + ""
      sw.WriteLine(texto)
      sw.Close()


      Public Shared Function FormateaXML(ByVal xml As String) As String
      Dim it As String = ""
      Dim i As Integer
      Dim loXElement As New XmlDocument
      Dim texto As String
      For i = 1 To Len(xml)
      Dim p1 As Integer = InStr(i, xml, "")
      If p1 > 0 Then
      Dim p2 As Integer = InStr(p1 + 1, xml, "")
      If p2 > 0 Then
      texto = Mid(xml, p1 + 16, p2 - p1 - 16)
      texto = Corta_76(texto)
      it = it + Mid(xml, 1, p1 - 1) + "" + texto + ""
      xml = Mid(xml, p2 + 17, Len(xml))
      End If
      End If
      Dim p5 As Integer = InStr(i, xml, "")
      If p5 > 0 Then
      Dim p6 As Integer = InStr(p5 + 1, xml, "")
      If p6 > 0 Then
      texto = Mid(xml, p5 + 9, p6 - p5 - 9)
      texto = Corta_76(texto)
      it = it + Mid(xml, 1, p5 - 1) + "" + texto + ""
      xml = Mid(xml, p6 + 10, Len(xml))
      End If
      End If
      Dim p3 As Integer = InStr(i, xml, "")
      If p3 > 0 Then
      Dim p4 As Integer = InStr(p3 + 1, xml, "")
      If p4 > 0 Then
      texto = Mid(xml, p3 + 17, p4 - p3 - 17)
      texto = Corta_76(texto)
      it = it + Mid(xml, 1, p3 - 1) + "" + texto + ""
      xml = Mid(xml, p4 + 18, Len(xml))
      End If
      End If
      Next
      FormateaXML = it + xml
      End Function
      Public Shared Function Corta_76(ByVal Valor As String) As String
      Dim Firma As String = ""
      Dim i As Integer = 1
      Do While Len(Valor) > 76
      Firma = Firma + Mid(Valor, 1, 76) + vbCrLf
      Valor = Mid(Valor, 77, Len(Valor))
      Loop
      Firma = Firma + Valor
      Return Firma
      End Function



      Eliminar
    2. Asi lo resolvi.... incluyendo saltos de linea en XML usando vbCrLf !!

      Str_Doc = Str_Doc + "" + vbcrlf
      Str_Doc = Str_Doc + "" + CStr(j) + "" + vbcrlf
      If DTE_Det(j).Codigo_Producto > "" Then
      Str_Doc = Str_Doc + "" + vbcrlf
      Str_Doc = Str_Doc + "INTERNO" + vbcrlf
      Str_Doc = Str_Doc + "" + DTE_Det(j).Codigo_Producto + "" + vbcrlf
      Str_Doc = Str_Doc + "" + vbcrlf
      End If
      If DTE_Enc.Tipo_Documento <> "34" Then
      If CDec(DTE_Det(j).Exento_Producto) <> 0 Then
      Str_Doc = Str_Doc + "" + DTE_Det(j).Exento_Producto + "" + vbcrlf
      End If
      End If

      Eliminar
    3. "INTERNO" + VbCrLf

      Al final de cada Tag XML

      Eliminar
    4. Este comentario ha sido eliminado por el autor.

      Eliminar
    5. Hola, muy interesante lo que comentan y tengo el mismo error en mi software :( , queria saber si el error está en la firma (que se debe de cortar ) o es todo el documento XML.

      Quedo atento, saludos.

      Eliminar
  94. Lo acabamos de solucionar, teníamos el mismo mensaje (ENV-3-0) Error en Schema - CHR-00002: Line too long (4090) . en una línea del documento digitaron el signo +

    ResponderEliminar
    Respuestas
    1. en que parte colocaron el signo + ? saludos

      Eliminar
  95. Hola buenas tardes, en que parte del XML colocaron el signo + saludos

    ResponderEliminar
  96. Hola buenas dias, genero bien el FRMT, pero tengo el siguiente error al firmar el DTE "RFR rechazado por Error en Firma", estoy trabajando en lenguaje php. Necesito ayuda por favor.

    ResponderEliminar
    Respuestas
    1. Estimado, es muy probable que el archivo caf que estas insertando en el documento DTE no se a el mismo que bajas del SII, Verifica que el documento sea el mismo, con la misma estructura, pues cuando lo ordenas o le agregas retornos de carro, se invalida. También es posible que tu caf tenga del origen tildes en el nombre de la empresa. Sí necesitas más ayuda avísame.

      Eliminar
  97. Una duda, si formateo el xml para tenerlo todo ordenado, sin pegarlo todo hacia la izquierda, la firma deberia quedar bien tambien? pregunto porque cuando firmamos la semilla, no identamos todo hacia la izquierda y lo firmamos asi tal cual

    ResponderEliminar
    Respuestas
    1. Hola. Como ya se ha comentado en otras respuestas si se altera (aplicandole espacios o saltos de linea) cualquier parte del CAF (entregado por el SII) se invalida la firma. Si se altera cualquier contenido de algún DigestValue también. No te preocupes de dejarlo "ordenado"

      Eliminar
  98. otra duda es que al firmarlo, lo envias asi tal cual? no le colocas la caratula y lo vuelves a firmar?

    ResponderEliminar
  99. Este comentario ha sido eliminado por el autor.

    ResponderEliminar