API de consulta - autenticação

Boa tarde.
Não tenho muita experiência com APIs, criando minha primeira API para o Sankhya, com (CRUDServiceProvider.loadRecords) e tentando buscar dados através de uma View pois no (CRUDServiceProvider.loadRecords) não tem como fazer ligações entre tabelas e preciso buscar informações de várias tabelas.
Mas parece que este serviço também não aceita consultas por view. alguém consegue me dar uma ideia de como proceguir?

Agradeço desde já.
Obrigado.

View:
SELECT C.NUNOTA, C.NUMNOTA, C.DTNEG, C.VLRNOTA, C.CODPARC, P.NOMEPARC, P.CGC_CPF,

T.AD_FUSION

FROM TGFCAB C

INNER

JOIN

TGFPAR P

ON P.CODPARC = C.CODPARC

INNER

JOIN

TGFTOP T

ON T.CODTIPOPER = C.CODTIPOPER

AND T.DHALTER = (

SELECT

MAX(T2.DHALTER)

FROM

TGFTOP T2

WHERE

T2.CODTIPOPER = C.CODTIPOPER

)

WHERE

T.AD_FUSION = 'S'


Meu server.js:

const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());
app.use(express.static('public'));

const PORT = 3000;

// 🔗 URL Sankhya
const BASE_URL = "http://topcesta.fwc...";

// 🔐 USUÁRIO DO SANKHYA
const USER = "MEUUSU";
const PASS = "MINHASENHASANKHYA";

// 🔥 COOKIE DE SESSÃO
let cookie = "";

// =========================
// LOGIN SANKHYA
// =========================
async function login() {
  console.log("🔐 Fazendo login no Sankhya...");

  const payload = {
    serviceName: "MobileLoginSP.login",
    requestBody: {
      NOMUSU: { $: USER },
      INTERNO: { $: PASS }
    }
  };

  const res = await fetch(`${BASE_URL}?serviceName=MobileLoginSP.login&outputType=json`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload)
  });

  cookie = res.headers.get("set-cookie");

  console.log("✅ Login realizado");
}

// =========================
// HEALTH
// =========================
app.get('/api/health', (req, res) => {
  res.json({ status: "OK" });
});

// =========================
// CONSULTA
// =========================
app.post('/api/notas', async (req, res) => {
  try {
    if (!cookie) {
      await login();
    }

    const { cpf, page = 0 } = req.body;

    const documento = (cpf || "").replace(/\D/g, '');

    console.log("🔎 Documento:", documento);

    const payload = {
      serviceName: "CRUDServiceProvider.loadRecords",
      requestBody: {
        dataSet: {
          rootEntity: "VW_NOTAS_FUSION",
          includePresentationFields: "N",
          offsetPage: page.toString(),
          entity: {
            fieldset: {
              list: "NUNOTA,NUMNOTA,DTNEG,VLRNOTA,CODPARC,NOMEPARC,CGC_CPF"
            }
          },
          criteria: {
            expression: {
              $: `
                this.CGC_CPF = '${documento}'
                OR this.CGC_CPF LIKE '%${documento}%'
              `
            }
          }
        }
      }
    };

    console.log("📤 Consultando Sankhya...");

    const response = await fetch(`${BASE_URL}?serviceName=CRUDServiceProvider.loadRecords&outputType=json`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "Cookie": cookie
      },
      body: JSON.stringify(payload)
    });

    const text = await response.text();

    console.log("📥 Retorno:", text);

    res.json(JSON.parse(text));

  } catch (err) {
    console.error("❌ Erro:", err);
    res.status(500).json({ erro: err.message });
  }
});

// =========================
// START
// =========================
app.listen(PORT, async () => {
  console.log(`🚀 Servidor rodando em http://localhost:${PORT}`);
  await login();
});

Retorno no Terminal do VSCode:
PS D:\0-VS - CODE\Testes\TESTES SANKHYA\Docs html\FMG-Diversos\ApiSankhyaGetsSets\StatusPedidos> npm start

> [email protected] start

> node server.js

🚀 Servidor rodando em http://localhost:3000

🔐 Fazendo login no Sankhya...

✅ Login realizado

🔎 Documento: 55230253720

📤 Consultando Sankhya...

📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"0","pendingPrinting":"false","transactionId":"791CB96184E95CC49C831B05165210D7","statusMessage":"N�o foi encontrado objeto de acesso a dados para este BMP: mge-dwf:VW_NOTAS_FUSION"}

📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"0","pendingPrinting":"false","transactionId":"791CB96184E95CC49C831B05165210D7","statusMessage":"N�o foi encontrado objeto de acesso a dados para este BMP: mge-dwf:VW_NOTAS_FUSION"}

🔎 Documento: 55230253720

📤 Consultando Sankhya...

📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"3","pendingPrinting":"false","transactionId":"4B984F27BD4A8CEF0F4F8FB91D1E0890","statusMessage":"N�o autorizado."}

2
9 respostas