Estimados compañeros. Tengo una duda con respecto al sello digital, y aunque este tema ya esta olvidado, es el que mas se acerca a la duda que tengo
en general para obtener el sello digital, en la version 2.0 o 2.2 hay que obtener la cadena original la cual la obtengo a traves de un XSLPageProducer
mediante el siguiente codigo
Código Delphi
[-]
XSLPageProducer1.XMLData := XMLDoc3;
XSLPageProducer1.FileName:='lcadenaoriginal_2_0.xslt';
cadenaoriginal := XSLPageProducer1.Content;
despues hay que eliminar todos aquellos caracteres indeseados como son el Retorno de carro, el escape, los espacios antes y despues del pipe, etc, y se codifica en UTF8 mediante el sisguiente codigo
Código Delphi
[-]
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#13,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#10,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#8,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' ','');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' |','|');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'| ','|');
cadenaoriginal := UTF8Encode(cadenaoriginal);
apliacamos la encriptacion md5 con la llave privada en formato pem y al resultado le aplicacmos la encriptacion base64
Código Delphi
[-]
StrPCopy(inbuf,cadenaoriginal);
InitOpenSSL;
key:=LoadPrivateKey(llaveprivada,'');
EVP_SignInit(@mdctx,EVP_md5());
EVP_SignUpdate(@mdctx,@inbuf,StrLen(inbuf));
EVP_SignFinal(@mdctx,@outbuf,Len,key);
EVP_MD_CTX_cleanup(@mdctx);
EVP_PKEY_free(key);;
FreeOpenSSL;
result := bintobase64(@outbuf,Len);
Hasta aqui todo bien, al menos eso creo, porque en su tiempo validaba los documentos xml generados en el sat y pasaba dicha validacion. En la actualidad dicho validador del SAT me marca error de que la version 2.0 no estaba vigente en la fecha de emision del comprobante, y por mas que le he movido a las fechas no logro hacerlo funcionar.
si hay algun error y algiuen lo detecta pues le agradeceria la ayuda.
Ahora bien que pasa con el sello en la version 3.2? es exactamente el mismo tratamiento excepto que en lugar de hacer la encriptacion md5, se hace con sha1? porque asi lo he intentado y el v alidador del sat me rechaza el sello de l documento, incluso con esta herramienta el sello sale distinto
http://solucionfactible.com/sfic/cap...rramientaSello
utilizo el siguiente codigo
Código Delphi
[-]
XSLPageProducer1.XMLData := XMLDoc3;
XSLPageProducer1.FileName:='cadenaoriginal_3_2.xslt';
cadenaoriginal := XSLPageProducer1.Content;
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#13,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#10,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#8,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' ','');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' |','|');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'| ','|');
cadenaoriginal := UTF8Encode(cadenaoriginal);
StrPCopy(inbuf,cadenaoriginal);
InitOpenSSL;
key:=LoadPrivateKey(llaveprivada,'');
EVP_SignInit(@mdctx,EVP_sha1());
EVP_SignUpdate(@mdctx,@inbuf,StrLen(inbuf));
EVP_SignFinal(@mdctx,@outbuf,Len,key);
EVP_MD_CTX_cleanup(@mdctx);
EVP_PKEY_free(key);;
FreeOpenSSL;
result := bintobase64(@outbuf,Len);
muchas gracias por su tiempo, y por su ayuda en caso de aplicar
Alexis De la Cruz