Ver Mensaje Individual
  #7  
Antiguo 30-01-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Reputación: 14
iMia Va por buen camino
Validador nif de la agencia tibutaria (AEAT)

Requisitos:
- Importar la wsdl: "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2.wsdl"
- Tener capicom.dll registrada (regsvr32 C:\...\capicom.dll) y
- Importar el componente capicom.DLL creará el fuente CAPICOM_TBL
- Open ssl. (libeay.pas y openSsslUtils.pas).


Un form "TMain",
un TEdit "edNif", un TEdit "edNombre"
un TEdit "edCertificado", un TmaskEdit "mskCertPass"
un boton "btnValidarESNif"

opcional:
un TEdit "edResultado", un TEdit "edDNIValidado", un TEdit "edNombreValidado"


uses

Código:
uses
  // Windows API
  Winapi.Windows, Winapi.Messages, WinApi.WinInet,
  // System
  System.SysUtils, System.Variants, System.Classes, System.IniFiles, System.UITypes, System.Win.ComObj,
  System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent,

  // Rest - JSON
  REST.Json,
  // Soap
  Soap.SOAPHTTPClient, Soap.SOAPHTTPTrans, Soap.InvokeRegistry, Soap.Rio,
  // aeat NIF VAlidador
  VNifV21; // Módulo creado al importar el wsdl


  CAPICOM_TLB, // Unidad creada al importar la dll de capicom.

  libeay32, OpenSSLUtils;
declarar el tipo:

Código:
type
  PCCERT_CONTEXT = type Pointer;
Código:
function TMain.validarESNif(): VNifV2Sal;
var
  nifValidatorWS: VNifV2;
  VNifV2Entrada: VNifV2Ent;
  VNifV2Salida: VNifV2Sal;
  contri: Contribuyente;
  HTTPRIO: THTTPRIO;
begin
  HTTPRIO := THTTPRIO.create(self);
  HTTPRIO.HTTPWebNode.OnBeforePost := HTTPWebNode1BeforePost;
    nifValidatorWS := GetVNifV2(false, '', HTTPRIO);
    if nifValidatorWS <> nil then
  begin
    contri := Contribuyente.Create;
    contri.Nif := edDni.text;
    contri.Nombre := edNombre.text;
    setLength(VNifV2Entrada, 1);
    VNifV2Entrada[0] := contri;
    try
      VNifV2Salida := nifValidatorWS.VNifV2(VNifV2Entrada);
    except
      on E: EDOMParseError do
        ShowMessage('Sin respuesta: ' + #10 + #13 + E.message);
    end;
  end;
  result := VNifV2Salida;
end;

procedure TMain.HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
    SetCertificate(trim(edCertificado.text), mskCertPass.text, Data);
end;

procedure TMain.IdSSLIOHandlerGetPassword(var Password: string);
begin
  Password := mskCertPass.text;
end;

procedure TMain.btnValidarESNifClick(Sender: TObject);
var
  VNifV2Salida: VNifV2Sal;
begin
  VNifV2Salida := validarESNif();
  if VNifV2Salida <> nil then
  begin
    edResultado.Text := VNifV2Salida[0].Resultado;
    edDNIValidado.Text := VNifV2Salida[0].Nif;
    edNombreValidado.Text := VNifV2Salida[0].Nombre; // No importa por que por la LODP no devuelven el nombre. Dejan lo que se envía.
  end
  else ShowMessage('No se ha podido validar el NIF: ' + edDni.Text);
end;

Última edición por iMia fecha: 30-01-2023 a las 10:59:59.
Responder Con Cita