Ver Mensaje Individual
  #3527  
Antiguo Hace 4 Semanas
oxtanc oxtanc is offline
Registrado
 
Registrado: may 2007
Posts: 6
Reputación: 0
oxtanc Va por buen camino
Problemas Envio SII

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.
Responder Con Cita