Contexto
Cuándo hablo de gestión de información hay un principio que trato de seguir → mantener una sola fuente de la verdad (Single Source of Truth)
Algunos programas contables como Siigo y Aliaddo permiten hacer conexiones con sus APIs.
Problema
Lograr la conexión a Rest APIs desde Power Query no es tan intuitiva.
En el caso de Siigo toda la documentación (actual) es la siguiente:
Para comunicarte con nuestro servicio debes autenticarte mediante un esquema OAuth. Como primer paso debes generar un Token de acceso tipo JWT.
Para generar el token deberás utilizar las credenciales conformadas por username y access_key.
Solución
Después de darle muchas vueltas, este es el código que me permitió hacer la conexión al end point de clientes (terceros):
let
// Variables configurables
username = "", // Cambia según el usuario asignado por Siigo
accessKey = "", // Cambia según el access_key asignado por Siigo
partnerId = "", // Cambia según el nombre real de tu aplicación (sin espacios y que sea corto)
// URL para obtener el token
authUrl = "https://api.siigo.com/auth/token",
// Cuerpo de la solicitud para obtener el token
requestBody = Text.ToBinary("{""username"": """ & username & """, ""access_key"": """ & accessKey & """}"),
// Encabezados para la autenticación
authHeaders = [
#"Content-Type" = "application/json",
#"Partner-Id" = partnerId
],
// Solicitud para obtener el token
authResponse = Json.Document(Web.Contents(authUrl, [
Headers = authHeaders,
Content = requestBody,
ManualStatusHandling = {200, 400, 401}
])),
// Extracción del token
token = if Record.HasFields(authResponse, "access_token") then authResponse[access_token] else error "No se encontró el token en la respuesta.",
// URL para obtener los clientes
customersUrl = "https://api.siigo.com/v1/customers",
// Encabezados para la solicitud de clientes con el token JWT
customerHeaders = [
Authorization = "Bearer " & token,
#"Content-Type" = "application/json",
#"Partner-Id" = partnerId
],
// Solicitud para obtener los clientes
customersResponse = Web.Contents(customersUrl, [
Headers = customerHeaders
]),
// Convertir la respuesta JSON a tabla
result = Json.Document(customersResponse),
// Convertir la respuesta JSON a tabla
results = result[results]
in
results
El usuario y clave se encuentra según la documentación de la API aquí:
Para realizar la generación de credenciales es necesario ingresar a Siigo Nube, menú izquierdo Alianzas
>
Botón “Mi Credencial API”
Resultado
