Skip to content

Verificacion

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

Descripcion

La solicitud de verificacion se utiliza para verificar el estatus de la solicitud de descarga. Si la solicitud de descarga fue aceptada y el estatus de la verificacion es terminada, el servicio web devolvera los identificadores de los paquetes a descargar.

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

Crear Solicitud

Para crear una solicitud de verificacion utilizamos el metodo estatico CreateInstance de la clase VerificacionRequest.

public static VerificacionRequest CreateInstance(string requestId, string requestingRfc, AccessToken accessToken)

Descripcion de los parametros:

  • RequestId - Contiene el Identificador de la solicitud que se pretende consultar.
  • RequestingRfc - Contiene el RFC del que está realizando la solicitud de verificacion.
  • AccessToken - Token de autorizacion.

Enviar Solicitud

Para enviar la solicitud de solicitud de verificacion al servicio web utilizamos el metodo SendSoapRequestAsync del servicio VerificacionService.

public async Task<VerificacionResult> SendSoapRequestAsync(VerificacionRequest verificacionRequest,
                                                           X509Certificate2 certificate,
                                                           CancellationToken cancellationToken = default)

Parametros del metodo SendSoapRequestAsync:

  • VerificacionRequest - Solicitud de verificacion.
  • X509Certificate2 - Certificado SAT (.pfx).
  • CancellationToken - Token de cancelacion.

El metodo SendSoapRequestAsync:

  1. Genera el contenido SOAP de la solicitud HTTP tomando la informacion de VerificacionRequest.
  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 VerificacionResult.

Validar Resultado

La solicitud regresa el resultado VerificacionResult con las siguientes propiedades:

  • PackageIds - Contiene los identificadores de los paquetes que componen la solicitud de descarga masiva.
  • DownloadRequestStatusNumber - Contiene el número correspondiente al estado de la solicitud de descarga.
  • DownloadRequestStatusCode - Contiene el código de estado de la solicitud de descarga.
  • NumberOfCfdis - Número de CFDIs que conforman la solicitud de descarga consultada.
  • 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 los PackageIds y un RequestStatusCode = 5000. Si la solicitud no fue exitosa no se obtendran los PackageIds y no se podra hacer uso del servicio de descarga. 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 verificacion.

Ejemplo

// Autenticarse primero
// Enviar solicitud de descarga y guardar el RequestId 

logger.LogInformation("Buscando el servicio de verificacion en el contenedor de servicios (Dependency Injection).");
var verificaSolicitudService = host.Services.GetRequiredService<IVerificacionService>();

logger.LogInformation("Creando solicitud de verificacion.");
var verificacionRequest = VerificacionRequest.CreateInstance(solicitudResult.RequestId, rfcSolicitante, autenticacionResult.AccessToken);

logger.LogInformation("Enviando solicitud de verificacion.");
VerificacionResult verificacionResult = await verificaSolicitudService.SendSoapRequestAsync(verificacionRequest,
    certificadoSat,
    cancellationToken);

if (verificacionResult.DownloadRequestStatusNumber != EstadoSolicitud.Terminada.Value.ToString())
{
    logger.LogError(
        "La solicitud de verificacion no fue exitosa. DownloadRequestStatusNumber:{0} RequestStatusCode:{1} RequestStatusMessage:{2}",
        verificacionResult.DownloadRequestStatusNumber,
        verificacionResult.RequestStatusCode,
        verificacionResult.RequestStatusMessage);

    if (verificacionResult.DownloadRequestStatusNumber == EstadoSolicitud.Aceptada.Value.ToString())
    {
        logger.LogInformation(
            "Es estado de la solicitud es Aceptada. Mandar otra solicitud de verificaion mas tarde para que el servicio web pueda procesar la solicitud.");
    }
    else if (verificacionResult.DownloadRequestStatusNumber == EstadoSolicitud.EnProceso.Value.ToString())
    {
        logger.LogInformation(
            "Es estado de la solicitud es En Proceso. Mandar otra solicitud de verificaion mas tarde para que el servicio web pueda procesar la solicitud.");
    }

    throw new Exception();
}

logger.LogInformation("La solicitud de verificacion fue exitosa.");
foreach (string idsPaquete in verificacionResult.PackageIds)
{
    logger.LogInformation("PackageId:{0}", idsPaquete);
}