Negócio

Integracoes Externas

Documentacao das integracoes com servicos externos do AgrSis - pagamentos, geocodificacao, validacao de documentos, WhatsApp e email.

Integracoes Externas

O AgrSis integra com servicos externos para pagamentos, geocodificacao, validacao de documentos, notificacoes por WhatsApp e envio de emails. Todas as credenciais sao gerenciadas via tabela settings no banco de dados (grupo integrations), editaveis pelo painel admin em /settings.


ASAAS (Pagamentos)

Finalidade: Gateway de pagamentos para cobrar assinaturas da plataforma via PIX, Boleto bancario e Cartao de credito.

Service: App\Services\AsaasGatewayInterface: App\Contracts\PaymentGatewayInterface

Funcionalidades

MetodoDescricao
createCustomer()Cria cliente no ASAAS a partir do usuario (nome, email, CPF/CNPJ)
createSubscription()Cria assinatura recorrente (MONTHLY, QUARTERLY, YEARLY) com billingType UNDEFINED
cancelSubscription()Cancela assinatura no gateway
generatePixPayment()Gera cobranca PIX com QR Code (imagem base64 + copia-e-cola)
generateBoletoPayment()Gera boleto bancario com URL do boleto e data de vencimento
generateCardPayment()Cobranca em cartao de credito (dados completos ou token para renovacao)
refundPayment()Estorno total ou parcial de um pagamento
getPaymentStatus()Consulta status de pagamento no gateway
handleWebhook()Processa eventos do webhook (PAYMENT_CONFIRMED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, etc.)

Ambientes

AmbienteURL Base
Sandboxhttps://sandbox.asaas.com/api/v3
Producaohttps://api.asaas.com/api/v3

O ambiente e definido pela configuracao asaas_environment na tabela settings.

Configuracoes (tabela settings)

ChaveDescricao
asaas_api_keyChave de API do ASAAS
asaas_environmentAmbiente: sandbox ou production
asaas_webhook_tokenToken para validacao de webhooks recebidos
asaas_enabledAtivar/desativar integracao (true/false)

Webhook

O ASAAS envia notificacoes automaticas de eventos de pagamento. Os eventos tratados:

Evento ASAASStatus interno
PAYMENT_CONFIRMED / PAYMENT_RECEIVEDpaid
PAYMENT_OVERDUEpast_due
PAYMENT_DELETED / PAYMENT_RESTOREDcancelled
PAYMENT_REFUNDEDrefunded

Mapeamento de Status

Status ASAASStatus interno
CONFIRMED, RECEIVEDpaid
PENDING, AWAITING_RISK_ANALYSISpending
OVERDUEpast_due
REFUNDED, REFUND_REQUESTEDrefunded
Outrosfailed

ViaCEP (Busca de Endereco)

Finalidade: Buscar dados de endereco a partir do CEP (logradouro, bairro, cidade, UF, codigo IBGE).

Controller: App\Http\Controllers\Api\GeographyController (metodo de busca de CEP)

Detalhes

  • API publica e gratuita — sem necessidade de chave
  • Endpoint externo: https://viacep.com.br/ws/{cep}/json/
  • Validacao: CEP deve ter exatamente 8 digitos numericos
  • Tratamento de erro: ViaCEP retorna "erro": true quando CEP nao existe

Dados Retornados

Campo retornadoCampo interno
cepzip_code
logradourostreet
complementocomplement
bairroneighborhood
localidadecity
ufstate
ibgeibge_code

Uso no Sistema

Utilizado nos formularios de cadastro de enderecos (produtores e fornecedores) para auto-preenchimento dos campos ao digitar o CEP.


OpenRouteService (Geocodificacao e Distancias)

Finalidade: Converter enderecos em coordenadas geograficas (latitude/longitude) para calculo de distancias e filtros de proximidade entre produtores e fornecedores.

Service: App\Services\GeocodingService

Detalhes

  • API gratuita com limites de requisicoes
  • URL base: https://api.openrouteservice.org
  • Timeout: 10 segundos por requisicao
  • Cache: Resultados cacheados por 24 horas (1440 minutos) com versionamento (v2)

Configuracao

A chave de API e configurada via variavel de ambiente:

ORS_API_KEY=sua_chave_aqui

Tratamento de Dados

O service possui logica avancada de normalizacao de enderecos para melhorar a precisao da geocodificacao:

  • Bairros ignorados: valores como "teste", "sem bairro", "nao informado", "n/a" sao descartados
  • Numeros ignorados: valores como "0", "s/n", "sem numero" sao descartados
  • Validacao de UF: mapeamento completo de siglas para nomes de estado

Como Obter uma Chave

  1. Acesse https://openrouteservice.org/dev/#/signup
  2. Crie uma conta gratuita
  3. Gere uma API Key no dashboard
  4. Configure a variavel ORS_API_KEY no .env

HubDev (Validacao de CPF/CNPJ)

Finalidade: Validacao de CPF (Pessoa Fisica) e CNPJ (Pessoa Juridica) junto a base da Receita Federal, retornando dados cadastrais oficiais.

Detalhes

Configuracao

HUB_DEV_TOKEN=seu_token_aqui
HUB_DEV_ATIVO=true    # false em desenvolvimento/testes para economizar creditos

Uso no Sistema

  • Validacao no cadastro de produtores (CPF ou CNPJ)
  • Validacao no cadastro de fornecedores (CNPJ)
  • Validacao de responsaveis (CPF)

Importante: Em ambiente de desenvolvimento, manter HUB_DEV_ATIVO=false para nao consumir creditos desnecessariamente.


Z-API (WhatsApp)

Finalidade: Envio de notificacoes via WhatsApp para produtores, fornecedores e administradores.

Service: App\Services\WhatsAppService

Funcionalidades

MetodoDescricao
send()Envia mensagem de texto para um numero. Suporta link opcional
sendNotification()Envia notificacao formatada com titulo em negrito e link
formatNotification()Formata mensagem no padrao *AgrSis - Titulo* + mensagem + link

Configuracoes (tabela settings)

ChaveDescricao
whatsapp_enabledAtivar/desativar envio (true/false)
whatsapp_api_urlURL base da API Z-API (ex: https://api.z-api.io/instances)
whatsapp_api_tokenClient Token de autenticacao
whatsapp_instance_idID da instancia Z-API

Detalhes Tecnicos

  • Endpoint de envio: {url}/{instanceId}/send-text
  • Header de autenticacao: Client-Token
  • Timeout: 15 segundos
  • Normalizacao de telefone: adiciona prefixo 55 automaticamente para numeros com 10 ou 11 digitos
  • Gerenciamento: Credenciais vinculadas ao Thiago via https://app.z-api.io

Tipos de Notificacao

As notificacoes enviadas por WhatsApp sao configuradas por tipo de evento no painel admin (/settings > Notificacoes). Exemplos:

  • Nova proposta recebida
  • Proposta aceita/rejeitada
  • Cotacao publicada
  • Atualizacoes de pagamento

Teste

O admin pode testar o envio diretamente pelo painel em /settings:

POST /api/v1/admin/settings/test-whatsapp
Body: { "to": "5534999999999" }

SMTP (Email)

Finalidade: Envio de emails transacionais (verificacao de conta, recuperacao de senha, notificacoes).

Configuracoes (tabela settings)

ChaveDescricao
smtp_hostServidor SMTP (padrao: smtp-relay.brevo.com)
smtp_portPorta SMTP (padrao: 587)
smtp_usernameUsuario de autenticacao
smtp_passwordSenha de autenticacao
smtp_encryptionTipo de criptografia: tls ou ssl
smtp_from_addressEmail remetente (padrao: noreply@agrsis.com)
smtp_from_nameNome do remetente (padrao: AgrSis)

Detalhes Tecnicos

As configuracoes SMTP sao carregadas dinamicamente do banco de dados (tabela settings) e aplicadas em tempo de execucao pelo AdminSettingsController::reloadSmtpFromSettings(). Isso permite que o admin altere credenciais SMTP sem necessidade de deploy.

O recarregamento:

  1. Limpa cache do SettingsService
  2. Reconfigura o mailer SMTP do Laravel via Config::set()
  3. Reseta a instancia do mail.manager para forcar nova conexao

Teste

O admin pode testar o envio diretamente pelo painel em /settings:

POST /api/v1/admin/settings/test-email
Body: { "to": "email@exemplo.com" }

Resumo de Configuracoes

Variaveis de Ambiente (.env)

VariavelIntegracaoObrigatoria
ORS_API_KEYOpenRouteServiceSim (para geocodificacao)
HUB_DEV_TOKENHubDevSim (para validacao CPF/CNPJ)
HUB_DEV_ATIVOHubDevSim (controle de ativacao)

Configuracoes no Banco (settings)

As demais integracoes (ASAAS, WhatsApp, SMTP) sao configuradas via tabela settings e editaveis pelo painel admin, sem necessidade de alterar variaveis de ambiente ou reiniciar containers.

GrupoIntegracoes
integrationsASAAS (api_key, environment, webhook_token, enabled)
integrationsWhatsApp (api_url, api_token, instance_id, enabled)
integrationsSMTP (host, port, username, password, encryption, from_address, from_name)

Arquivos Principais

CaminhoDescricao
apps/api/app/Services/AsaasGateway.phpGateway de pagamentos ASAAS
apps/api/app/Contracts/PaymentGatewayInterface.phpInterface do gateway de pagamentos
apps/api/app/Services/GeocodingService.phpGeocodificacao via OpenRouteService
apps/api/app/Services/WhatsAppService.phpEnvio de mensagens via Z-API
apps/api/app/Services/SettingsService.phpGerenciamento de configuracoes do banco
apps/api/app/Http/Controllers/Api/AdminSettingsController.phpEndpoints de configuracao e testes
apps/api/app/Http/Controllers/Api/GeographyController.phpBusca de CEP via ViaCEP
apps/api/app/Services/SubscriptionService.phpOrquestracao de assinaturas (usa AsaasGateway)
Copyright © 2026