Conexión Excel Power Query a Siigo Api

RicardoConsejo rápido, Herramientas y formatosLeave a Comment

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.

Siigo API · Apiary

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

Leave a Reply