Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/02/2012, 15:24
jaquemate1977
 
Fecha de Ingreso: diciembre-2011
Mensajes: 1
Antigüedad: 12 años, 4 meses
Puntos: 0
Factura Electronica XML del SAT con VB6

Hola amigos tengo un bendito problema al generar el XML y luego Validarlo, les comento que es lo que tengo:

* La empresa es Educativa y esta en el esquema de MEDIOS PROPIOS para la generación de sus Facturas Digitales (CFD).

* Creo primero el Archivo .PEM el cual para mi es FIJO ya que lo genero solamente 1 vez, con el siguiente código en OPENSSL

C:\GnuWin32\bin\openssl.exe pkcs8 -inform DER -in c:\sha1\CAT860403KT9_1108261409S.key –passin pass:12345678pas > c:\sha1\cat.key.pem

Ahora si les muestro el código en VB6

1. Creo la cadena Original con los datos de la facturación y de ahí lo convierto a UTF-8
CadOriAUX = CadenaOriginal
Var1 = 1
Do While Var1 <= Var2
Var3 = Asc(Mid(CadOriAUX, Var1, 1))
If (Var3 >= &H80) Then
CadOriAUX= Left(CadOriAUX, Var1 - 1) + Chr(&HC2 + ((Var3 And &H40) / &H40)) + Chr(Var3 And &HBF) + Mid(CadOriAUX, Var1 + 1)
Var1 = Var1 + 1
End If
Var1 = Var1 + 1
Loop

2. Ahora lo Guardo en un Archivo TXT
Open "C:\sha1\01_CadenaOriginalCAT.txt" For Output As #1
Print #1, CadOriAUX
Close #1

3. Una vez que obtengo la Cadena Original a UTF8, genero la Digestión a SHA1:
programa = Shell("C:\sha1\02_cfdcat.bat", vbNormalFocus)
RutaSHA1 = "C:\sha1\03_SelloGeneradoCAT.txt"

donde el archivo 02_cfdcat.bat contine la instrucción:

C:\GnuWin32\bin\openssl.exe dgst -sha1 C:\sha1\01_CadenaOriginalCAT.txt > C:\sha1\03_SelloGeneradoCAT.txt

Ya en el VB6 al archivo lo dejo exclusivamente con el resultado de la digestión;
"SHA1(C:\sha1\01_CadenaOriginalCAT.txt)=ea31fd15b7 71d033da27bcf50ccbf307c42d6a60"

Open RutaSHA1 For Input As #3
Line Input #3, Linea
Var1 = Len(Linea)
Var2 = Var1 - 41
If Var2 > 0 Then
CadOriAUX = Mid(Linea, 41, Var2)
Else
CadOriAUX = Mid(Linea, 41, 41)
End If
Close #3


Open RutaSHA1 For Output As #4
Print #4, CadOriAUX
Close #4

Entonces me queda el archivo 03_SelloGeneradoCAT.txt : ea31fd15b771d033da27bcf50ccbf307c42d6a60

4. Hasta aquí Todo funciona bien, digo a mi parecer entonces es cuando empleo el siguiente código

programa = Shell("C:\sha1\06_GeneraSelloCAT.bat", vbNormalFocus)

Donde el archivo 06_GeneraSelloCAT.bat tiene la instrucción:
C:\GnuWin32\bin\openssl.exe dgst -sha1 -sign C:\sha1\cat.key.pem C:\sha1\01_CadenaOriginalCAT.txt | C:\GnuWin32\bin\openssl.exe enc -base64 -A > C:\sha1\07_ResultadoSelloGeneradoCAT.txt

Se entiende que con este se sella el SHA1 y se genera el SELLO el cual se almacena el el Archivo 07_ResultadoSelloGeneradoCAT.txt ese texto lo anexo en el XML en el campo SELLO, quedando el resultado del sello algo como esto: lW0UjEYTCeSTrsiiPeIv7V3HaV0Kj6oh+e6QzvLspigBCCl9J5 GuRDn7CokYV5PbkOOzR74ZXcW5Oe4E7oH99FJCpqt1FofZ0fgW f6zxx6wPSDzKtQYzemdKKJ1X4DLl898esCzqD3G1tVr7TcXP+0 +NXs034yXFSxGo84hw4hY=

Procedo a VALIDAR el XML y me da este resultado

Resumen del análisis del XML
Archivo XML :100108.xml
Ruta :C:\sha1\XMLCAT\100108.xml

Estructura : Estructura del CFD correcta
CFD codificado en: UTF-8.
El sello del comprobante es Inválido

Folio :No Registrado
Folio : 100108
Serie : A
Año : 2011
Número de Aprobación : 259811
Rfc emisor : CAT860403KT9

Vigencia del CSD : A la fecha de emisión del CFD, el CSD es : Activo
Detalle del análisis del XML
Resultado de la Digestión :No se pudo verificar el sello
Tipo de Certificado:
No. de Serie del CSD :00001000000104257503

Cadena Original :||2.0|A|100108|2012-02-02T15:11:24|259811|2011|ingreso|Pago en una sola exhibición|Pago en una sola exhibición|4350.00|4350.00|CAT860403KT9|COLEGIO AMERICANO DE TABASCO SC|PROLONGACION DE PASEO USUMACINTA|1144|TABASCO 2000|VILLAHERMOSA|CENTRO|TABASCO|MEXICO|86035|CUHE 770531U30|ERNESTO DE LA CRUZ HERNANDEZ|JUAN ALDAMA|13|BARRIO SAN LUIS|JALPA DE MENDEZ|TABASCO|MEXICO|86200|1|Servicio|1|COLEGIATU RA SECUNDARIA 2011-2012 #6 FEB|4350.00|4350.00|IVA|16|0.00|0.00||


Lo que necesito saber cada instrucción de los archivos .BAT es correcto o mejor dicho a como esta descrito en el OPENSSL... espero explicarme y que me puedan ayudar, ya que NO se que hacer..

Gracias