BKS.Integracoes 2.2.0-alpha-26s32-2-aa6cb798

BKS.Integracoes

Biblioteca .NET Standard 2.0 para consumo de API externas utilizando Refit.

Log API

O papel da biblioteca no novo ecossistema esta descrito em docs/log-api-architecture.md. O acompanhamento executável do piloto Solvera está em docs/LOGAPI-11.md.

📦 Instalação

Disponível como pacote NuGet:

dotnet add package BKS.Integracoes

Ou via Package Manager Console:

Install-Package BKS.Integracoes

🚀 Como usar

Configurando o cliente

using BKS.Integracoes.Clients;
using BKS.Integracoes.Models.ApiGrandino;

// Configure a URL base da API e sua chave de API
string baseUrl = "https://api.grandinobank.com.br/";
string apiKey = "sua-chave-de-api-aqui";

// Cria o cliente usando a factory estática
var clienteApi = GrandinoApiClientFactory.Create(baseUrl, apiKey);

// Consulta um CNPJ completo
string cnpj = "12345678000195";
CnpjCompletoResponse resultado = await clienteApi.ConsultarCnpjCompletoAsync(cnpj);

Console.WriteLine($"Razão Social: {resultado.RazaoSocial}");

Tratando erros

A biblioteca não trata exceções de HTTP automaticamente. Recomenda-se envolver as chamadas em try/catch:

try
{
    var resultado = await clienteApi.ConsultarCnpjCompletoAsync(cnpj);
    // Processar resultado
}
catch (Refit.ApiException ex)
{
    // Tratar erros de API (4xx, 5xx)
    Console.WriteLine($"Erro na API: {ex.StatusCode} - {ex.Content}");
}
catch (HttpRequestException ex)
{
    // Tratar erros de rede, timeout, etc.
    Console.WriteLine($"Erro de comunicação: {ex.Message}");
}

🔧 Configuração do .gitlab-ci.yml

O repositório já contém um pipeline de CI/CD configurado para:

  • Restauração de dependências
  • Build da biblioteca
  • Execução de testes
  • Geração do pacote NuGet

As variáveis de ambiente importantes são:

  • LIB_PATH: Caminho para o projeto da biblioteca (lib/BKS.Integracoes.csproj)
  • TEST_PATH: Caminho para o projeto de testes (tests/BKS.Integracoes.Tests.csproj)

🏗️ Build e Testes Locais

Para buildar a biblioteca:

dotnet build lib/BKS.Integracoes.csproj

Para rodar os testes:

dotnet test tests/BKS.Integracoes.Tests.csproj

Para gerar o pacote NuGet:

dotnet pack lib/BKS.Integracoes.csproj --configuration Release

📚 Estrutura do Projeto

lib/
├── Clients/
│   ├── IGrandinoApiClient.cs          # Interface Refit com os endpoints
│   ├── GrandinoAuthHeaderHandler.cs   # Handler para injetar API key
│   └── GrandinoApiClientFactory.cs    # Factory estática para criar o cliente
├── Models/
│   └── ApiGrandino/
│       └── CnpjCompletoResponse.cs    # DTO de resposta da API
└── BKS.Integracoes.csproj             # Projeto da biblioteca

tests/
└── BKS.Integracoes.Tests.csproj       # Projeto de testes

specs/
└── Grandino/
    └── openapi.json                   # Especificação OpenAPI da API Grandino

🤝 Contribuindo

  1. Fork o repositório
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. Abra um Pull Request

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

🙏 Agradecimentos

  • Refit pela biblioteca de cliente REST tipo-safe
  • .NET pela plataforma

ApiNovaVidaSMS

Integração com a API NovaVida SMS (https://apiopera.novavidati.com.br).

Documentação pública:

Exemplo mínimo com HttpClient (fluxo: gerar token -> enviar SMS):

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

public static async Task EnviarSmsAsync(string baseUrl, string usuario, string senha, string cliente, string telefone, string mensagem)
{
    using var http = new HttpClient { BaseAddress = new Uri(baseUrl) };

    // 1) Gerar token conforme a documentação oficial
    var tokenRequest = new StringContent(
        $"{{\"usuario\":\"{usuario}\",\"senha\":\"{senha}\",\"cliente\":\"{cliente}\"}}",
        Encoding.UTF8,
        "application/json");

    var tokenResponse = await http.PostAsync("/api/sms/v2/GerarToken", tokenRequest);
    tokenResponse.EnsureSuccessStatusCode();

    var tokenJson = await tokenResponse.Content.ReadAsStringAsync();
    var token = JObject.Parse(tokenJson)["token"]?.ToString() ?? JObject.Parse(tokenJson)["access_token"]?.ToString();
    if (string.IsNullOrWhiteSpace(token))
        throw new InvalidOperationException("Token não retornado pela API NovaVidaSMS.");

    // 2) Envio do SMS
    http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

    var payload = new JObject
    {
        ["telefone"] = telefone,
        ["mensagem"] = mensagem,
        ["idCategoria"] = 1
    };

    var content = new StringContent(payload.ToString(), Encoding.UTF8, "application/json");
    var sendResponse = await http.PostAsync("/api/sms/v2/EnvioSmsUnitario", content);
    sendResponse.EnsureSuccessStatusCode();
}

Exemplo com Refit (contrato simplificado):

public interface IApiNovaVidaSms
{
    [Post("/api/sms/v2/GerarToken")]
    Task<ApiResponse<object>> GerarTokenAsync([Body] object payload);

    [Post("/api/sms/v2/EnvioSmsUnitario")]
    Task<ApiResponse<object>> EnviarSmsUnitarioAsync([Header("Authorization")] string authorization, [Body] object payload);
}

// Uso: criar HttpClient com BaseAddress = https://apiopera.novavidati.com.br e chamar os métodos

Tratamento de exceções recomendado

  • Refit.ApiException — quando usar Refit, captura respostas HTTP 4xx/5xx com conteúdo da API.
  • HttpRequestException — falhas de rede, DNS, timeouts.
  • TaskCanceledException — timeouts ou cancelamento de requisições.
  • InvalidOperationException / JsonException — quando a resposta não possui o formato esperado.

Boas práticas

  • Valide e renove o token antes do envio quando necessário (caching com expiry).
  • Faça retry com política exponencial para erros transitórios (5xx, timeouts).
  • Logue respostas de erro com cuidado, sem expor dados sensíveis.
  • Consulte a documentação oficial nos links acima para parâmetros obrigatórios e esquema de payload.

Se quiser, posso gerar um cliente Refit completo e testes de unidade/simulação usando RichardSzalay.MockHttp para esta API.

ApiNovaVidaWhatsapp

Integração com a API NovaVida WhatsApp (https://whats.novavidati.com.br).

Ponto de entrada de envio:

  • POST /api/v1/whatsapp/send
  • Header Authorization: SEU_TOKEN_AQUI
  • Content-Type: application/json

Payload mínimo:

{
  "numero": "5599999999999",
  "mensagem": "Sua mensagem aqui",
  "idCustom": "ID_UNICO",
  "base64": "<conteudo-base64>",
  "originalname": "imagem.jpg",
  "mimetype": "image/jpeg",
  "centrocusto": "CENTRO_CUSTO"
}

Observações importantes:

  • O token é enviado diretamente no header Authorization.
  • Atualmente o serviço aceita mimetype igual a image/jpeg para anexos.
  • A resposta de sucesso costuma retornar status, codigo e mensagem.

Exemplo de contrato Refit:

public interface IApiNovaVidaWhatsapp
{
    [Post("/api/v1/whatsapp/send")]
    Task<ApiResponse<WhatsappSendResponse>> EnviarWhatsappAsync(
        [Header("Authorization")] string authorization,
        [Body] WhatsappSendRequest payload);
}

Uso com o wrapper da biblioteca:

var client = NovaVidaWhatsappClientFactory.Create(
    "https://whats.novavidati.com.br/",
    "SEU_TOKEN_AQUI");

var resposta = await client.EnviarWhatsappAsync(
    "5599999999999",
    "Olá, mensagem de teste",
    "ID_CUSTOM",
    base64Image,
    "imagem.jpg",
    "image/jpeg",
    "CENTRO_CUSTO");

if (resposta.IsT0)
{
    Console.WriteLine($"WhatsApp enviado: {resposta.AsT0.Mensagem}");
}
else
{
    Console.WriteLine($"Falha no envio: {resposta.AsT1}");
}

Integração da ApiNovaVida SMS

API Nova Vida Envio WhatsApp

Showing the top 20 packages that depend on BKS.Integracoes.

Packages Downloads
BKS.Consig
Package Description
76
BKS.Consig
Package Description
28
BKS.Consig
Package Description
20
BKS.Consig
Package Description
16
BKS.Consig
Package Description
15
BKS.Consig
Package Description
14
BKS.Consig
Package Description
13
BKS.Consig
Package Description
12
BKS.Consig
Package Description
11
BKS.Consig
Package Description
10

.NET Standard 2.0

Version Downloads Last updated
2.2.0-beta-26S36-1-1c6936cc 4 09/04/2026
2.2.0-alpha-26S36-1-e4888109 5 08/31/2026
2.2.0-alpha-26S32-2-aa6cb798 3 08/06/2026
2.2.0-alpha-26S32-1-687032eb 2 08/06/2026
2.1.2-beta-26S34-1-d8c9e4bd 2 08/17/2026
2.1.1-beta-26S29-4-1a9b56ce 16 07/16/2026
2.1.0-beta-26S29-3-d36f8062 6 07/14/2026
2.0.1-beta-26S29-2-3e2a6cf2 5 07/14/2026
2.0.1-alpha-26S29-2-c925d453 6 07/13/2026
2.0.0-beta-26S29-1-c2207265 7 07/13/2026
1.7.1-beta-26S28-1-4227eced 9 07/06/2026
1.7.0-beta-26S27-3-42e3e67f 9 07/03/2026
1.6.0-beta-26S27-2-e3772f0f 6 07/03/2026
1.5.0-beta-26S27-1-d2a96a8f 7 07/01/2026
1.4.1-beta-26S26-3-e8eaf07e 11 06/23/2026
1.4.0-beta-26S26-2-30e5821e 7 06/23/2026
1.3.2-beta-26S26-1-a74012b7 14 06/22/2026
1.3.1-beta-26S24-3-545bcfa6 16 06/10/2026
1.3.1-alpha-26S24-5-9572ce9c 5 06/10/2026
1.3.1-alpha-26S24-3-f5ac26e3 4 06/10/2026
1.3.0-beta-26S24-1-7608948b 6 06/10/2026
1.3.0-alpha-26S24-2-d8f1aa35 6 06/10/2026
1.3.0-alpha-26S24-1-f87cb089 7 06/10/2026
1.2.1-beta-26S24-2-605cf32a 5 06/10/2026
1.2.1-beta-26S22-1-545ca587 97 05/27/2026
1.2.0-beta-260521-170025-830a 20 05/21/2026
1.2.0-beta-260521-154905-4f1f 6 05/21/2026
1.2.0-beta-260521-154659-d698 8 05/21/2026
1.2.0-alpha-260521-150241-4bf3 7 05/21/2026
1.1.0-beta-260513-113417-81ff 7 05/13/2026
1.1.0-alpha-260512-163739-085c 8 05/12/2026
1.1.0-alpha-260512-120426-f5c8 8 05/12/2026
1.1.0-alpha-260508-105456-7345 10 05/08/2026
1.1.0-alpha-260508-093718-fece 9 05/08/2026
1.0.0-beta-260507-113723-b9cc 9 05/07/2026
1.0.0-alpha-260505-112138-9ab8 29 05/05/2026
1.0.0-alpha-260505-110603-cf21 9 05/05/2026
1.0.0-alpha-260428-155259-c43e 12 04/28/2026
1.0.0-alpha-260428-144528-c2ec 7 04/28/2026