02/02/2012, 15:24
|
| | Fecha de Ingreso: diciembre-2011
Mensajes: 1
Antigüedad: 12 años, 11 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 |