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;