Hablando de facturación electrónica y basandome en los manuales que encontre quiero comentarles el método para generar el Sello digital para incrustarselo en el XML que se enviara al SAT.
En el tan afamado Anexo 20 de la Resolución Miscelánea Fiscal para 2009 que en resumen dice que para obtener el sello digital solo necesitamos calcular el MD5 de la cadena Original y después con nuestra llave privada (terminación .key.pem) le pasamos una encriptacion con RSA y el resultado de esto lo encriptamos en Base64 y listo tenemos nuestro sello digital y el comando es:
openssl dgst sign [URL_DE_LLAVE_PRIVADA] [URL_ARCHIVO_CADENA_MD5_DE_CADENA_ORIGINAL] | openssl enc -base64 -A [URL_ARCHIVO_SALIDA_PARA_SELLO_DIGITAL]
Solamente necesitas reemplazar las variables que estan entre [] por tus datos y listo fácil y rápido obtendrás tu sello digital
No olvides visitar algunos tips para implementar factura electronica
He encontrado otro metodo para generar el sello digital, cadena original y el MD5 de esta…
xsltproc archivo_base_convertir_xsd.xsl archivo_xml.xml openssl dgst -md5 sign llave_privada.key.pem | openssl enc base64 -A
A partir del 2011 es necesario ocupar encriptación SHA1
xsltproc archivo_base_convertir_xsd.xsl archivo_xml.xml openssl dgst -md5 sign llave_privada.key.pem | openssl enc base64 -A
Cualquier duda en los comentarios, consultando todos mis temas que tengo de factura electrónica.
Si quieres conocer más de la Facturación electrónica, has clic aqui. o deseas más información de los cambios que hubo en la facturación electrónica este 2011, visita este enlace
Pero si lo que necesitas es consultoría personalizada Solo contactame
Si quiere Ud. obtener factura electronica de importantes cadenas mexicanas en un solo click, favor intentelo en esa pagina: facturamexico.blogspot.com
Hola a todos
Gracias por compartir…
Tengo que encontrar la forma de generar certificado y sello para las cove o sea los documentos electronicos de el sistema de ventanilla unica para las transaciones de importacion y exportacion en Mexico
Ellos recomiendan usar OpenSSL, que es etupendo,pero yo debo generar el certificado y el sello en forma dinamica desde una aplicacion en delphi
No he conseguido encontrar ningun material que me guie para usar la biblioteca de criptografia de openssl en delphi,por lo cual estoy desarmado
Exigen que sea con algoritmo de digestion sha1 y estandar de firma pks7
Puede alguien guiarme en esto para poder generar dinamicamente con Delphi ?
Mil millones de gracias
Leonardo
Hola a todos
Quiero comentarles de una librería que estoy usando para la generación y validación de un CFD o CFDI, esta librería puede ser usada en C#, Delphi o cualquier otro lenguaje de programación, les dejo la liga de donde puedes descargarla junto con sus ejemplos
http://www.electronicdocument.com.mx
Hola Tomgzlz
Si deseas generar el CFD o CFDI, te invito a que uses una librería que he desarrollado y que te permite generar fácilmente este tipo de archivos, esta librería cumple con todos los requisitos exigidos por el SAT, además de que te ayuda a generar el CBB, el reporte mensual, te permite validar una factura electrónica, te hace la integración con el PAC, etc.
Esta librería la he liberado no tiene costo alguno.
Saludos. Estoy interesado en tu librería para generar el sello de la factura electrónica. Gracias
La librería se llama Electronic Document Library y puedes encontrarla en http://www.facturando.com.mx
Hola podrias indicarme en donde puedo bajar la libreria que desarrollaste o si fueras tan amable de enviarmela por favor.
Hola a todos,
Quiero agradecer por la información de cómo generar se genera el sello digital, aunque llevo tiempo generar facturas electrónicas, nunca sabia como generarlo porque he estado usando un librería que quiero recomendar ya que me permitió fácilmente integrar la factura electrónica en la empresa donde trabajo, es muy sencilla de usar, generar CFD y CFDI, además de que tiene la integración con el PAC, también genera el código de barras bidimensional; quiero invitarlos a que la prueben ya que a mí me fue de mucha utilidad y creo que proyectos como esto es bueno darlo a conocer, ya que además de todo es totalmente gratuita.
Saludos a todos
Podrias indicarme el nombre o pagina en donde la puedo encontrar, gracias!!!
hola alguien me podria ayudar a implementarlo a C# o algun tutorial que tengan
me gustaria saber,
Tiene idea del comando o instrucciones para generar el sello digital desde PL/SQL ?? ya genere la factura electronica desde programacion en VFP, pero necesito pasar todo esto a PL/SQL. Ya tengo la base de datos en ORACLE solo me falta el Sello.
Hola a todos…. como puedo generar el sello digital en PL/SQL de Oracle
gracias de antemano
Saludos
Gracias a todos los que ponen sus dudas y soluciones he logrado crear mi comprobante fiscal digital, de aquí y de otras páginas, les dejo mi código por si a alguien le sirve, es visual basic 2008:
Cadena Original:
Cadena = «|»
SGL_Query = «SELECT EFA_CEFA,EFA_NUME,CONVERT(VARCHAR,EFA_FECH,126),CTE_NORS,CTE_RFCC,CTE_CALL,CTE_NEXT,CTE_NINT,CTE_COLO,»
SGL_Query = SGL_Query & «PDM_DESC, ENT_DESC, PAI_DESC, CTE_CODP »
SGL_Query = SGL_Query & «FROM TDFCTEFA, TCFCTCTE, TCRHUPAI, TCRHUPDM, TCRHUENT »
SGL_Query = SGL_Query & «WHERE EFA_CCTE = CTE_CCTE And CTE_CPDM = PDM_CPDM And CTE_CENT = ENT_CENT »
SGL_Query = SGL_Query & «And CTE_CPAI = PAI_CPAI »
SGL_Query = SGL_Query & » AND EFA_CEFA=» & Val(Txt_Clave.Text)
Call Ejecuta(sat, SGL_Query)
Do Until TraeSig(sat) = NOMOREROWS
Cadena = Cadena + «|2.0|A»
Cadena = Cadena + «|» + Trim(DameDato(sat, 2))
Cadena = Cadena + «|» + Trim(DameDato(sat, 3))
Cadena = Cadena + «|174911|2010|ingreso|efectivo|Pago en una sola exhibicion|subtotal|0|grantotal»
Cadena = Cadena + «|JSI060303UA9|JF SISTEMAS, S. A. DE C. V.|MIRAVEREDA|23|B|CUMBRIA»
Cadena = Cadena + «|CUAUTITLAN IZCALLI|ESTADO DE MEXICO|MEXICO|54740»
Cadena = Cadena + «|» + Trim(DameDato(sat, 5))
Cadena = Cadena + «|» + Trim(DameDato(sat, 4))
Cadena = Cadena + «|» + Trim(DameDato(sat, 6))
If Trim(DameDato(sat, 7)) + Trim(DameDato(sat, 8)) «» Then
Cadena = Cadena + «|» + Trim(DameDato(sat, 7)) + Trim(DameDato(sat, 8))
Else
Cadena = Cadena + «|»
End If
Cadena = Cadena + «|» + Trim(DameDato(sat, 9))
Cadena = Cadena + «|» + Trim(DameDato(sat, 10))
Cadena = Cadena + «|» + Trim(DameDato(sat, 11))
Cadena = Cadena + «|» + Trim(DameDato(sat, 12))
Cadena = Cadena + «|» + Trim(DameDato(sat, 13))
Loop
SGL_Query = «SELECT DFE_CANT,DFE_CONC,DFE_IMPO,DFE_CANT*DFE_IMPO,DFE_IIVA*DFE_CANT,DFE_CONS »
SGL_Query = SGL_Query & «FROM TDFCTDFE WHERE DFE_CEFA=» & Val(Txt_Clave.Text)
Call Ejecuta(sat, SGL_Query)
Dim ImpIva As Double
ImpIva = 0
GTotal = 0
Subtotal = 0
Do Until TraeSig(sat) = NOMOREROWS
Cadena = Cadena + «|» + Trim(DameDato(sat, 1))
Cadena = Cadena + «|PZA»
Cadena = Cadena + «|» + Trim(DameDato(sat, 6))
Cadena = Cadena + «|» + Trim(DameDato(sat, 2))
Cadena = Cadena + «|» + Trim(Str(CorrigeMoneda(DameDato(sat, 3))))
Cadena = Cadena + «|» + Trim(Str(CorrigeMoneda(DameDato(sat, 4))))
ImpIva = ImpIva + Val(CorrigeMoneda(DameDato(sat, 5)))
Subtotal = Subtotal + CorrigeMoneda(DameDato(sat, 4))
GTotal = GTotal + CorrigeMoneda(DameDato(sat, 4)) + CorrigeMoneda(DameDato(sat, 5))
Loop
Cadena = Cadena + «|IVA|» + Trim(Str(IIva * 100))
Cadena = Cadena + «|» & Trim(Str(ImpIva))
Cadena = Cadena + «|» & Trim(Str(ImpIva))
Cadena = Cadena + «||»
Cadena = Replace(Cadena, «subtotal», Trim(Str(Subtotal)))
Cadena = Replace(Cadena, «grantotal», Trim(Str(GTotal)))
System.IO.File.WriteAllText(«C:\SARV3.1J\ELE\cadena_orig.txt», Cadena)
archivo XML:
Dim ANIO As Long
ANIO = 0
SGL_Query = «SELECT YEAR(EFA_FECH) FROM TDFCTEFA WHERE EFA_CEFA=» & Val(Txt_Clave.Text)
Call Ejecuta(sat, SGL_Query)
Do Until TraeSig(sat) = NOMOREROWS
ANIO = Val(DameDato(sat, 1))
Loop
Dim W As New XmlTextWriter(«C:\SARV3.1J\ELE\» & Txt_Clave.Text & «.xml», System.Text.Encoding.UTF8)
W.WriteStartDocument()
Shell(«C:\OpenSSL-Win32\bin\openssl.exe pkcs8 -inform DER -in C:\SARv3.1J\ELE\JSI060303UA9_0903250930.key -passin pass:chela2009 -out C:\SARV3.1J\ELE\JSI.key.pem»)
System.Threading.Thread.Sleep(500)
Shell(«C:\OpenSSL-Win32\bin\openssl.exe x509 -inform DER -outform PEM -in C:\SARv3.1J\ELE\jsi060303ua9_1010061243s.cer -pubkey -passin pass:chela2009 -out C:\SARV3.1J\ELE\JSI.cer.pem»)
System.Threading.Thread.Sleep(500)
If ANIO 0 Then
W.WriteStartElement(«Impuestos»)
W.WriteAttributeString(«totalImpuestosTrasladados», Trim(Str(ImpIva)))
W.WriteStartElement(«Traslados»)
W.WriteStartElement(«Traslado»)
W.WriteAttributeString(«impuesto», «IVA»)
W.WriteAttributeString(«tasa», Trim(Str((IIva * 100))))
W.WriteAttributeString(«importe», Trim(Str(ImpIva)))
W.WriteEndElement() ‘finaliza traslado
W.WriteFullEndElement() ‘finaliza traslados
W.WriteFullEndElement() ‘finaliza impuestos
End If
W.WriteStartElement(«Impresion»)
W.WriteAttributeString(«CadenaOriginal», Cadena)
W.WriteFullEndElement()
‘…………………………………
W.WriteFullEndElement() ‘finaliza comprobante
W.WriteEndDocument() ‘finaliza documento
W.Flush()
W.Close()
obviamente yo uso mi base de datos, espero entiendan el código y lo adapten al suyo.
Solo quiero comentar que he creado una librería que permite generar el CFD y el CFDI de forma sencilla y lo mejor de todo GRATUITA
Sirve para Delphy y para .Net, lo invito a que la prueben.
http://electronicdocument.com.mx/
Hola amigos, despues de varias semanas de desarrollo, pruebas, visitas a foros, etc en la empresa que tenemos decidimos liberar el codigo que estaremos usando para la facturación electrónica como código abierto para que la comunidad se beneficie. Pueden ver más información sobre este proyecto asi como descargarlo junto con ejemplos, etc de la siguiente liga:
http://www.bambucode.com/codigoabierto/facturacion_electronica_delphi.php
Algunas caracteristicas de la libreria:
– Hecha 100% en clases para que sea facil de usar en cualquier proyecto.
– Usa OpenSSL y no requiere librerias o DLLs adicionales.
– Realiza el sellado de la factura llamando directamente al DLL de OpenSSL y usando la llave privada en formato .key por lo que no es necesario convertirla a formato PEM evitando los problemas de tener el archivo PEM sin llave de por medio en el disco duro del usuario.
– Obtiene el certificado en base64 para incluirlo en la factura XML directo de la libreria OpenSSL por lo que no se usa para nada llamados a openssl.exe
– Todas las funciones y procedimientos son probados con pruebas de unidad (a traves de DUnit).
– 100% codigo abierto y gratuita.
Publicamos el código de esta librería ya que al menos hace unos meses no encontramos nada parecido y lo vimos como una necesidad que beneficiaría a toda la comunidad en este tema de facturación electrónica que puede llegar a ser bastante complejo.
Gracias a sitios como este y a toda la comunidad por compartir el conocimiento, esperamos esta sea una manera de regresar algo a cambio.
Saludos!
Hola,
les dejo una aplicación (1.5MB) para que validen sus sellos digitales MD5 y SHA1:
http://rapidshare.com/files/427613907/Demo_Sello_Digital.rar
Es necesario instalar OPENSSL 0_9_8d(6.5MB), el cual pueden bajar del siguiente link:
http://rapidshare.com/files/427614580/Win32OpenSSL-0_9_8d.exe
Espero les sea util.
Saludos!
Hola a todos buen dia.
El foro si me esta sacando de muchas dudas, como describes el comando para generar el sello lo complementaria de esta manera.
openssl dgst -sign [URL_DE_LLAVE_PRIVADA] [URL_ARCHIVO_CADENA_MD5_DE_CADENA_ORIGINAL] | openssl enc -base64 -A > [URL_ARCHIVO_SALIDA_PARA_SELLO_DIGITAL]
Muchas gracias por tus aportaciones.
Saludos
Existe una función en c# es Convert.toBase64(tu array de bytes)
Ayuda para generar el sello digital en vb.net!!
que talk Juan manuel.. ps Ya quedo en php, grax, saludos a todss..
Hola que tal necesitaria su ayuda para realizar el sello digital por medio de C# en Visual Studio 2008. Les agredezco de antemano.
que talk Juan manuel, ps ya ejecute tu codigo pero en
($proc->importStyleSheet($xsl);)
Se atota y dice «apache.exe – Error de aplicacion en la instruccion 0x019d1ef1 hace referencia a la memoria en «0x0000000c», la memoria no se read»
haga click en aceptar para finalizar
haga click en cancelar para depurar.
Pero cualquiera de las dos no soluciona nada.. vuelve a salir..
que puede ser.
Saludos a todos.
Hola, otra vez yo, disculpa por no haber podido responderte con certeza. sinceramente estube metido leyendo algunas cosas, parece que todo va mejor, ya genero el archivo XML, solo hay un detalle, no tengo idea de como generar el sello digital. uso vb.net, no si debo descargar algun convertidor de base 64 o algo asi.
Hola soy nuevo en esto de la facturación electrónica.
La verdad que no tengo idea, he leído algo acerca de como generarla, pero primero que nada quisiera saber si me pueden ayudar a entender que es lo primero que debo hacer.
Tengo algunas clases en visual basic .net que contienen los datos de la factura
Pero la parte del sello digital y la cadena original, como la obtengo?
¿estos son independientes a los folios de la Factura que da el SAT?? por donde debería empezar?
Que tal? El sello digital lo obtienes con la cadena original y la llave privada, yo implemente la factura electronica en C# … si necesitas te asesoro para hacer los respectivo a la factura electrónica
Hola Juan manuel podras asesorarme para generar la factura digital en c#
Hola a mi tambien me interesa saber mas sobre la generacion del sello, no puedo hacer la encriptacion RSA con la llave privada.. Ojala y puedas ayudarme…
Que tal Juan Manuel tengo un detalle con el sello digital en C#, hasta la digestion voy bien, pero despues a la hora de agregar la llave privada a la encriptación RSA ya no me da el resultado esperado, a donde te puedo enviar mi par de metodos que hacen esto para ver si le puedes echar un ojo, gracias.
Hola, como uso el OpenSsl en C#, me refiero a que tengo que instalar, tengo un exe llamado asi y desde linea de comandos puedo crear las instrucciones, me gustaria saber si es esto lo que necesito y llamarlo con shell desde C# o hay algo mas integrado, por favor que no sea de uso comercial. si me podrias mostrar algun ejemplo de codigo. saludos
Si tienes el archivo de llave privada ya convertido a pem entonces puedes hacer lo siguiente desde PHP
$dom1 = new DOMDocument();
$dom1->load(‘factura.xml’); //Cargas el XML de la factura (los datos aun estan incompletos)
$xsl = new DOMDocument;
$xsl->load(‘cadenaoriginal_2_0.xslt’);//Cargas el xsl
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
$cadena_original=$proc->transformToXML($dom1);//Transformas la salida, y obtiens la cadena original
$file=’llaveprivada.pem’;//llave privada
$pkeyid = openssl_get_privatekey(file_get_contents($file));//Obtienes la llave privada
openssl_sign($cadena_original, $crypttext, $pkeyid, OPENSSL_ALGO_MD5);//Firmas la cadena original
openssl_free_key($pkeyid);
$sello = base64_encode($crypttext); // lo codifica en formato base64
$comp=$dom1->getElementsByTagName(‘Comprobante’)->item(0)->attributes->getNamedItem(‘sello’)->nodeValue=$sello; //agregas el sello
$dom1->save(‘factura.xml’);//guardas de nuevo el sml ya completo
Hola Juan Manuel, estoy con esto de la factura electronica con php, probe tu codigo y logre sacar el sello segun lo esperado, pero en la parte
$xsl = new DOMDocument();
$xsl->load(«d:\cadenaoriginal_2_0.xslt»);//Cargas el xsl
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$cadena_original=$proc->transformToXML($dom1);//Transformas la salida, y obtiens la cadena original
marca error
Warning: DOMDocument::load() [domdocument.load]: Start tag expected, ‘<' not found in file:///d:/cadenaoriginal_2_0.xslt, line: 2 in D:\xampp\htdocs\md5.php on line 120
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error in D:\xampp\htdocs\md5.php on line 123
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsltParseStylesheetProcess : empty stylesheet in D:\xampp\htdocs\md5.php on line 123
Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: No stylesheet associated to this object in D:\xampp\htdocs\md5.php on line 124
No se que este pasando, espero puedas ayudarme, gracias!
Querido Juan manuel
No sabes la felicidad que tuve al encontrar tu codigo y al probarlo ver en Validador de forma y sintaxis de Comprobantes Fiscales Digitales de SAT el siguiente texto:
El sello del comprobante es válido
Gracias brother!!!
Gustavo y Juan Manuel, que hicieron para que les diera valido, yo he intentado varias veces y me sigue marcando que no es valido.
Estoy usando openssl y estoy haciendo todo manualmente.
Saludos
Vean este tutorial, espero les pueda resolver varias dudas.
http://actron.wordpress.com/2010/11/16/facturacion-electronica-sello-openssl-php/
Saludos @Elite_Astaroth
Para los desarrolladores que buscan un ejemplo o guía de la Factura Electronica México aquí les dejo la ultima versión del programa que desarrollé en Visual FoxPro ( VFP 6.0 ) ya con la generación del archivo XML.
http://www.megaupload.com/?d=QSHK0M2O
Espero les sirva para complementar sus aplicaciones.
Saludos
Halcón Divino
que tal, oye algún correo dond localizarte, ya que he visto tu trabajo y me gustaría ver si me puedes asesorar, espero me puedas apoyar, gracia
Hola que tal!!!
Hice un proyecto de ejemplo en Visual Basic 6 para generar el sello y validarlo. Aunque no uso OpenSSL, sino unos componentes de Chilkat. Si les interesa visiten la siguiente pagina. Espero que les sea de utilidad.
http://www.taringa.net/posts/hazlo-tu-mismo/6218009/Generar-sello-para-la-factura-electronica-de-Mexico.html
Yo te puedo asesorar de manera gratuita
Hola, necesito ayudar para lo de la factura electronica apenas compraron el contpaq i en la ofcina pero no se como implementar todo… podrias ayudarme : D ?
te dejo mi correo [email protected]
Hola mi nombre es Victor de Jesus me gustaria saber sobre como generar mis archivos xml (Factura electronica) y veo que tu ya estas mas empapado sobre esto
De dond eres ??? y me gustaria si puedes asesorarme con respecto a este tema y mas sobre el aspecto tecnico : Como genero la cadena que se incluye en la factura , ya cuento con un sistema implementado en VB6 que genera facturas que se imprimen en papel , mas no el CFD
Si gustas puedo enviarte informacion de facturación y su implementacion, y si estas interesado puedo resolver tus problemas.
hola jessica si me puedes orientar te lo agradeceria mucho suerte y un abrazo
Hola buen dia, no se si me pudieras decir como llegaste al archivo .key.pem correcto, segun yo llegue a el, pero al validar la factura en la pagina del sat me marca un error, y no se si me falte ahcer algun paso alterno…
Descargue unos archivos para pruebas que da el sat: aaa010101aaa_CSD_01.cer y .key asi como su contraseña.
Linea de comando:
openssl -inform DER -in aaa010101aaa_CSD_01.key -out aaa010101aaa_CSD_01.key.pem
Y nada mas, con ese .pem estoy generando luego el comando que tienes descrito para digerirlo en md5 la cadena original con el .key.pem en un mismo paso, pero me da error… Me hara falta algo para generar el .pem correcto?
Gracias de antemano y Saludos.
Miren este tutorial, espero les pueda servir para resolver varias dudas, es sobre como generar el sello.
http://actron.wordpress.com/2010/11/16/facturacion-electronica-sello-openssl-php/
Nos vemos