-
-
Notifications
You must be signed in to change notification settings - Fork 10
Solicitud
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.
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.
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
:
- Genera el contenido SOAP de la solicitud HTTP tomando la informacion de
SolicitudRequest
. - Crea la solicitud HTTP
- Envia la solicitud HTTP al servicio web.
- Regresar el resultado de la solicitud HTTP ya deserializado en la clase
SolicitudResult
.
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.
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);