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
- Fork o repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
📄 Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
🙏 Agradecimentos
ApiNovaVidaSMS
Integração com a API NovaVida SMS (https://apiopera.novavidati.com.br).
Documentação pública:
- Gerar token: https://apiopera.novavidati.com.br/docs/#tag/v2/get/api/sms/v2/GerarToken
- Envio do SMS (EnvioSmsUnitario): https://apiopera.novavidati.com.br/docs/#tag/v2/post/api/sms/v2/EnvioSmsUnitario
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
mimetypeigual aimage/jpegpara anexos. - A resposta de sucesso costuma retornar
status,codigoemensagem.
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
- BKS.Logs (>= 2.1.0-alpha-26S32-6-1261182f)
- Microsoft.Extensions.DependencyInjection (>= 9.0.15)
- Microsoft.Extensions.Http (>= 9.0.15)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.15)
- Microsoft.Extensions.Options (>= 9.0.15)
- NLog (>= 6.1.2)
- NLog.Extensions.Logging (>= 6.1.2)
- Newtonsoft.Json (>= 13.0.4)
- OneOf (>= 3.0.271)
- Refit (>= 10.1.6)
- System.Net.Http.Json (>= 9.0.9)
- System.Text.Json (>= 9.0.14)