Para facilitar la interconexión entre sistemas de forma automática, es posible utilizar los web service que usa el estándar REST.


URLs de acceso

La URL que debemos utilizar está compuesta por la URL host + Ruta del servicio


Ejemplo: 

URL Host: https://apps.eglobalprojects.com/Titano/APIQA/

Ruta del Servicio: /Auth/AuthTokens/TokenCreate

URL Final: https://apps.eglobalprojects.com/Titano/APIQA/Auth/AuthTokens/TokenCreate


La URL Host cambia si deseamos usar el ambiente productivo o el de pruebas (QA)


Para ambiente PROD

https://apps.eglobalprojects.com/Titano/APIQA/

Para ambiente QA

https://apps.eglobalprojects.com/Titano/API/


Llamados (Request) con estructura JSON

Los servicio REST pueden hacer llamados GET o POST

Los cuerpos a los llamados de los servicios POST deben estar estructurados mediante JSON


Obtener TOKEN de seguridad

El uso de los servicios requiere autenticación mediante un BEARER enviando un TOKEN, por lo que el primer paso es generar un token, el cual tiene un tiempo de vida medio, por lo que un mismo token puede ser utilizado durante toda su vida en múltiples llamadas a los servicios y no es necesario crear un nuevo token para cada llamada.


El servicio TokenCreate es el único que no requiere enviar la autenticación bearer ya que este servicio es el responsable de crear el token.


Ejemplo para crear el Token:


Servicio: Auth/AuthTokens/TokenCreate

Ruta del Servicio: *url_host*/Auth/AuthTokens/TokenCreate

Metodo: POST

URL: https://apps.eglobalprojects.com/Titano/APIQA/Auth/AuthTokens/TokenCreate

Body: 

{

    "TokenType": "UserAPI",

    "MasterPIN": "",

    "User": "APIKey",

    "Password": "*valor de la api key*",

    "EntityId": "*valor de Entity Id*",

    "CompanyId": "*valor de Company Id*"

}


Los valores de "TokenType": "UserAPI" y "User": "APIKey" son valores fijos para solicitar un Token para uso de los webservices.


Los valores de Password, EntityId, CompanyId podrán ser consultados en TitanoERP en el módulo de seguridad de grupos para cada una de las empresas.


El servicio responderá en caso de error :

{

    "error": {

        "code": "Exception",

        "message": "XML del CFDI mal formado"

    }

}


El servicio responderá en caso correcto:

{

    "value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NTc2ODk5NjQsIlRva2VuVHlwZSI6IlNFUlZFUiIsIlVzZXIiOiIiLCJVc2VySWQiOiIiLCJVc2VyRW1haWwiOiIiLCJVc2VyTmFtZSI6IiIsIlVzZXJMYW5ndWFnZSI6IiIsIlVzZXJBZG1pbiI6ZmFsc2UsIlVzZXJTdXBlclVzZXIiOmZhbHNlLCJFbnRpdHlJZCI6IiIsIkVudGl0eURhdGFiYXNlIjoiIiwiQ29tcGFueUlkIjoiIiwiQ29tcGFueU5hbWUiOiIiLCJCdXNpbmVzc1VuaXRJZCI6IiIsIlRlc3QiOmZhbHNlLCJBUElTZXJ2aWNlRW1haWwiOnRydWUsIkFQSVNlcnZpY2VGaWxlIjp0cnVlLCJBUElTZXJ2aWNlVGVzdC5EQkNvbm5lY3Rpb24iOnRydWUsIkFQSVNlcnZpY2VMb2dpbiI6dHJ1ZSwiQVBJU2VydmljZURlYnVnIjp0cnVlLCJBUElTZXJ2aWNlU2VjdXJpdHkiOnRydWUsIkFQSVNlcnZpY2VDZmRpLkJvdmVkYSI6dHJ1ZSwiQVBJU2VydmljZVBTIjp0cnVlfQ.gOnYc1EWBPtbEn7YcJaP9O8jYr0tSDa28CnHKZQfnvg"

}


Usando el TOKEN en todos los servicios


Para consumir cualquier servicio será necesario agregar el valor "Bearer " + TOKEN en los parámetros/Authentication de los encabezados de la solicitud


name= authorization

Value = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NTc2ODk5NjQsIlRva2VuVHlwZSI6IlNFUlZFUiIsIlVzZXIiOiIiLCJVc2VySWQiOiIiLCJVc2VyRW1haWwiOiIiLCJVc2VyTmFtZSI6IiIsIlVzZXJMYW5ndWFnZSI6IiIsIlVzZXJBZG1pbiI6ZmFsc2UsIlVzZXJTdXBlclVzZXIiOmZhbHNlLCJFbnRpdHlJZCI6IiIsIkVudGl0eURhdGFiYXNlIjoiIiwiQ29tcGFueUlkIjoiIiwiQ29tcGFueU5hbWUiOiIiLCJCdXNpbmVzc1VuaXRJZCI6IiIsIlRlc3QiOmZhbHNlLCJBUElTZXJ2aWNlRW1haWwiOnRydWUsIkFQSVNlcnZpY2VGaWxlIjp0cnVlLCJBUElTZXJ2aWNlVGVzdC5EQkNvbm5lY3Rpb24iOnRydWUsIkFQSVNlcnZpY2VMb2dpbiI6dHJ1ZSwiQVBJU2VydmljZURlYnVnIjp0cnVlLCJBUElTZXJ2aWNlU2VjdXJpdHkiOnRydWUsIkFQSVNlcnZpY2VDZmRpLkJvdmVkYSI6dHJ1ZSwiQVBJU2VydmljZVBTIjp0cnVlfQ.gOnYc1EWBPtbEn7YcJaP9O8jYr0tSDa28CnHKZQfnvg"

Style: HEADER

Level: METHOD


Consumiendo el primer servicio


Podemos verificar que estamos listos para consumir los servicios enviando una consulta para verificar el token y verificar que el token de seguridad funciona de forma correcta en la configuración de nuestro cliente que consume los servicios del web service.


Servicio: Auth/AuthTokens/TokenCheck

Ruta del Servicio: *url_host*/Auth/AuthTokens/TokenCheck

Metodo: GET

URL: https://apps.eglobalprojects.com/Titano/APIQA/Auth/AuthTokens/TokenCheck

name= authorization

Value = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NTc2ODk5NjQsIlRva2VuVHlwZSI6IlNFUlZFUiIsIlVzZXIiOiIiLCJVc2VySWQiOiIiLCJVc2VyRW1haWwiOiIiLCJVc2VyTmFtZSI6IiIsIlVzZXJMYW5ndWFnZSI6IiIsIlVzZXJBZG1pbiI6ZmFsc2UsIlVzZXJTdXBlclVzZXIiOmZhbHNlLCJFbnRpdHlJZCI6IiIsIkVudGl0eURhdGFiYXNlIjoiIiwiQ29tcGFueUlkIjoiIiwiQ29tcGFueU5hbWUiOiIiLCJCdXNpbmVzc1VuaXRJZCI6IiIsIlRlc3QiOmZhbHNlLCJBUElTZXJ2aWNlRW1haWwiOnRydWUsIkFQSVNlcnZpY2VGaWxlIjp0cnVlLCJBUElTZXJ2aWNlVGVzdC5EQkNvbm5lY3Rpb24iOnRydWUsIkFQSVNlcnZpY2VMb2dpbiI6dHJ1ZSwiQVBJU2VydmljZURlYnVnIjp0cnVlLCJBUElTZXJ2aWNlU2VjdXJpdHkiOnRydWUsIkFQSVNlcnZpY2VDZmRpLkJvdmVkYSI6dHJ1ZSwiQVBJU2VydmljZVBTIjp0cnVlfQ.gOnYc1EWBPtbEn7YcJaP9O8jYr0tSDa28CnHKZQfnvg"

Style: HEADER

Level: METHOD



El servicio responderá en caso de error :


{

    "error": {

        "code": "Unauthorized",

        "message": "Auth Bearer Token (JWT)"

    }

}


El servicio responderá en caso correcto:


{

    "value": "OK Bearer Token (JWT)  eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NTc2ODk5NjQsIlRva2VuVHlwZSI6IlNFUlZFUiIsIlVzZXIiOiIiLCJVc2VySWQiOiIiLCJVc2VyRW1haWwiOiIiLCJVc2VyTmFtZSI6IiIsIlVzZXJMYW5ndWFnZSI6IiIsIlVzZXJBZG1pbiI6ZmFsc2UsIlVzZXJTdXBlclVzZXIiOmZhbHNlLCJFbnRpdHlJZCI6IiIsIkVudGl0eURhdGFiYXNlIjoiIiwiQ29tcGFueUlkIjoiIiwiQ29tcGFueU5hbWUiOiIiLCJCdXNpbmVzc1VuaXRJZCI6IiIsIlRlc3QiOmZhbHNlLCJBUElTZXJ2aWNlRW1haWwiOnRydWUsIkFQSVNlcnZpY2VGaWxlIjp0cnVlLCJBUElTZXJ2aWNlVGVzdC5EQkNvbm5lY3Rpb24iOnRydWUsIkFQSVNlcnZpY2VMb2dpbiI6dHJ1ZSwiQVBJU2VydmljZURlYnVnIjp0cnVlLCJBUElTZXJ2aWNlU2VjdXJpdHkiOnRydWUsIkFQSVNlcnZpY2VDZmRpLkJvdmVkYSI6dHJ1ZSwiQVBJU2VydmljZVBTIjp0cnVlfQ.gOnYc1EWBPtbEn7YcJaP9O8jYr0tSDa28CnHKZQfnvg"

}


El servicio responderá en caso correcto si el Token expiró:


Token expired