Ver Mensaje Individual
  #1811  
Antiguo 07-10-2021
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Reputación: 14
iMia Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
Con AutoFirma consigo firmar el archivo, siguiendo los pasos que hay unos posts más atrás.

Con AutoFirma, el archivo firmado resultante ya está en UTF-8 SIN BOM sin tener que hacerle nada. AL parecer respeta la codificación original.
Además, según http://tools.chilkat.io/xmlDsigVerify.cshtml, esta vez obtengo 3 Digest válidos en el archivo firmado, no 2 como ocurría con SecureBlackBox.

No obstante, obtengo el mismo error al hacer el envío, por lo que creo que el problema no está en la firma.

Así que, o bien el proceso de envío hace algo raro al archivo, o yo ya no sé donde más mirar.

¿Hay alguna forma de saber si el envío (con NetHTTPClient1) está tocando algo en el archivo? ¿Hay alguna forma de saber realmente lo que está pasando?

Y yo que pensaba que la firma y envío de Bizkaia era problemático... No puede ser que lleve días con esto, y algo me dice que cuando descubra la causa del problema voy a salir de la oficina directo al bar.

El envío lo hago así:

RequestBody := TFileStream.Create('firmado.xml', fmOpenRead);

NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml';
NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);

Lo único que se me ocurre es que, como pasa con los Streams cuando se cargan, haya que hacer algún Position := 0 (yo creo que tambien es eso...) antes de enviarlo, pero eso no explica que "el archivo se ha modificado...", sino que daría otro error, digo yo, vamos.

....

Espero de verdad que sirva de algo
Yo con el NetHTTClient, no conseguí enviar bien los archivos...

Lo hago con TIdHTTP y TIdSSLIOHandlerSocketOpenSSL pongo el ejemplo por lo que has comentado del Position := 0... pero está en paginas atrás... mira el índice que te indica donde está ese código completo...

Código Delphi [-]

        RequestBody := TFileStream.Create(strArxiuFirmat, fmOpenRead);
        IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(mainForm);
        idhttp := TIdhttp.Create();
        try
          RequestBody.Position := 0;     // <---- Esto es lo que comentas
          IdSSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_1];
          if (tblTBAI_Adm.FieldByName('TBAI_Admin_ID').AsInteger = TBAI_ADMIN_GIPUZKOA) then
            IdSSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
          IdSSLIOHandler.SSLOptions.CertFile := tbl1.FieldByName('RUTA_CERTIFICADO').AsString.Trim();
          IdSSLIOHandler.SSLOptions.KeyFile := tbl1.FieldByName('RUTA_CERTIFICADO').AsString.Trim();
          IdSSLIOHandler.OnGetPassword := mainForm.IdSSLIOHandlerGetPassword;  // Funcion que pone el pass del certificdo... 
          idhttp.IOHandler:= IdSSLIOHandler;
          idhttp.Request.ContentType := 'application/xml; charset=utf-8';
          try
            strResponse := idHttp.Post(tblTBAI_Adm.FieldByName('URL_Envio_TBAI_Alta').AsString.Trim, RequestBody);

            Etc...

Última edición por iMia fecha: 07-10-2021 a las 08:30:54.
Responder Con Cita