E

elfkampher

Usuario (México)

Primer post: 19 abr 2011Último post: 19 abr 2011
1
Posts
0
Puntos totales
1
Comentarios
F
Facturacion Electronica SAT mexico
Apuntes Y MonografiasporAnónimo4/19/2011

bueno gente he pasado buscando de foro en foro y de sitio en sitio informacion para hacer la facturacion electronica pero pues la verdad es que hay muy poco y despues de mucho leer y mucho partirme el coco pense que debo compartir lo que he investigado hasta el momento y la mejor manera creo que es en codigo bueno lo que use fue visual basic 6 porque? pues porque no fui jefe del proyecto donde se uso la facturacion y openssl porque es una buena herramienta para manejar las llaves y certificados claro que si lo hacen en vb.net ya hay herramientas que lo hacen al parecer este año entro en rigor una nueva modalidad de la factura electronica los nuevos cambios los pueden buscar en la pagina de hacienda en la Modificación al Anexo 20 de la Resolución Miscelánea Fiscal para 2010 la cual para la gente que ya se topo con que sus sellos son inválidos cambia la digestion MD5 por SHA1 inicialmente hice mi facturacion con visual basic 6 con lo cual tube dolores de cabeza al tener que codificar a utf-8 lo cual hice con el siguiente codigo Function CodificarUTF8(s) Dim i Dim c i = 1 Do While i <= Len(s) c = Asc(Mid(s, i, 1)) If c >= &H80 Then s = Left(s, i - 1) + Chr(&HC2 + ((c And &H40) / &H40)) + Chr(c And &HBF) + Mid(s, i + 1) i = i + 1 End If i = i + 1 Loop CodificarUTF8 = s End Function despues de generar la cadena original que ya deben saber como se hace si no pues en este link lo encuentran http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_6543.html declare un string Dim cadenaoriginal As String y la codificacion se haria de la siguiente manera cadenaoriginal = CodificarUTF8(cadenaoriginal) despues segun el modo habitual era pasar la cadena por una digestion sha1 lo cual se haria de la siguiente forma primero hay que guardar la cadena original en un archivo Open "c:certificadoscadena.txt" For Output As #1 Print #1, cadenaoriginal Close #1 ya teniendo el archivo de texto cadena.txt podemos usar openssl para encriptarlo para lo cual utilice archivos.bat para ejecutar las rutinas de la consola (cmd) Open "H:certificadoscfd.bat" For Output As #2 Dim digestion As String digestion = "H:OpenSSLbinopenssl.exe dgst -sha1 H:certificadosCadena.txt>H:certificadossha1.tx t" Print #2, digestion ub = "H:certificadoscfd.bat" Close #2 y ejecutamos el programa con un shell programa = Shell("H:certificadoscfd.bat", vbNormalFocus) ahora tenemos nuestra cadena original encriptada en el archivo sha1.txt el cual se almacenaria con un formato parecido a este SHA1(h:cercadenaoriginal.txt)= 17cfff4aed23d4f8976f906fbfba073d3c57b102 para el siguiente paso debemos borrar los siguientes caracteres de este archivo SHA1(c:certificadoscadenaoriginal.txt)= personalmente lo hice abriendolo y almacenandolo en una cadena despues usando la funcion mid le dije cuantos caracteres quitar pero ya sabran ustedes como quieran hacerlo ahora bien segun el anexo 20 de la reforma fiscal dice que debemos pasar la llave privada por una encriptacion RSA la cual con openssl se puede hacer por medio de la instruccion pkcs8 Open "c:certificadosgenpem.bat" For Output As #1 generarpem = "c:opensslbinopenssl.exe pkcs8 -inform DER -in c:certificadosaqui_el_nombre_de_su_clave.key -passin pass:contraseñadelallave -out c:certificadosaqui_el_nombre_de_su_clave.key.pem " Print #1, generarpem Close #1 y de la misma manera que la rutina anterior se ejecutaria con un shell el paso para generar el sello seria poner la siguiente instruccion en openssl creo que ya han de haber tomado cuenta de como se hace openssl dgst -sign nombre_de_su_llave.key.pem md5.txt | openssl enc -base64 -A > sello.txt bueno hasta aqui todo bien el problema es que cuando envio a hacienda esto me dice el validador que el sello es invalido asi que probe otra manera ya que al parecer en openssl cuando uno pone dgst pone por defaul MD5 asi que estaba ejecutando un sha1 y un md5 haciendo con esto un chile con carne bien sabroso por lo cual quite la primera digestion sha1 que mostre arriba y sustitui por el siguiente codigo Dim gencer1, gencer2 As String Dim per Close #n_file Open "H:certificadossello.bat" For Output As #3 Print #3, "cd " Print #3, "cd openssl" Print #3, "cd bin" gencer1 = "OpenSSLbinopenssl.exe dgst -sha1 -sign H:certificadosnombre_de_su_clave_aqui.key.pem -out h:certificadosfirma.txt h:certificadoscadena.txt" gencer2 = "OpenSSLbinopenssl.exe enc -base64 -A -in h:certificadosfirma.txt -out h:certificadossello.txt" Print #3, gencer1 Print #3, "cd " Print #3, "cd openssl" Print #3, "cd bin" Print #3, gencer2 MsgBox "generado codigo para el sello" Close #3 per = Shell("H:certificadossello.bat", vbNormalNoFocus) MsgBox "generando sello" 'extraiendo sello Dim sello As String Open "H:certificadossello.txt" For Input As #5 Line Input #5, sello Close #5 y sin embargo sigue poniendome que el sello es invalido si alguien con experiencia en openssl me pudiese ayudar estaria eternamente agradecido espero que esto sirva como guia para gente que este empezando este año sus sistema de facturacion electronica en vb6 o vb.net solo que en visual basic.net pueden usar las clases encoding para utf8 y cryptography para las codificaciones solo que no se como se hace por eso uso openssl que es de lo que mas material encontre

0
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.