Como consultar CNPJ na Receita no TOTVS Protheus em ADVPL.
Aprenda a consultar CNPJ via API no TOTVS Protheus em ADVPL com FWRest: código pronto, leitura do JSON, tratamento de erros e boas práticas. API de CNPJ grátis, sem chave e sem cadastro.
Por que usar a API do openCNPJ no TOTVS Protheus em ADVPL
No TOTVS Protheus, consultar o CNPJ automaticamente agiliza o cadastro de clientes (SA1) e fornecedores (SA2) com os dados públicos da Receita Federal. Com as classes FWRest e JsonObject, a integração é feita em ADVPL puro, sem componentes externos.
- Grátis, sem chave de acesso e sem cadastro.
- Resposta em JSON com razão social, situação cadastral, endereço, CNAEs, sócios e Simples Nacional.
- Aceita o CNPJ numérico e o novo CNPJ alfanumérico.
- Limite de 10 requisições por segundo por IP.
O que você precisa
TOTVS Protheus 12 com as classes FWRest e JsonObject. O AppServer precisa ter acesso de saída HTTPS para api.opencnpj.com.br.
Consultar um CNPJ no TOTVS Protheus em ADVPL
O endpoint é GET https://api.opencnpj.com.br/cnpj/{cnpj}. Envie o CNPJ com 14 caracteres, sem pontos, barra ou hífen. O exemplo abaixo consulta o CNPJ 06.990.590/0001-23:
#include "totvs.ch"
User Function OpenCNPJ()
Local cCnpj := "06990590000123"
Local oRest := FWRest():New("https://api.opencnpj.com.br")
Local aHeader := {"Accept: application/json"}
Local oJson := JsonObject():New()
oRest:SetPath("/cnpj/" + cCnpj)
If oRest:Get(aHeader)
oJson:FromJson(oRest:GetResult())
ConOut(oJson["razao_social"])
ConOut(oJson["estabelecimento"]["situacao_cadastral"])
Else
ConOut("Erro: " + oRest:GetLastError())
EndIf
ReturnTOTVS Protheus 12, com as classes FWRest e JsonObject.
Remover a máscara do CNPJ
Se o CNPJ vem formatado (06.990.590/0001-23) de um formulário, banco de dados ou planilha, limpe a pontuação antes de montar a URL. A mesma regra funciona para o CNPJ alfanumérico:
Static Function LimpaCnpj(cCnpj)
Return Upper(StrTran(StrTran(StrTran(AllTrim(cCnpj), ".", ""), "/", ""), "-", ""))
// LimpaCnpj("06.990.590/0001-23") -> "06990590000123"Campos mais usados da resposta
| Campo | Conteúdo |
|---|---|
razao_social | Nome empresarial |
estabelecimento.nome_fantasia | Nome fantasia |
estabelecimento.situacao_cadastral | Ativa, Suspensa, Inapta, Baixada ou Nula |
estabelecimento.atividade_principal | CNAE principal, com código e descrição |
estabelecimento.cidade.nome e estabelecimento.estado.sigla | Município e UF |
estabelecimento.cep, logradouro, numero, bairro | Endereço |
simples.simples e simples.mei | Opção pelo Simples Nacional e MEI |
socios | Quadro de sócios e administradores |
A lista completa de campos está na documentação da API.
Tratando erros
Verifique o status HTTP antes de ler o JSON. ADVPL: use oRest:GetHTTPCode().
| Status | O que significa | O que fazer |
|---|---|---|
200 | CNPJ encontrado | Ler o JSON |
400 | Formato de CNPJ inválido | Conferir os 14 caracteres |
404 | CNPJ não encontrado na base | Informar ao usuário |
429 | Limite de requisições excedido | Aguardar e tentar de novo |
500 | Erro interno | Tentar novamente mais tarde |
Os erros também vêm em JSON, com os campos status, titulo e detalhes.
Boas práticas
- Defina um timeout para as conexões HTTP do AppServer, para que uma rede lenta não trave a rotina.
- Guarde o resultado em cache se o mesmo CNPJ for consultado com frequência.
- Em processamentos em lote, respeite o limite de 10 requisições por segundo.
- Os dados refletem a base pública mais recente processada e não substituem certidões oficiais.
Perguntas frequentes
A API de CNPJ do openCNPJ é gratuita?
Sim, 100% grátis. Não há chave de acesso nem cadastro. O limite é de 10 requisições por segundo por IP.
Funciona no Protheus 11 ou em versões mais antigas?
O exemplo usa FWRest e JsonObject, do Protheus 12. Em versões anteriores, faça o GET com HttpGet() e converta o retorno com FWJsonDeserialize().
Como preencher o cadastro de clientes (SA1) com o retorno?
Leia os campos do JSON e atribua aos campos da SA1, como A1_NOME (razao_social), A1_NREDUZ (nome_fantasia), A1_END, A1_BAIRRO, A1_MUN, A1_EST e A1_CEP, por gatilho ou via MsExecAuto da rotina MATA030.
De onde vêm os dados do CNPJ?
Dos dados abertos do CNPJ publicados pela Receita Federal, complementados por bases públicas. Os dados podem ter defasagem e não substituem certidões oficiais. Veja a origem dos dados.