Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Facturacion Electronica SAT mexico VB6

Estas en el tema de Facturacion Electronica SAT mexico VB6 en el foro de Visual Basic clásico en Foros del Web. bueno antes que nada saludos a todos los colegas que han dejado su material para el tema de facturacion electronica del cual de por si ...
  #1 (permalink)  
Antiguo 19/04/2011, 13:12
Avatar de elfkampher  
Fecha de Ingreso: febrero-2011
Ubicación: Queretaro, Mexico
Mensajes: 35
Antigüedad: 13 años, 8 meses
Puntos: 0
Facturacion Electronica SAT mexico VB6

bueno antes que nada saludos a todos los colegas que han dejado su material para el tema de facturacion electronica del cual de por si hay muy poca informacion disponible me he visto en la necesidad de crear este nuevo tema porque 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:\certificados\cadena.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:\certificados\cfd.bat" For Output As #2
Dim digestion As String
digestion = "H:\OpenSSL\bin\openssl.exe dgst -sha1 H:\certificados\Cadena.txt>H:\certificados\sha1.tx t"
Print #2, digestion
ub = "H:\certificados\cfd.bat"
Close #2

y ejecutamos el programa con un shell

programa = Shell("H:\certificados\cfd.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:\cer\cadenaoriginal.txt)= 17cfff4aed23d4f8976f906fbfba073d3c57b102

para el siguiente paso debemos borrar los siguientes caracteres de este archivo
SHA1(c:\certificados\cadenaoriginal.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:\certificados\genpem.bat" For Output As #1
generarpem = "c:\openssl\bin\openssl.exe pkcs8 -inform DER -in c:\certificados\aqui_el_nombre_de_su_clave.key -passin pass:GRA0608157P1 -out c:\certificados\aqui_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
  #2 (permalink)  
Antiguo 19/04/2011, 13:14
Avatar de elfkampher  
Fecha de Ingreso: febrero-2011
Ubicación: Queretaro, Mexico
Mensajes: 35
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Facturacion Electronica SAT mexico VB6

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
  #3 (permalink)  
Antiguo 19/04/2011, 13:17
Avatar de elfkampher  
Fecha de Ingreso: febrero-2011
Ubicación: Queretaro, Mexico
Mensajes: 35
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Facturacion Electronica SAT mexico VB6

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:\certificados\sello.bat" For Output As #3
Print #3, "cd \"
Print #3, "cd openssl"
Print #3, "cd bin"
gencer1 = "\OpenSSL\bin\openssl.exe dgst -sha1 -sign H:\certificados\nombre_de_su_clave_aqui.key.pem -out h:\certificados\firma.txt h:\certificados\cadena.txt"
gencer2 = "\OpenSSL\bin\openssl.exe enc -base64 -A -in h:\certificados\firma.txt -out h:\certificados\sello.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:\certificados\sello.bat", vbNormalNoFocus)
MsgBox "generando sello"
'extraiendo sello
Dim sello As String
Open "H:\certificados\sello.txt" For Input As #5
Line Input #5, sello
Close #5
  #4 (permalink)  
Antiguo 19/04/2011, 13:19
Avatar de elfkampher  
Fecha de Ingreso: febrero-2011
Ubicación: Queretaro, Mexico
Mensajes: 35
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Facturacion Electronica SAT mexico VB6

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

Etiquetas: 6.0, basic, electronica, facturacion, mexico, openssl, sat, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:11.