Hola a todos, agradecería vuestra ayuda. Actualmente tengo unos 100 Certificados Digitales Instalados en mi Pc de Desarrollo. Tenía problemas a la hora de Seleccionar el Certificado Digital cuando lo buscaba por Nombre. Debido a ello he tenido que modificar código y realizar las búsquedas por Numero de Serie (lo podemos obtener del propio certificado Digital). Os lo adjunto aquí por si le sirve de ayuda a alguien:
Código Delphi
[-]PROCEDURE TFPrincipal.HTTPRIO1HTTPWebNode1BeforePost(
CONST HTTPReqResp: THTTPReqResp; Data: Pointer);
VAR
Store: IStore;
Certs: ICertificates;
Cert: ICertificate2;
CertContext: ICertContext;
PCertContext: PCCERT_CONTEXT;
CertSerialKey: OleVariant;
I: integer;
CONST
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
BEGIN
CertSerialKey := 'xxxx3464D7A0xxxx6513E73A7439xxxx';
Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
Certs := Store.Certificates AS ICertificates2;
IF Certs.Count > 0 THEN
FOR i := 1 TO Certs.Count DO
BEGIN
Cert := IInterface(Certs.Item[i]) AS ICertificate2;
IF Cert.SerialNumber = CertSerialKey THEN
BEGIN
Cert := IInterface(Certs.Item[i]) AS ICertificate2;
CertContext := Cert AS ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
IF InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False THEN
BEGIN
ShowMessage('Internet SSL certificate. Something went wrong');
END;
END;
END
ELSE
ShowMessage('Internet SSL certificate. Not Certificates Installed');
END;
De otro lado, tras actualizar las direcciones del WebService de la AEAT no consigo consigo que funcione el servicio y o bien se me responde que el XML no esá bien conformado (Falta el Periodo de Liquidación) cuando en el xml se incluye o que puedes establecer una comunicacion el servidor de la aeat en la direccion defURL (estoy enviando en prueblas, dao que estaba modificando código).
Las URL del WS de pruebas son:
Código Delphi
[-]
CONST
defWSDL = '..../aeat/ssii_1_1_bis/fact/ws/SuministroFactEmitidas.wsdl';
defURL = '....prewww1.aeat.es/wlpl/SSII-FACT/ws/fr/SiiFactFRV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroFactEmitidasPruebas';
La respuesta cuando me la envia es
Código Delphi
[-]
env:Client
Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: PeriodoLiquidacion
Y el XML Enviado es este, donde podeis comprobar que si se incluye el nodo PeriodoLiquidacion:
Código:
<SuministroLRFacturasEmitidas>
<Cabecera>
<IDVersionSii>1.1</IDVersionSii>
<Titular>
<NombreRazon>xxxxx</NombreRazon>
<NIF>xxxxx</NIF>
</Titular>
<TipoComunicacion>A0</TipoComunicacion>
</Cabecera>
<RegistroLRFacturasEmitidas>
<PeriodoLiquidacion>
<Ejercicio>2024</Ejercicio>
<Periodo>1T</Periodo>
</PeriodoLiquidacion>
Agradecería Vuestra ayuda, llevo 4 días con este tema y no consigo resolverlo.