Ver Mensaje Individual
  #241  
Antiguo 08-10-2010
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Reputación: 22
JXJ Va por buen camino
Question

Cita:
Empezado por Rom@n Ver Mensaje
Hola quetal programadores quiero aportar un poco al tema de facturacion electronica voy a explicar brevemente este codigo esperando que le sirva a mas de uno:
1:Primero Busco con dialogExecute el archivo .cer
2:ejecuto el openssl con shellexecute y paso los parametros para convertir a formato pem y creo un archivo de texto.
3:con una funcion de escaneo busco la palabra not after y copio solo la fecha con copy y la proceso para lograr un formato de echa valido
4:la funcion LongDateStrToShortDateStr me rotorna el numero de mes ya que en el archivo caduca aparece el mes abreviado ejem:ene,feb,mar....dic


Código Delphi [-]
procedure Tfrm_datos_empresa.BitBtn5Click(Sender: TObject);
var
Rutacerti,nombrecerti:string;
position: integer;
dia,mes,yy,h,m,s:string;
begin
if Opencerti.Execute then
begin
Rutacerti := Opencerti.FileName ;
if Rutacerti <> '' then
begin
nombrecerti:=ExtractFileName(opencerti.FileName);
CopyFile(PChar(rutacerti), PChar('C:\SAT\'+nombrecerti), false);
certi.Text:=nombrecerti;
ShellExecute(Handle, nil, pchar('C:\openssl\openssl.exe'), pchar('x509 -inform DER -outform PEM -in '+PChar('C:\SAT\'+nombrecerti)+' -out C:\SAT\'+nombrecerti+'.pem'),nil,SW_SHOW);
Sleep(1000);
ShellExecute(Handle, nil, pchar('C:\openssl\openssl.exe'), pchar('x509 -in C:\SAT\'+nombrecerti+'.pem -text -out C:\SAT\caduca.txt'),nil,SW_SHOW);
Sleep(1000);
//proceso para sacar la fecha de caducidad
position := ScanFile('C:\SAT\caduca.txt', 'Not After', true);
if position <> -1 then
begin
//showmessage(archivo_caduca);
dia:=Copy(archivo_caduca,17,2);
mes:=LongDateStrToShortDateStr(Copy(archivo_caduca,13,3));//(Copy(archivo_caduca,13,3)));
yy:=Copy(archivo_caduca,29,4);
h:=Copy(archivo_caduca,20,8);
if date>=strtodatetime(dia+'/'+mes+'/'+yy+' '+h) then
showmessage('Este certificado ya esta caducado:'+ dia+'/'+mes+'/'+yy+' '+h)
else
showmessage('Certificado Vigente hasta:'+ dia+'/'+mes+'/'+yy+' '+h);
caduca.DateTime:= strtodatetime(dia+'/'+mes+'/'+yy+' '+h);
end
else
begin
ShowMessage('No se econtro Fecha de caducidad (Not After)');
end;
end;
end//fin del dialog1 execute
else
begin
showmessage('no se ejecuto');
end;

cual es tu funcion

scanfile
Responder Con Cita