BKS.Integracoes 2.2.0-alpha-26s36-1-e4888109

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
82
BKS.Consig
Package Description
33
BKS.Consig
Package Description
25
BKS.Consig
Package Description
22
BKS.Consig
Package Description
21
BKS.Consig
Package Description
20
BKS.Consig
Package Description
19
BKS.Consig
Package Description
18
BKS.Consig
Package Description
17
BKS.Consig
Package Description
16

.NET Standard 2.0

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