-
-
Notifications
You must be signed in to change notification settings - Fork 10
Autenticacion
Para poder utilizar el servicio web de descarga masiva de CFDIs y enviar solicitudes es necesario primero autenticarse con el servicio web. La autenticacion se realiza enviando una solicitud de autenticacion al servicio web y obteniendo un Token que sera necesario para poder envar las solicitudes de tipo Solicitud, Verificacion, y Descarga.
Para crear una solicitud de autenticacion utilizamos el metodo estatico CreateInstance
de la clase AutenticacionRequest
.
public static AutenticacionRequest CreateInstance()
Este metodo crea una solicitud de autenticacion valida por los siguientes 5 minutos a partir de cuando se crea.
La clase AutenticacionRequest
esta formada de las siguientes propiedades:
-
TokenCreatedDateUtc
- Fecha de cuando el token fue creado en formato UTC. -
TokenExpiresDateUtc
- Fecha de cuando el token expira en formato UTC. -
Uuid
- UUID unico para asociar a la solicitud.
Muy importante tener en cuenta que deben de haber 5 minutos de diferencia entre la fecha TokenCreatedDateUtc
y la fecha TokenExpiresDateUtc
.
Para enviar la solicitud de autenticacion al servicio web utilizamos el metodo SendSoapRequestAsync
del servicio AutenticacionService
.
public async Task<AutenticacionResult> SendSoapRequestAsync(AutenticacionRequest autenticacionRequest,
X509Certificate2 certificate,
CancellationToken cancellationToken = default)
Parametros del metodo SendSoapRequestAsync
:
-
AutenticacionRequest
- Solicitud de autenticacion. -
X509Certificate2
- Certificado SAT (.pfx). -
CancellationToken
- Token de cancelacion.
El metodo SendSoapRequestAsync
:
- Genera el contenido SOAP de la solicitud HTTP tomando la informacion de
AutenticacionRequest
. - Crea la solicitud HTTP
- Envia la solicitud HTTP al servicio web.
- Regresar el resultado de la solicitud HTTP ya deserializado en la clase
AutenticacionResult
.
La solicitud regresa el resultado AutenticacionResult
con las siguientes propiedades:
-
AccessToken
- Token de autorizacion para autenticar solicitudes con el web service. -
FaultCode
- Codigo de error en caso de fallar la autenticacion. -
FaultString
- Mensaje de error en caso de fallar la autenticacion. -
HttpStatusCode
- Codigo de estatus de la respuesta HTTP. -
ResponseContent
- Contenido del mensage de la respuesta HTTP.
Si la autenticacion fue exitosa la propiedad AccessToken.IsValid == true
y tenemos un token valido por los siguientes 5 minutos.
Si la autenticacion no fue exitosa no se obtendra un Token
y no se podra hacer uso del servicio web. Sera necesario validar el valor de las propiedades FaultCode
y FaultString
para saber que tipo de error marco el servicio web y poder hacer los ajustes necesarios para volver a intentar autenticarse.
logger.LogInformation("Buscando el servicio de autenticacion en el contenedor de servicios (Dependency Injection).");
var autenticacionService = host.Services.GetRequiredService<IAutenticacionService>();
logger.LogInformation("Creando solicitud de autenticacion.");
var autenticacionRequest = AutenticacionRequest.CreateInstance();
logger.LogInformation("Enviando solicitud de autenticacion.");
AutenticacionResult autenticacionResult =
await autenticacionService.SendSoapRequestAsync(autenticacionRequest, certificadoSat, cancellationToken);
if (!autenticacionResult.AccessToken.IsValid)
{
logger.LogError("La solicitud de autenticacion no fue exitosa. FaultCode:{0} FaultString:{1}",
autenticacionResult.FaultCode,
autenticacionResult.FaultString);
throw new Exception();
}
logger.LogInformation("La solicitud de autenticacion fue exitosa. AccessToken:{0}", autenticacionResult.AccessToken.DecodedValue);