No artigo de hoje vamos demonstrar em como consultar informações de um CNPJ via WebService.
Pessoal, antes de começarmos apenas 2 observações. A primeira é que a TOTVS já possui configurações para preencher no cadastro de Fornecedor e CNPJ, se quiser ver como, segue o link do TDN: https://tdn.totvs.com/pages/releaseview.action?pageId=581873683
A segunda é que essa consulta é oficial do link https://www.receitaws.com.br/v1/cnpj/00000000000000 , onde os zeros no fim é o número do CNPJ, por exemplo 00.000.000/0000-00 . Porém se você quiser ver dados de pessoa física ou o score e inadimplências ai seria interessante fazer uma integração com a SERASA ou SOPHUS (nós já fizemos com a SOPHUS, segue o link com tutorial – https://terminaldeinformacao.com/2020/12/10/como-integrar-protheus-com-a-sophus/ ).
Agora que as observações já foram feitas, abaixo um descritivo da lógica feita no programa:
- Recebe o CNPJ por parâmetro
- Via FWRest é feito a comunicação com a URL do receitaws.com.br
- A string JSON, nós transformamos em um objeto com JSONObject
- Definimos um Array como Retorno os dados desse objeto (esse array tem 16 posições que estão documentadas no Protheus.DOC da função zBusCNPJ)
Abaixo como ficou a função:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zBusCNPJ (long_description) @type Function @author Atilio @since 18/12/2022 @version version @param cCNPJ, Caractere, Número do CNPJ a ser consultado @return aDados, Array, Retorna um array com dados do cnpj consultado (veja as posições na observação abaixo) @example aDados := u_zBusCNPJ("00.000.000/0000-00") If aDados[01] // Deu certo a consulta EndIf @obs As posições do aDados são: [01] Se deu certo a consulta (.T.) ou (.F.) [02] Data de Abertura [03] Situação [04] Razão Social [05] Nome Fantasia [06] Porte [07] Natureza Juridica [08] Endereço [09] Número [10] Cidade [11] Estado [12] CEP [13] eMail [14] Telefone [15] CNPJ [16] Última Atualização A consulta é feita no site: https://www.receitaws.com.br/v1/cnpj/00000000000000 /*/ User Function zBusCNPJ(cCNPJ) Local aArea := FWGetArea() Local aDados := Array(16) Local aHeader := {} Local oRestClient := FWRest():New("https://www.receitaws.com.br/v1") Local cResultado := "" Local jResultado := Nil Local cError := "" Default cCNPJ := "" //Define a primeira posição como .F. default aDados[01] := .F. //Retira caracteres especiais cCNPJ := StrTran(cCNPJ, ".", "") cCNPJ := StrTran(cCNPJ, "/", "") cCNPJ := StrTran(cCNPJ, "-", "") //Se veio CNPJ e tem 14 caracteres If ! Empty(cCNPJ) .And. Len(cCNPJ) == 14 //Adiciona os headers que serão enviados via WS aAdd(aHeader,'User-Agent: Mozilla/4.0 (compatible; Protheus '+GetBuild()+')') aAdd(aHeader,'Content-Type: application/json; charset=utf-8') //Define a url e aciona o método GET oRestClient:setPath("/cnpj/" + cCNPJ) If oRestClient:Get(aHeader) //Pega o resultado cResultado := DecodeUTF8(oRestClient:cResult, "cp1252") jResultado := JsonObject():New() cError := jResultado:FromJson(cResultado) //Se não houve erros If Empty(cError) .And. jResultado:GetJsonObject('status') != "ERROR" aDados[01] := .T. aDados[02] := jResultado:GetJsonObject('abertura') aDados[03] := jResultado:GetJsonObject('situacao') aDados[04] := jResultado:GetJsonObject('nome') aDados[05] := jResultado:GetJsonObject('fantasia') aDados[06] := jResultado:GetJsonObject('porte') aDados[07] := jResultado:GetJsonObject('natureza_juridica') aDados[08] := jResultado:GetJsonObject('logradouro') aDados[09] := jResultado:GetJsonObject('numero') aDados[10] := jResultado:GetJsonObject('municipio') aDados[11] := jResultado:GetJsonObject('uf') aDados[12] := jResultado:GetJsonObject('cep') aDados[13] := jResultado:GetJsonObject('email') aDados[14] := jResultado:GetJsonObject('telefone') aDados[15] := jResultado:GetJsonObject('cnpj') aDados[16] := jResultado:GetJsonObject('ultima_atualizacao') EndIf EndIf EndIf FWRestArea(aArea) Return aDados
Ai para fazermos o teste é bem simples, por exemplo:
User Function zTstCNPJ() Local aDados := {} Local cMensagem := "" aDados := u_zBusCNPJ("28.671.016/0001-45") If aDados[1] cMensagem += "Data de Abertura: " + aDados[02] + " " + CRLF cMensagem += "Situação: " + aDados[03] + " " + CRLF cMensagem += "Nome Fantasia: " + aDados[05] + " " + CRLF cMensagem += "Porte: " + aDados[06] + " " + CRLF cMensagem += "Natureza Juridica: " + aDados[07] + " " + CRLF cMensagem += "Cidade: " + aDados[10] + " " + CRLF cMensagem += "Estado: " + aDados[11] + " " + CRLF cMensagem += "Última Atualização: " + aDados[16] + " " + CRLF FWAlertInfo(cMensagem, "Dados do CNPJ") EndIf Return
No teste acima, é exibido uma mensagem de teste, conforme abaixo:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Pena que o site receitaws não possui a informação de Inscrição Estadual.
Estou desenvolvendo meu pelo cnpjws.com.br
Fala Damião, tudo joia?
Opa não conhecia esse cnpj.ws , depois vou dar uma estudada.
Grande abraço.
Bom dia, função top. Vai me ajudar no cadastro de novos clientes, você é fera Dan
Fala Tiago, tudo joia?
Opa, obrigado pelo comentário é muita gentileza e generosidade sua.
Abraços.