Ahora va corregido y (por ahora) funcionando:
Código:
function Tcomprobante.crearfirma: string;
var
signer: TMessageSigner;
ruta: Pwidechar;
firma: String;
position: integer;
begin
ruta := Pwidechar(ExpandFileName(application.ExeName + '\..\keys'));
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)-188); //*********** AGREGUE 2
position := ansipos('==', firma);
if position <> 0 then
begin
delete(firma,position+2,length(firma)); //******** SUME 2 A LA POSICION PARA QUE INCLUYA LOS ==
end;
xgs.observartexto(firma);
result := firma;
end;