-
Notifications
You must be signed in to change notification settings - Fork 2
Infraestructura
Esta solucion esta conformada de dos applicaciones: un Web API y un Worker Service.
El Web API es el servicio web a donde se mandan todas las solicitudes. Este servicio esta administrado por AR Software y debes obetner una licencia para poder usarlo. La direccion URL de este servicio es https://contpaqiapim.azure-api.net/comercial
El Worker Service o Sincronizador es un servicio que se instala localmente en el servidor de CONTPAQi y se encarga de procesar las solicitudes enviadas a la API en el sistema CONTPAQi Comercial Premium.
- Envia tu solicitud a la API en
[POST] /api/Requests
- La API valida to solicitud
- Si tu solicitud es valida la API agrega tu solicitud en la base de datos y notifica al Sincronizador que hay una nueva solicitud por procesar
- La API te retorna tu solicitud con un
Status: 201 Created
,Id
yStatus: "Pending"
- Si tu solicitud no es valida la API te retorna un
Status: 400 BadRequest
y el mensaje de error - Guarda el
Id
ya que deberas consultar el estatus y respuesta de la solicitud porId
en[GET] /api/Requests/{id}
- El Sincronizador se conecta con la API y espera a ser notificado de que hay solicitudes nuevas por procesar
- El Sincronizador valida tu solicitud
- Si tu solicitud es valida el Sincronizador procesa tu solicitud en CONTPAQi Comercial Premium
- El Sincronizador envia la respuesta con el resultado de tu solicitud a la API
- La API asocia la respuesta a tu solicitud
- Deberas consultar el estatus y respuesta de la solicitud por
Id
en[GET] /api/Requests/{id}
- Si el
status
de la solicitud esPending
la solicitud no ah sido procesada y deberas consultar el estatus de la solicitud mas tarde. - Si el
status
de la solicitud esProcessed
la solicitud ya fue procesada. - Puedes consultar la respuesta de la solicitud en el campo
response
de la solicitud.
El Web API es el servicio web a donde enviaras todas tus solicitudes. Esta diseñada para trabajar principalmente con los dos siguientes modelos: ApiRequest
y ApiResponse
. Puedes encontrar mas informacion sobre estos modelos en el repositorio ARSoftware.Contpaqi.Api.Common.
Cuando envias una solicitud HTTP a la API debes agrear los siguientes Headers
:
-
Ocp-Apim-Subscription-Key
- Tu licencia de suscripcion al servicio web -
x-Empresa-Rfc
- El RFC de la empresa en CONTPAQi Comercial donde se va a procesar la solicitud -
x-Esperar-Respuesta
- Valor que indica a la API a esperar hasta 25 segundos a que el sincronizador termine de procesar la solicitud.
{
"statusCode": 401,
"message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API."
}
{
"statusCode": 401,
"message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription."
}
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-219bc54c927d1020089d4ca6848e588f-fbce54e6bda05e65-00",
"errors": {
"x-Empresa-Rfc": [
"The EmpresaRfc field is required."
]
}
}
ApiRequest
es la estructura de solicitudes con la que la API trabaja. Todas las ApiRequest
tienen la misma estructura y se diferencian por el tipo y modelo de ContpaqiRequest
.
Para mas informacion sobre las propiedades base del modelo ApiRequest
puedes consultar el repositorio ARSoftware.Contpaqi.Api.Common.
Todas las ContpaqiRequest
tiene la misma estructura y se diferencian por las propiedades "$type"
, model
, options
.
{
"$type": "",
"model": {},
"options": {}
}
-
"$type"
- El tipo de solicitud. E.g. para crear una factura el tipo seriaCrearFacturaRequest
y para crear un producto el tipo seriaCrearProductoRequest
. -
model
- Modelo de la solicitud. Todas las solicitudes tiene un modelo, aun si el modelo es un objecto vacio. Por ejemplo, la solicitudCrearFacturaRequest
tiene el modeloCrearFacturaRequestModel
. -
options
- Opciones de la solicitud. Todas las solicitudes tienen opciones, aun si las opciones es un modelo vacio. Por ejemplo, la solicitudCrearFacturaRequest
tiene las opcionesCrearFacturaRequestOptions
.
El campo "$type"
lleva el simbolo $
y debe ser siempre el primer campo del JSON
Como podras darte cuenta la convencion de nombramiento para:
-
Tipos de solicitud = [tipo de solicitud] + Request e.g.,
CrearFacturaRequest
-
Modelos de solicitud = [tipo de solicitud] + Request + Model e.g.,
CrearFacturaRequestModel
-
Opciones de solicitud = [tipo de solicitud] + Request + Options e.g.,
CrearFacturaRequestOptions
{
"id": "8ff41bb6-b5fb-4e82-7e3b-08db41a48abd",
"subscriptionKey": "00000000000000000000000000000000",
"empresaRfc": "URE180429TM6",
"dateCreated": "2023-04-20T08:38:35.3890297-05:00",
"contpaqiRequestType": "BuscarEmpresasRequest",
"contpaqiRequest": {
"$type": "BuscarEmpresasRequest",
"model": {},
"options": {
"cargarDatosExtra": false
}
},
"status": "Processed",
"response": {}
}
{
"id": "f0a3610f-91e1-4177-c671-08db41b1b8ee",
"subscriptionKey": "00000000000000000000000000000000",
"empresaRfc": "URE180429TM6",
"dateCreated": "2023-04-20T10:44:40.9005279-05:00",
"contpaqiRequestType": "CrearProductoRequest",
"contpaqiRequest": {
"$type": "CrearProductoRequest",
"model": {
"producto": {
"tipo": "Producto",
"codigo": "PROD001",
"nombre": "Producto 1",
"claveSat": "43231500",
"datosExtra": {
"CFECHAALTAPRODUCTO": "04/20/2023",
"CNOMBREPRODUCTO": "Producto 1",
"CCLAVESAT": "43231500",
"CTEXTOEXTRA1": "Texto Extra"
}
}
},
"options": {
"cargarDatosExtra": false
}
},
"status": "Pending",
"response": null
}
ApiResponse
es la estructura de respuestas con la que la API trabaja. Todas las ApiResponse
tienen la misma estructura y se diferencian por el tipo y modelo de ContpaqiResponse
.
Para mas informacion sobre las propiedades base del modelo ApiResponse
puedes consultar el repositorio ARSoftware.Contpaqi.Api.Common.
El ContpaqiResponse
almacena el resultado de la solicitud. Todas las ContpaqiResponse
tienen la misma estructura y se diferencian por las propiedades "$type"
, model
.
{
"$type": "",
"model": {}
}
-
"$type"
- El tipo de respuesta. E.g. para crear una factura la respuesta seriaCrearFacturaResponse
y para crear un producto el tipo seriaCrearProductoResponse
. -
model
- Modelo de la respuesta y propiedad donde se almacena el resultado de la solicitud. Todas las respuestas tiene un modelo, aun si el modelo es un objecto vacio. Por ejemplo, la solicitudCrearFacturaResponse
tiene el modeloCrearFacturaResponseModel
.
Como podran darse cuenta la convencion de nombramiento para:
-
Respuestas de solicitud = [tipo de solicitud] + Response e.g.,
CrearFacturaResponse
-
Modelos de respuestas de solicitud = [tipo de solicitud] + Response + Model e.g.,
CrearFacturaResponseModel
El Worker Service o Sincronizador es un servicio que se instala localmente en el servidor de CONTPAQi y se encarga de procesar las solicitudes enviadas a la API en el sistema CONTPAQi Comercial Premium.
El sincronizador periodicamente escucha a ser notificado de que hay solicitudes pendientes por procesar y las procesa en Comercial. Una vez procesada la solicitud envia la respuesta a la API y repite el proceso.
- Inicializar el proceso
- Iniciar conexion con CONTPAQi Comercial
- Abrir empresa de trabajo
- Iniciar loop
- Buscar solicitudes pendientes por procesar
- Procesar solicitud
- Enviar la respuesta de la solicitud a la API
- Si es hora de apagarse terminar loop
- Ir a paso 5
- Cerrar conexion con CONTPAQi Comercial
- Terminar proceso