Ver Mensaje Individual
  #207  
Antiguo 06-03-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Reputación: 10
seccion_31 Va por buen camino
Cita:
Empezado por elguille Ver Mensaje
Ese codigo en delphi 10.3 me da error aqui
Código Delphi [-]
    pStore := PFXImportCertStore(DataBlob, PWideChar(widestring(pass)), PKCS12_INCLUDE_EXTENDED_PROPERTIES);
debido a que cambia
Código Delphi [-]
DataBlob.pbData := @PFX[1];
si lo dejo en
Código Delphi [-]
DataBlob.pbData := @PFX[0];
va bien pero en la linea internetsetoption recibo el mismo error que al principio, "codigo error 6"
He revisado el codigo y hay un monton de errores ahi dentro

el codigo que carga el certificado esta correcto

pero no se transmite el password a la DLL
y en la DLL el array de sesiones se comprueba al llegar a la zona de carga del certificado de forma erronea.

creo que corrigiendo esto:

en el componente:

Código:
function TVerifactu.validNIF(nif, nombre:string; var resultado, nombreRes:string):boolean;
var
    valida_nif: TValidadorNIF;
    j:integer;
begin
      checkAutoRun;

      result:=false;

      valida_nif.nombreCertificado:=Certificado;
      valida_nif.passwordCerficado:=passwordCertificado;
      valida_nif.nifvalidar       :=nif;
      valida_nif.nombre           :=nombre;
      valida_nif.resultado        :='';
      valida_Nif.error            :=true;

      validarNIF( valida_nif );

      if valida_Nif.error then
      begin
              resultado:='';
              nombreRes:='';
              result:=false;
              exit;
      end;

      resultado:=valida_Nif.resultado;
      nombreRes:=valida_Nif.resultadoN;
      result:=true;
end;

y esto en la DLL:

Código:
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;

ya deberia funcionar, a mi me funciona.

A principios de la semana que viene publicare una nueva version corregida.

Pero ya esta solucionado.

slds