4 Guía para generar y consumir el WSDL del servicio
marianozunino edited this page 2025-05-06 13:26:30 -03:00

Guía para generar y consumir el WSDL del servicio

Este documento describe cómo acceder al WSDL del servicio de simulación de documentos digitalizados y cómo consumirlo desde diferentes plataformas.

¿Qué es WSDL?

WSDL (Web Services Description Language) es un formato XML que describe la funcionalidad ofrecida por un servicio web SOAP. Permite a los clientes entender automáticamente cómo interactuar con el servicio.

Acceso al WSDL

Una vez que el servicio está en ejecución, el WSDL está disponible en las siguiente URL:

https://dnic.mz.uy/WsServicioDeInformacion.asmx?wsdl

Consumo del servicio SOAP

Existen múltiples formas de consumir un servicio SOAP, dependiendo de la plataforma y el lenguaje de programación.

Usando SoapUI (herramienta de pruebas)

  1. Descarga e instala SoapUI
  2. Crea un nuevo proyecto SOAP
  3. En la URL del WSDL, introduce la URL del servicio (ej. https://dnic.mz.uy/WsServicioDeInformacion.asmx?wsdl)
  4. SoapUI generará automáticamente las solicitudes de ejemplo para cada operación

Usando Postman

  1. Abre Postman y crea una nueva solicitud
  2. Establece el método a POST
  3. Introduce la URL del servicio (ej. https://dnic.mz.uy/WsServicioDeInformacion.asmx)
  4. En Headers, agrega Content-Type: text/xml
  5. En el cuerpo, coloca tu solicitud SOAP

Ejemplos de solicitud y respuesta

Ejemplo de solicitud SOAP

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ObtDocDigitalizado xmlns="http://dnic.gub.uy/">
      <param>
        <NroDocumento>49746161</NroDocumento>
        <TipoDocumento>DO</TipoDocumento>
        <NroSerie>ABC123456</NroSerie>
        <NroIdentificacion>123456</NroIdentificacion>
        <Organismo>ServiPuntos</Organismo>
        <ClaveAcceso1>Clave123</ClaveAcceso1>
      </param>
    </ObtDocDigitalizado>
  </soap:Body>
</soap:Envelope>

Ejemplo de respuesta SOAP (éxito)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <s:Body>
        <ObtDocDigitalizadoResponse xmlns="http://dnic.gub.uy/">
            <ObtDocDigitalizadoResult>
                <Persona>
                    <CodTipoDocumento>DO</CodTipoDocumento>
                    <NroDocumento>49746161</NroDocumento>
                    <Nombre1>Jimena</Nombre1>
                    <Nombre2>Marta</Nombre2>
                    <PrimerApellido>Moreira</PrimerApellido>
                    <SegundoApellido>Morales</SegundoApellido>
                    <Sexo>2</Sexo>
                    <FechaNacimiento>1963-10-28</FechaNacimiento>
                    <CodNacionalidad>2</CodNacionalidad>
                    <NombreEnCedula>Jimena Marta Moreira Morales</NombreEnCedula>
                    <IdSolicitud>88726</IdSolicitud>
                    <IdRespuesta>77134</IdRespuesta>
                </Persona>
                <Imagenes>
                    <ImagenDigital>
                        <Foto>No Implementado...</Foto>
                        <LargoBytes>254</LargoBytes>
                        <TipoImagen>1</TipoImagen>
                    </ImagenDigital>
                    <ImagenDigital>
                        <Foto>No Implementado...</Foto>
                        <LargoBytes>282</LargoBytes>
                        <TipoImagen>2</TipoImagen>
                    </ImagenDigital>
                </Imagenes>
            </ObtDocDigitalizadoResult>
        </ObtDocDigitalizadoResponse>
    </s:Body>
</s:Envelope>

Ejemplo de respuesta SOAP (error)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <s:Body>
        <ObtDocDigitalizadoResponse xmlns="http://dnic.gub.uy/">
            <ObtDocDigitalizadoResult>
                <Errores>
                    <Mensaje>
                        <CodMensaje>1001</CodMensaje>
                        <Descripcion>Persona inexistente en la base de datos</Descripcion>
                        <DatoExtra>Trace</DatoExtra>
                    </Mensaje>
                </Errores>
            </ObtDocDigitalizadoResult>
        </ObtDocDigitalizadoResponse>
    </s:Body>
</s:Envelope>

Consumo del servicio desde C#

// Agregar referencia al servicio: 
// dotnet add package System.ServiceModel.Http
// dotnet add package System.ServiceModel.Primitives

using System;
using System.ServiceModel;
using System.Threading.Tasks;

// Generar cliente del servicio usando:
// dotnet tool install --global dotnet-svcutil
// dotnet-svcutil https://dnic.mz.uy/WsServicioDeInformacion.asmx?wsdl

class Program
{
    static async Task Main()
    {
        // Crear el cliente
        var binding = new BasicHttpBinding();
        var endpoint = new EndpointAddress("https://dnic.mz.uy/WsServicioDeInformacion.asmx");
        var client = new WsServicioDeInformacionClient(binding, endpoint);
        
        // Crear parámetros
        var param = new ParamObtDocDigitalizado
        {
            NroDocumento = "49746161",
            TipoDocumento = "DO",
            NroSerie = "ABC123456",
            Organismo = "ServiPuntos",
            ClaveAcceso1 = "Clave123"
        };
        
        // Llamar al servicio
        var result = await client.ObtDocDigitalizadoAsync(param);
        
        // Procesar resultado
        if (result.Errores != null && result.Errores.Length > 0)
        {
            Console.WriteLine($"Error: {result.Errores[0].Descripcion}");
        }
        else
        {
            Console.WriteLine($"Nombre: {result.Persona.Nombre1} {result.Persona.PrimerApellido}");
        }
    }
}

Manipular el CI para obtener diferentes resultados

Como se explicó en el README principal, los primeros dígitos de la cédula determinan el comportamiento del servicio:

Primeros dos dígitos Resultado
11 Error - Persona inexistente
12 Error - Límite de consultas excedido
13 Error - Número de cédula anulado
14 Advertencia - Datos de persona a regularizar
15 Advertencia - Documento hurtado o extraviado

Además, los últimos dos dígitos determinan la edad de la persona. Por ejemplo:

  • CI terminada en "18": Persona de 18 años
  • CI terminada en "25": Persona de 25 años
  • CI terminada en "65": Persona de 65 años

Para probar diferentes escenarios, simplemente modifique el número de cédula en la solicitud SOAP.Welcome to the Wiki.