Pular para o conteúdo

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
Return

TOTVS 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

CampoConteúdo
razao_socialNome empresarial
estabelecimento.nome_fantasiaNome fantasia
estabelecimento.situacao_cadastralAtiva, Suspensa, Inapta, Baixada ou Nula
estabelecimento.atividade_principalCNAE principal, com código e descrição
estabelecimento.cidade.nome e estabelecimento.estado.siglaMunicípio e UF
estabelecimento.cep, logradouro, numero, bairroEndereço
simples.simples e simples.meiOpção pelo Simples Nacional e MEI
sociosQuadro 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().

StatusO que significaO que fazer
200CNPJ encontradoLer o JSON
400Formato de CNPJ inválidoConferir os 14 caracteres
404CNPJ não encontrado na baseInformar ao usuário
429Limite de requisições excedidoAguardar e tentar de novo
500Erro internoTentar 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.