Integração WebAPI via Latromi

Boa tarde.
Teria a possibilidade de fazer a integração a uma API utilizando o Latromi?

Comunicar com a primeira API para obter o token de acesso.
POST - https://homologacao.teste.com.br/teste.webapi/token (com autenticação OAuth 2.0)

Posteriormente, comunicar com a segunda API.
POST - https://homologacao.teste.com.br/teste.webapi/api/confirmarentrega
Utilizando o token recebido (com autenticação OAuth 2.0 novamente) e passando as informações solicitadas com o Json a seguir:

[
  {
    "Documento": "string",
    "NF": "string",
    "Serie": "string",
    "DataChegadaCliente": "2023-12-06T14:28:12.612Z",
    "DataSaidaCliente": "2023-12-06T14:28:12.612Z",
    "ImagemBase64Canhoto": "string",
    "DataEntregaEfetiva": "2023-12-06T14:28:12.612Z",
    "Situacao": "string"
  }
]

E armazenando o retorno em uma tabela do banco.
Desde já agradeço.

1 curtida

Olá @Bellaver!

Seja bem vindo a nossa comunidade!

Primeiramente, sugiro que você dê uma olhada neste tópico, caso ainda não tenha feito, para entender como a linguagem C# é usada no Latromi

Sobre a autenticação OAuth 2, você encontra um exemplo completo neste link.

Ao final do código apresentado no tópico acima, ao invés de atribuir o token à um campo “access_token”, coloque em uma variável de mesmo nome.

No código C# abaixo, mostro como fazer uma requisição POST , enviando a estrutura de dados que você forneceu como exemplo, buscando informações do banco de dados e salvando o resultado:

using System;
using System.IO;
using System.Reflection;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using System.Text;
using LATROMI.Extensions;

// Captura o token armazenado na variável chamada "access_token", do tipo "Text"
var token = (string)Variables["access_token"].Value;
// Captura o Data Inicial e Final armazenadas nos campos "dtpDtInicio" e "dtpDtFim" do tipo "DateTimePicker";
var dtInicio = (DateTime)Fields["dtpDtInicio"].Value;
var dtFim = (DateTime)Fields["dtpDtFim"].Value;

// List de tupla nomeada
var list = new List<(
    int Id,
    string Documento, 
    string NF,
    string Serie, 
    DateTime DataChegadaCliente,
    DateTime DataSaidaCliente,
    string ImagemBase64Canhoto,
    DateTime DataEntregaEfetiva,
    string Situacao
    )>();
    
// Abre uma conexão com o banco de dados "Nome_da_Conexao" (Troque pelo nome da conexão cadastrada)
using(var connection = Database.CreateConnection("Nome_da_Conexao")) 
{
    // Busca os dados de todos os registros que serão enviados
    var cmd = connection.CreateCommand();
    cmd.CommandText = 
        @"SELECT
           Id
           , Documento
           , NF
           , Serie
           , DataChegadaCliente
           , DataSaidaCliente
           , ImagemBase64Canhoto
           , DataEntregaEfetiva
           , Situacao
         FROM tabela
         WHERE data BETWEEN @dt_inicio AND @dt_fim";

    // Adiciona valor dos parâmetros
    cmd.AddParameter("@dt_inicio", dtInicio);
    cmd.AddParameter("@dt_fim", dtFim);

    // Abre a conexão antes de iniciar a leitura
    connection.Open();
    
    // Faz a leitura de cada linha retornada no SELECT, e adiciona na variável "list"
    using(var reader = cmd.ExecuteReader())
    {
        while(reader.Read())
        {
            list.Add((
                    (int)reader["Id"],
                    (string)reader["Documento"], 
                    (string)reader["NF"],
                    (string)reader["Serie"], 
                    (DateTime)reader["DataChegadaCliente"],
                    (DateTime)reader["DataSaidaCliente"],
                    Convert.IsDBNull(reader["ImagemBase64Canhoto"]) ? null: (string)reader["ImagemBase64Canhoto"],
                    (DateTime)reader["DataEntregaEfetiva"],
                    (string)reader["Situacao"]
                    ));
        }
    }

    // Declara HttpClient para fazer o envio para a WebAPI
    using (HttpClient client = new HttpClient()) 
    {
        // Adiciona cabeçaho HTTP com o token do tipo "Bearer"
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
        
        // Percorre os itens da lista, e faz o envio de cada um deles
        foreach(var item in list) 
        {
            // Conteudo do corpo da requisição
            var requestContent = new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, "application/json");
            
            // Faz a solicitação POST para o endpoint 
            var response = client.PostAsync("https://homologacao.teste.com.br/teste.webapi/api/confirmarentrega", requestContent).Result;
        
            // Faz a leitura do resultado da requisição
            var resultJson = response.Content.ReadAsStringAsync().Result;
            
            // Varifica se a solicitação foi bem-sucedida
            int statusCode = (int)response.StatusCode;
            
            // Grava o resultado no banco de dados
            cmd.Parameters.Clear();
            cmd.CommandText = @"UPDATE tabela 
                                SET ResponseData = @Result
                                  , ResponseStatusCode = @StatusCode
                                WHERE id = @id";
            cmd.AddParameter("@id", item.Id);
            cmd.AddParameter("@Result", resultJson);
            cmd.AddParameter("@StatusCode", statusCode);
            cmd.ExecuteNonQuery();
        }
    }
}
1 curtida