Ver Mensaje Individual
  #9  
Antiguo 02-07-2025
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 44
Reputación: 0
Quim Herrera Va por buen camino
Cita:
Empezado por Galahad Ver Mensaje
Buenos días.
Hemos desarrollado una función de envio de registros del verifactu que funciona perfectamente cuando se utiliza desde una aplicación de escritorio.
La hemos trasladado a un servicio con el fin de que al final sea dicho servicio el que se encargue del envio de los xml de las declaraciones.
Si ejecuto dicho servicio con credenciales de un usuario del dominio local funciona,, pero si lo ejecuto por defecto con el usuario genérico del servicio 'localsystem' no funciona, el servicio devuelve un error soap:

Ex: ESOAPHTTPException: Received content of invalid Content-Type setting: text/html - SOAP expects "text/xml".

Supongo que seremos muchos los que utilizamos un servicio para hacer el envio del verifactu , me comentan que podría ser por no indicar un 'contenttype' específico,, pero no entiendo entonces porque si funciona sin problemas tanto desde una aplicación de escritorio como ejecutanto el servicio con un usuario del dominio . el usuario del servicio 'localsystem' en principio ya sabemos que no tiene acceso a la red local,, pero aqui... supuestamente se hace una llamada por soap a un servicio web...
no entiendo..
esta es la llamada genérica que hacemos..


Código Delphi [-]
 res := RespuestaRegFactuSistemaFacturacionType.Create;
      try
        SistemaFacturacion.RespuestaRegFactuSistemaFacturacion(Res) :=
               SistemaFacturacion.GetsfPortTypeVerifactu(false, Rio.URL , Rio ).RegFactuSistemaFacturacion( verifactu );
      except
        on e:exception do
        begin
           texto_error := 'Error SOAP: '+E.message;
         
           exit;
        end;
      end;

Hola,
A mi me pasaba lo mismo. Al final lo solucioné cargando el certificado en pfx y poniendo la contraseña por código y al enviar inicializar COM antes porque si no parece que httprio no funciona bien en el servicio:

Código Delphi [-]
uses Winapi.ActiveX;

   try
      CoInitialize(nil); // Inicialitza COM

      ...

        HTTPRIO1:=THTTPRIO.create(nil);

    .....

        res:=   RespuestaRegFactuSistemaFacturacionType.Create;
        res:=   GetsfPortTypeVerifactu( false, direccion_envio , HTTPRIO1 ).RegFactuSistemaFacturacion( veriFactu );        // enviarlo !

  finally
       CoUninitialize; //limpia COM
   end;

El código para la carga del certificado lo adapté del proyecto Demo con código Verifactu.dll para (delphi 7) que hay en el foro y me funciona bien en Delphi 10.2.3.

Saludos
Responder Con Cita