Ver Mensaje Individual
  #25  
Antiguo 30-05-2017
seti.roman seti.roman is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Reputación: 0
seti.roman Va por buen camino
OpensslUtils

Hola, soy nuevo en este Foro, les dejo algo que puede servirles, quizás no esté muy claro. Es para firmar el ticket sin usar un Bat a la librería Openssl.
Deben conseguir OpensslUtils, que no recuerdo donde la encontré e incorporarla al proyecto.

Les adjunto el código que uso yo. Espero les sea útil.

Código:
function Tcomprobante.crearfirma: string;
var
  signer: TMessageSigner;
  camino: String;
  ruta: Pwidechar;
  firma: String;
  position: integer;
begin
  camino := ExpandFileName(application.ExeName + '\..\keys');
  ruta := Pwidechar(camino);

  fgeneracion := now();
  fexpiracion := inchour(fgeneracion,1);

  signer := TMessageSigner.Create;
  signer.LoadPrivateKey(ruta +'\'+ responsable.edita_responsables['llave'], '');
  signer.LoadCertificate(ruta + '\'+ responsable.edita_responsables['cert']);

  signer.PlainMessage :=
  '<?xml version="1.0" encoding="UTF-8" ?>'+
  '<loginTicketRequest version="1.0">'+
  '<header>'+
  '<uniqueId>123456</uniqueId>'+
  '<generationTime>'+formatdatetime('yyyy-MM-dd',fgeneracion)+'T'+formatdatetime('hh:mm',fgeneracion)+':00-03:00</generationTime>'+
  '<expirationTime>'+formatdatetime('yyyy-MM-dd',fexpiracion)+'T'+formatdatetime('hh:mm',fexpiracion)+':00-03:00</expirationTime>'+
  '</header>'+
  '<service>wsfe</service>'+
  '</loginTicketRequest>';

  signer.MIMESign;

  firma := signer.SignedMessage;
  firma := rightstr(firma,length(firma)-186);

  position := ansipos('==', firma);
  if position <> 0 then
  begin
    delete(firma,position,length(firma));
  end;

  result := firma;
end;
Responder Con Cita