Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 10-07-2025
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 266
Poder: 20
Galahad Va por buen camino
Cita:
Empezado por Galahad Ver Mensaje
vale, muchas gracias,, voy a revisar ese proyecto y adaptar esa función a ver si solucionamos el tema..
Hola, perdonad que moleste de nuevo con esto, pero es que no lo consigo.
He intentado adaptar el ejemplo de carga del proyecto 'Demo Verifactu DLL', pero como tengo delphi 12 y ese proyecto esta pensado para delphi 7 no coinciden algunas clases y no consigo adaptarlo.

por ejemplo en el proyecto de delphi 7 el evento webnodebeforepost esta declarado así:
Código Delphi [-]
procedure TEventosWebNode.WebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
  Data: Pointer);
var
  pStore: HCERTSTORE;
  pCert: PCERT_CONTEXT;
  DataBlob: CRYPT_BIT_BLOB;
  PFX: TBytes;
  pass,cert:string;
begin
  if sesion=-1 then // viene de un validador de nif
  begin
      pass:=nifValidatorPass;
      cert:=nifValidator;
  end
  else     // viene de un objeto verifactu
  begin
      pass:=sesiones[sesion].inicio.passwordCertificado;
      cert:=sesiones[sesion].inicio.nombreCertificado;
  end;


  if (pos('.PFX',uppercase(cert))=0) and
     (pos('.P12',uppercase(cert))=0) then exit;


  cargaCertificado(data, cert, pass);
end;

y yo, en delphi 12 yo la utilizo asi:

Código Delphi [-]
procedure TEventosWebNode.WebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
  Client: THTTPClient );
  //Data: Pointer);
var
  pStore: HCERTSTORE;
  pCert: PCERT_CONTEXT;
  DataBlob: CRYPT_BIT_BLOB;
  PFX: TBytes;
  pass,cert:string;
  puntero: pointer;
begin
  pass    :=  inicio.passwordCertificado;
  cert    :=  inicio.nombreCertificado;

  puntero :=  HTTPReqResp.ClientCertificate;// GetHTTPReqResp;
  if (pos('.PFX',uppercase(cert))=0) and
     (pos('.P12',uppercase(cert))=0) then exit;

  cargaCertificado(puntero, cert, pass);
end;

luego , la función cargacertificado aplico este codigo:
Código Delphi [-]
procedure cargaCertificado( Data:Pointer ; cert,pass:string);
var
  pStore: HCERTSTORE;
  pCert, currentcert: PCERT_CONTEXT;
  //DataBlob: CRYPT_BIT_BLOB;
  DataBlob:  CRYPT_DATA_BLOB;
  PFX: TBytes;
  certname:string;
begin
  pStore := nil;
  pCert := nil;

  PFX := TFile.ReadAllBytes( cert );
  try
    DataBlob.cbData := Length(PFX);
    DataBlob.pbData := @PFX[0];

    // Almacen temporal con el contenido del PFX
    pStore := PFXImportCertStore(DataBlob, PWideChar(Pass), PKCS12_INCLUDE_EXTENDED_PROPERTIES or CRYPT_MACHINE_KEYSET );
    CheckError(pStore);

    // Buscar un certificado con clave privada
    // Solo debería haber uno
    pCert := CertFindCertificateInStore(pStore,
                                        X509_ASN_ENCODING,
                                        0,
                                        CERT_FIND_HAS_PRIVATE_KEY, //CERT_FIND_ANY,
                                        nil,
                                        nil);
    CheckError(pCert);

    // Pasarlo al servicio
    InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT));
    finally
    if Assigned(pCert) then
       CertFreeCertificateContext(pCert);

    if Assigned(pStore) then
      CertCloseStore(pStore, 0);
  end;

end;

Un saludo ...
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Verifactu o por requerimiento (no-verifactu) ¿decisión del usuario? Maska10 Temas legales 2 07-12-2024 12:34:47
Depurar aplicacion en modo servicio jlrbotella API de Windows 7 17-07-2015 22:43:29
Problemas con Proftp modo pasivo hexxa Linux 0 06-06-2008 18:49:10
problemas al integrar una aplicación dentro de otra aranel Varios 1 23-10-2005 01:40:00


La franja horaria es GMT +2. Ahora son las 23:46:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi