Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   webService Soap de la Administración Digital Española notific@ (https://www.clubdelphi.com/foros/showthread.php?t=91398)

apicito 27-01-2017 18:15:55

webService Soap de la Administración Digital Española notific@
 
1 Archivos Adjunto(s)
Descripción del WebService (WSDL y XSD): aqui
Estoy tratando de utilizar un webService Soap de la Administración Digital Española.
Concretamente para recibir notificaciones electrónicas del servicio https://notificaciones.060.es, para integrar en mi aplicación la recepción de notificaciones de hacienda, Seguridad Social, etc.
Utilizando el ejemplo de este hilo (post #39) de este foro, ya he conseguido autentificarme con certificado digital.
Ahora estoy tratando de componer la petición para la función ConsultaMetadatos, que se describe en el wsdl que va en el zip adjunto.
Código:

function  ConsultaMetadatos(const peticion: PeticionConsulta): RespuestaConsulta; stdcall;
en el xsd del servicio (tambien en el zip) se define el interface de PeticionConsulta que debepasarsele. Asi:
Código:

{ IXMLPeticionConsultaTipo }

  IXMLPeticionConsultaTipo = interface(IXMLNode)
    ['{9C8D0AD3-2ADD-4C15-A401-F88671884764}']
    { Property Accessors }
    function Get_ComoAutorizadoDelTitular: UnicodeString;
    function Get_PaginaSolicitada: Integer;
    function Get_ComoAutorizado: Boolean;
    function Get_IncluirNombreOrganismoEmisor: Boolean;
    function Get_IncluirDatosRecogida: Boolean;
    function Get_TicketID: UnicodeString;
    function Get_Estado: UnicodeString;
    function Get_FechaInicio: UnicodeString;
    function Get_FechaFin: UnicodeString;
    function Get_Emisor: UnicodeString;
    function Get_Notificado: UnicodeString;
    function Get_TipoMensaje: UnicodeString;
    function Get_ActoNotificado: UnicodeString;
    procedure Set_ComoAutorizadoDelTitular(Value: UnicodeString);
    procedure Set_PaginaSolicitada(Value: Integer);
    procedure Set_ComoAutorizado(Value: Boolean);
    procedure Set_IncluirNombreOrganismoEmisor(Value: Boolean);
    procedure Set_IncluirDatosRecogida(Value: Boolean);
    procedure Set_TicketID(Value: UnicodeString);
    procedure Set_Estado(Value: UnicodeString);
    procedure Set_FechaInicio(Value: UnicodeString);
    procedure Set_FechaFin(Value: UnicodeString);
    procedure Set_Emisor(Value: UnicodeString);
    procedure Set_Notificado(Value: UnicodeString);
    procedure Set_TipoMensaje(Value: UnicodeString);
    procedure Set_ActoNotificado(Value: UnicodeString);
    { Methods & Properties }
    property ComoAutorizadoDelTitular: UnicodeString read Get_ComoAutorizadoDelTitular write Set_ComoAutorizadoDelTitular;
    property PaginaSolicitada: Integer read Get_PaginaSolicitada write Set_PaginaSolicitada;
    property ComoAutorizado: Boolean read Get_ComoAutorizado write Set_ComoAutorizado;
    property IncluirNombreOrganismoEmisor: Boolean read Get_IncluirNombreOrganismoEmisor write Set_IncluirNombreOrganismoEmisor;
    property IncluirDatosRecogida: Boolean read Get_IncluirDatosRecogida write Set_IncluirDatosRecogida;
    property TicketID: UnicodeString read Get_TicketID write Set_TicketID;
    property Estado: UnicodeString read Get_Estado write Set_Estado;
    property FechaInicio: UnicodeString read Get_FechaInicio write Set_FechaInicio;
    property FechaFin: UnicodeString read Get_FechaFin write Set_FechaFin;
    property Emisor: UnicodeString read Get_Emisor write Set_Emisor;
    property Notificado: UnicodeString read Get_Notificado write Set_Notificado;
    property TipoMensaje: UnicodeString read Get_TipoMensaje write Set_TipoMensaje;
    property ActoNotificado: UnicodeString read Get_ActoNotificado write Set_ActoNotificado;
  end;

Pero no se como construir el objeto para pasarselo a la llamada al web service
Código:

  result := GetAPE_SNE_BuzonWS_TipoPuerto.ConsultaMetadatos(PeticionConsulta);
¿Lo que le tengo que pasar es un xml o un objeto?
¿Como puedo construirlo?
Alguien me puede echar una mano.

bitbow 27-01-2017 21:58:34

Cuando importas el wsdl desde delphi este te genera en unas unidades(a modo de interface) la definiciòn de objetos, funciones y demas usar en el webservice, revisa como estan estructurados ahi.

Saludos.

apicito 28-01-2017 09:10:36

Si. He importado el wsdl con las funciones disponibles en el WebService y los dos xsd de la descripción de tipos (Aunque uno de ellos me da error, fui sacando los interfaces manualmente).
Lo que no sé es como construirir ahora el objeto que se envía por SOAP, en el caso que pongo "PeticionConsulta".
Como construyo ese objecto utilizando la interface y ¿Le paso directamente ese objecto o debo hacer con el él un xml?
Todo esto es nuevo para mí y estoy muy perdido.
Saludos.

apicito 31-01-2017 11:25:28

No acabo de comprender como se construye el objeto que le tengo que pasar al soap.
He tratado de hacerlo así
Código:

var
  LDocument        : IXMLDocument;
  PeticionConsulta  : IXMLPeticionConsultaTipo;
  RespuestaConsulta : IXMLRespuestaConsultaTipo;
  Estado            : IXMLNode;
  TipoMensaje      : IXMLNode;
.....
.....
  LDocument := TXMLDocument.Create(nil);
  LDocument.Active := True;
  LDocument.DocumentElement := LDocument.CreateNode('PeticionConsulta', ntElement, '');
  LDocument.DocumentElement.Attributes['ComoAutorizado'] := 'false';
  LDocument.DocumentElement.Attributes['IncluirNombreOrganismoEmisor'] := 'true';
  LDocument.DocumentElement.Attributes['IncluirDatosRecogida'] := 'true';
  Estado := LDocument.CreateNode('Estado', ntElement);
  LDocument.DocumentElement.ChildNodes.Add(Estado);
  TipoMensaje := LDocument.CreateNode('TipoMensaje', ntElement);
  LDocument.DocumentElement.ChildNodes.Add(TipoMensaje);

y obtengo este xml
Código:

<PeticionConsulta ComoAutorizado="false" IncluirNombreOrganismoEmisor="true" IncluirDatosRecogida="true">
  <Estado/>
  <TipoMensaje/>
</PeticionConsulta>

El manual del webservice lo describe así:

Alguien puede hecharme una mano con esto?.


La franja horaria es GMT +2. Ahora son las 07:47:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi