Skip to content

Solicitud

Andres Ramos edited this page Sep 2, 2022 · 2 revisions

Descripcion

La solicitud de solicitud de descarga masiva nos permite solicitar al servicio web la descarga de CFDIs o Metadatos emitidos o recibidos.

Antes de poder utilizar el servicio de solicitud debemos primero autenticarnos con el servicio web y obtener un token de acceso.

Crear Solicitud

Para crear una solicitud de solicitud de descarga utilizamos el metodo estatico CreateInstance de la clase SolicitudRequest.

public static SolicitudRequest CreateInstance(DateTime startDate,
                                              DateTime endDete,
                                              TipoSolicitud requestType,
                                              string senderRfc,
                                              IEnumerable<string> recipientsRfcs,
                                              string requestingRfc,
                                              AccessToken accessToken)

Descripcion de los parametros:

  • StartDate - Solo se buscarán CFDI, cuya fecha de emisión sea igual o mayor a la fecha inicial indicada en este parámetro.
  • EndDate - Solo se buscarán CFDI, cuya fecha de emisión sea igual o menor a la fecha final indicada en este parámetro.
  • RequestType - Define el tipo de descarga: [Metadata, CFDI]
  • SenderRfc - Contiene el RFC del emisor del cual se quiere consultar los CFDI.
  • RecipientsRfcs - Contiene el/los RFCs receptores de los cuales se quiere consultar los CFDIs
  • RequestingRfc - Contiene el RFC del que está realizando la solicitud de descarga.
  • AccessToken - Token de autorizacion.

Enviar Solicitud

Para enviar la solicitud de solicitud de descarga al servicio web utilizamos el metodo SendSoapRequestAsync del servicio SolicitudService.

public async Task<SolicitudResult> SendSoapRequestAsync(SolicitudRequest solicitudRequest,
                                                        X509Certificate2 certificate,
                                                        CancellationToken cancellationToken = default)

Parametros del metodo SendSoapRequestAsync:

  • SolicitudRequest - Solicitud de solicitud de descarga.
  • X509Certificate2 - Certificado SAT (.pfx).
  • CancellationToken - Token de cancelacion.

El metodo SendSoapRequestAsync:

  1. Genera el contenido SOAP de la solicitud HTTP tomando la informacion de SolicitudRequest.
  2. Crea la solicitud HTTP
  3. Envia la solicitud HTTP al servicio web.
  4. Regresar el resultado de la solicitud HTTP ya deserializado en la clase SolicitudResult.

Validar Resultado

La solicitud regresa el resultado SolicitudResult con las siguientes propiedades:

  • RequestId - Contiene el resultado de la petición con el código de respuesta y los UUID de los CFDIs de los cuales se solicitó la descarga, pero se encuentran en espera de una confirmación por parte del receptor.
  • RequestStatusCode - Código de estatus de la solicitud.
  • RequestStatusMessage - Pequeña descripción del código estatus.
  • HttpStatusCode - Codigo de estatus de la respuesta HTTP.
  • ResponseContent - Contenido del mensage de la respuesta HTTP.

Si la solicitud fue exitosa el sevicio web nos regresara un RequestId y un RequestStatusCode = 5000. Si la solicitud no fue exitosa no se obtendra un RequestId y no se podra hacer uso del servicio de verificacion. Sera necesario validar el valor de las propiedades RequestStatusCode y RequestStatusMessage para saber que tipo de error marco el servicio web y poder hacer los ajustes necesarios para volver a intentar generar una solicitud de descarga.

Ejemplo

logger.LogInformation("Iniciando ejemplo de como utilizar los servicios para descargar los CFDIs recibidos del dia de hoy.");

// Parametros de ejemplo
DateTime fechaInicio = DateTime.Today;
DateTime fechaFin = DateTime.Today;
TipoSolicitud? tipoSolicitud = TipoSolicitud.Cfdi;
var rfcEmisor = "";
var rfcReceptores = new List<string> { "AAA010101AAAA" };
var rfcSolicitante = "AAA010101AAAA";
var rutaDescarga = @"C:\DescargaMasiva\CFDIs";

// Autenticarse primero

logger.LogInformation("Buscando el servicio de solicitud de descarga en el contenedor de servicios (Dependency Injection).");
var solicitudService = host.Services.GetRequiredService<ISolicitudService>();

logger.LogInformation("Creando solicitud de solicitud de descarga.");
var solicitudRequest = SolicitudRequest.CreateInstance(fechaInicio,
    fechaFin,
    tipoSolicitud,
    rfcEmisor,
    rfcReceptores,
    rfcSolicitante,
    autenticacionResult.AccessToken);

logger.LogInformation("Enviando solicitud de solicitud de descarga.");
SolicitudResult solicitudResult = await solicitudService.SendSoapRequestAsync(solicitudRequest, certificadoSat, cancellationToken);

if (string.IsNullOrEmpty(solicitudResult.RequestId))
{
    logger.LogError("La solicitud de solicitud de descarga no fue exitosa. RequestStatusCode:{0} RequestStatusMessage:{1}",
        solicitudResult.RequestStatusCode,
        solicitudResult.RequestStatusMessage);
    throw new Exception();
}

logger.LogInformation("La solicitud de solicitud de descarga fue exitosa. RequestId:{0}", solicitudResult.RequestId);
Clone this wiki locally