Ir para conteúdo
  • Cadastre-se

dev botao

ACBRConsultaCNPJ


Ver Solução Respondido por Sandro Felipe Adad,
  • Este tópico foi criado há 323 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
Postado

2.2 - Permaneça no assunto - Quando tiver uma dúvida diferente do assunto no tópico, poste em novo tópico. Não use algo equivalente a "aproveitando o gancho... [dúvida não relacionada com o tópico aqui]". Favor leia as regras do fórum.

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Postado
7 horas atrás, Luiz Eduardo Bodo disse:

Boa tarde pessoal, quem esta com problema na consulta do CNPJ, fiz uma função utilizando JSONResponse, simples e eficiente, estou utilizando delphi 10.3

Utiliza a api free oficial do governo?

caso positivo poderia compartilhar a sua solução?

  • Curtir 1
Postado

Sim utilizando a API free oficial, esta funcionando perfeitamente, de ontem pra hoje dei uma melhorada nela, encapsulando. segue a unit.

 

Fiz uma função para chamar.

function TfrmPessoas.ConsultarCNPJ(const CNPJ: string): TCNPJInfo;
begin
  Result := TCNPJInfo.Create;

  try
    Result.Consultar(CNPJ);
  except
    on E: Exception do
    begin
      // Trate as exceções, se necessário.
      ShowMessage('Erro ao consultar CNPJ: ' + E.Message);
      Result.Free; // Libere a instância em caso de erro.
      Result := nil; // Defina o resultado como nulo em caso de erro.
    end;
  end;
end;
// MODO DE USAR...
InfoCNPJ := ConsultarCNPJ(DM.TiraPontos(txtDocumento.Text)); // Substitua pelo CNPJ desejado.
if InfoCNPJ.Achou = 'Sim' then
  begin
  // achou 
  end
  else
  // não achou...

espero ter ajudado, qualquer duvida ou melhorias é bem vinda...

CNPJInfo.pas

  • Curtir 1
  • Consultores
Postado
1 hora atrás, Luiz Eduardo Bodo disse:

API free oficial

Só uma observação... www.receitaws.com.br não é oficial no sentido de ser uma fonte governamental.

é um serviço particular que oferece uma opção gratuita com limitação de quantidade de consultas e não é na base do governo, podendo existir divergencias das informações.

  • Curtir 1
Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Postado
9 minutos atrás, Alexandre de Paula disse:

Só uma observação... www.receitaws.com.br não é oficial no sentido de ser uma fonte governamental.

é um serviço particular que oferece uma opção gratuita com limitação de quantidade de consultas e não é na base do governo, podendo existir divergencias das informações.

Obrigado por esclarecer, realmente não tinha me atentado a este fato, de fato na base de dados da receitaws tem um atraso de pelo 1 mes em alguns cnpj que consultei aqui, mas nao sei se a data de atualizacao da base deles é realmente sincronizada com a receita federal.

mas é funcional até certo ponto.

Postado
1 hora atrás, Luiz Eduardo Bodo disse:

Sim utilizando a API free oficial, esta funcionando perfeitamente, de ontem pra hoje dei uma melhorada nela, encapsulando. segue a unit.

 

Fiz uma função para chamar.

function TfrmPessoas.ConsultarCNPJ(const CNPJ: string): TCNPJInfo;
begin
  Result := TCNPJInfo.Create;

  try
    Result.Consultar(CNPJ);
  except
    on E: Exception do
    begin
      // Trate as exceções, se necessário.
      ShowMessage('Erro ao consultar CNPJ: ' + E.Message);
      Result.Free; // Libere a instância em caso de erro.
      Result := nil; // Defina o resultado como nulo em caso de erro.
    end;
  end;
end;
// MODO DE USAR...
InfoCNPJ := ConsultarCNPJ(DM.TiraPontos(txtDocumento.Text)); // Substitua pelo CNPJ desejado.
if InfoCNPJ.Achou = 'Sim' then
  begin
  // achou 
  end
  else
  // não achou...

espero ter ajudado, qualquer duvida ou melhorias é bem vinda...

CNPJInfo.pas 6.89 kB · 10 downloads

Mas no teu exemplo voce não utiliza a API oficial (https://www.receitaws.com.br/v1/cnpj)

e como ficaria a questão do captcha que é o assunto deste tópico?

Postado
Agora, Sandro Felipe Adad disse:

Mas no teu exemplo voce não utiliza a API oficial (https://www.receitaws.com.br/v1/cnpj)

e como ficaria a questão do captcha que é o assunto deste tópico?

esta api como o amigo Alexandre comentou realmente não é oficial, nao requer captcha apenas o endereço https://www.receitaws.com.br/v1/cnpj+CNPJAQUI

lembrando que esta api limita 3 consultas por minuto.

  • Membros Pro
Postado

@Sandro Felipe Adad Aqui funcionou, parabéns pela solução e obrigado por compartilhar.

Só notei um detalhe, que somente em alguns computadores não abre (erro: Invalid variant operation.).

Suponho que seja alguma coisa relativa ao navegador, mas não consegui achar um padrão.

 

Algum de vocês que usaram notaram esse problema e conseguiram achar o motivo?

 

@joemil @Adriano Luiz de Souza @jaques.rocha @Antonio Gomes @barrys

 

 

Postado
1 hora atrás, Sandro Felipe Adad disse:

Mas no teu exemplo voce não utiliza a API oficial (https://www.receitaws.com.br/v1/cnpj)

e como ficaria a questão do captcha que é o assunto deste tópico?

boa tarde, sabe me dizer se sua solução funciona no Delphi 2010?

1 hora atrás, Sandro Felipe Adad disse:

Mas no teu exemplo voce não utiliza a API oficial (https://www.receitaws.com.br/v1/cnpj)

e como ficaria a questão do captcha que é o assunto deste tópico?

Acontece esse erro ao compilar no Delphi 2010.

image.thumb.png.b689b6ecfb8df24922f104582f1ca76d.png

  • Consultores
Postado

Para quem não quer misturar o ACBrConsultaCNPJ para que se houver mudanças no código quebrar a implementação ou vocês trabalhar com fork.

Tem a classe do ReceitaWS direta para trabalhar, só passar o JSON.

MeuCNPJ := TJson.JsonToObject<TCNPJConsultaClass>(RESTResponse.Content);

isso não vai funcionar em versões antigas do RAD.

ReceitaWS.pas

  • Curtir 1
Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Postado
45 minutos atrás, Dempsey disse:

boa tarde, sabe me dizer se sua solução funciona no Delphi 2010?

Acontece esse erro ao compilar no Delphi 2010.

image.thumb.png.b689b6ecfb8df24922f104582f1ca76d.png

experimente comentar a linha que acusa o erro, o código neste evento é so para diminuir a tela do navegador(zoom)

Postado
2 horas atrás, Luiz Eduardo Bodo disse:

Obrigado por esclarecer, realmente não tinha me atentado a este fato, de fato na base de dados da receitaws tem um atraso de pelo 1 mes em alguns cnpj que consultei aqui, mas nao sei se a data de atualizacao da base deles é realmente sincronizada com a receita federal.

mas é funcional até certo ponto.

Eu havia testado essa API e algumas outras em um CNPJ que havia tido alterações recentes, e todas estavam me trazendo os dados antigos, a única que me trouxe os dados corretamente foi a CNPJÁ, que tem a opção de consulta Cache onde você obtêm os dados da base deles, e tem a opção ONLINE que é feita a busca dos dados na hora na receita federal, com a opção de já trazer a I.E. também, observando que a opção ONLINE é paga, mas eles têm planos bem em conta.

Postado

 

18 minutos atrás, Orlando Dantas disse:

Eu havia testado essa API e algumas outras em um CNPJ que havia tido alterações recentes, e todas estavam me trazendo os dados antigos, a única que me trouxe os dados corretamente foi a CNPJÁ, que tem a opção de consulta Cache onde você obtêm os dados da base deles, e tem a opção ONLINE que é feita a busca dos dados na hora na receita federal, com a opção de já trazer a I.E. também, observando que a opção ONLINE é paga, mas eles têm planos bem em conta.

obrigado pela dica Orlando, vou dar uma olhada.

  • Curtir 1
  • Consultores
Postado

receitaws da para pesquisar tambem é só passar dias = 0 que ele consulta na serpro

  • Curtir 1
Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Consultores
Postado
26 minutos atrás, Luiz Eduardo Bodo disse:

como passar esse parametro?

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Postado

Fiz uma função rápida que funciona em Delphi 7. Quem quiser usar é só alterar para os campos que usam.

procedure TFCon_CNPJ.btnConsultarClick(Sender: TObject);
var
  I: Integer;
  aHTTP : TACBrHTTP;
  Resposta : TStringList;
  URL : string;
begin
  aHTTP := TACBrHTTP.Create(nil);
  try
    aHTTP.HTTPSend.Clear;
    aHTTP.TimeOut := 10000;                            
    URL := 'https://www.receitaws.com.br/v1/cnpj/'+F0Menu.TiraCaractere(EditCNPJ.Text)+'';
    
    try
      aHTTP.HTTPMethod('GET', URL);
      Resposta := TStringList.Create;
      try
        Resposta.Text := Trim(aHTTP.RespHTTP.Text);

        if Trim(LerCampo(Resposta,'nome')) = '' then
           application.messagebox(pchar('CNPJ não encontrado.'),'Atenção',mb_iconinformation)
        else
           begin
             EditTipo.text        := LerCampo(Resposta,'tipo');
             EditAbertura.text    := LerCampo(Resposta,'abertura');
             EditRazaoSocial.Text := LerCampo(Resposta,'nome');
             EditPorte.Text       := LerCampo(Resposta,'porte');
             EditFantasia.text    := LerCampo(Resposta,'fantasia');
             EditEndereco.text    := LerCampo(Resposta,'logradouro');
             EditNumero.text      := LerCampo(Resposta,'numero');
             EditComplemento.text := LerCampo(Resposta,'complemento');
             EditBairro.text      := LerCampo(Resposta,'bairro');
             EditCidade.text      := LerCampo(Resposta,'municipio');
             EditUF.text          := LerCampo(Resposta,'uf');
             EditCEP.text         := StringReplace(LerCampo(Resposta,'cep'),'.','',[rfReplaceAll]);;
             EditSituacao.text    := LerCampo(Resposta,'situacao');
             EditEmail.text       := LerCampo(Resposta,'email');
             EditTelefone.text    := LerCampo(Resposta,'telefone');
           end;
      finally
        Resposta.Free;
      end;
    except
      on e: EACBrHTTPError do
      begin
        if pos('429',e.Message) > 0 then
           begin
             application.messagebox(pchar('Você excedeu o máximo de 3 consultas por minuto. Tente novamente mais tarde.'),'Atenção',mb_iconerror);
           end
        else
           application.messagebox(pchar('Ocorreu o seguinte erro ao consultar o CNPJ: '+sLineBreak+e.Message),'Atenção',mb_iconerror);
      end;
      on e: exception do
      begin
        application.messagebox(pchar('Ocorreu o seguinte erro ao consultar o CNPJ: '+sLineBreak+e.Message),'Atenção',mb_iconerror);
      end;
    end;
  finally
    aHTTP.Free;
  end;

A função para ler os campos:

function TFCon_CNPJ.LerCampo(Texto: TStringList; NomeCampo: String): String;
var
  i : integer;
  linha, coluna1, coluna2: String;
begin
  Result := '';
  for i := 0 to Texto.Count-1 do
  begin
    linha := uppercase(Trim(Texto[i]));
    NomeCampo := uppercase(NomeCampo);

    coluna1 := copy(linha,1,pos(':',linha)-1); //pegar o texto antes do :
    coluna1 := StringReplace(Trim(coluna1),'"','',[rfReplaceAll]); //remover as aspas duplas "

    if coluna1 = NomeCampo then
    begin
      coluna2 := Trim(copy(linha,pos(':',linha)+1,length(linha))); //pegar o texto depois dos :
      coluna2 := StringReplace(Trim(coluna2),'"','',[rfReplaceAll]);  //remover as aspas duplas "
      coluna2 := StringReplace(Trim(coluna2),',','',[rfReplaceAll]);  //remover a virgula ,
      Result := coluna2;
      break;
    end;
  end
end;

 

Postado
58 minutos atrás, carlessoflu disse:

Fiz uma função rápida que funciona em Delphi 7. Quem quiser usar é só alterar para os campos que usam.

procedure TFCon_CNPJ.btnConsultarClick(Sender: TObject);
var
  I: Integer;
  aHTTP : TACBrHTTP;
  Resposta : TStringList;
  URL : string;
begin
  aHTTP := TACBrHTTP.Create(nil);
  try
    aHTTP.HTTPSend.Clear;
    aHTTP.TimeOut := 10000;                            
    URL := 'https://www.receitaws.com.br/v1/cnpj/'+F0Menu.TiraCaractere(EditCNPJ.Text)+'';
    
    try
      aHTTP.HTTPMethod('GET', URL);
      Resposta := TStringList.Create;
      try
        Resposta.Text := Trim(aHTTP.RespHTTP.Text);

        if Trim(LerCampo(Resposta,'nome')) = '' then
           application.messagebox(pchar('CNPJ não encontrado.'),'Atenção',mb_iconinformation)
        else
           begin
             EditTipo.text        := LerCampo(Resposta,'tipo');
             EditAbertura.text    := LerCampo(Resposta,'abertura');
             EditRazaoSocial.Text := LerCampo(Resposta,'nome');
             EditPorte.Text       := LerCampo(Resposta,'porte');
             EditFantasia.text    := LerCampo(Resposta,'fantasia');
             EditEndereco.text    := LerCampo(Resposta,'logradouro');
             EditNumero.text      := LerCampo(Resposta,'numero');
             EditComplemento.text := LerCampo(Resposta,'complemento');
             EditBairro.text      := LerCampo(Resposta,'bairro');
             EditCidade.text      := LerCampo(Resposta,'municipio');
             EditUF.text          := LerCampo(Resposta,'uf');
             EditCEP.text         := StringReplace(LerCampo(Resposta,'cep'),'.','',[rfReplaceAll]);;
             EditSituacao.text    := LerCampo(Resposta,'situacao');
             EditEmail.text       := LerCampo(Resposta,'email');
             EditTelefone.text    := LerCampo(Resposta,'telefone');
           end;
      finally
        Resposta.Free;
      end;
    except
      on e: EACBrHTTPError do
      begin
        if pos('429',e.Message) > 0 then
           begin
             application.messagebox(pchar('Você excedeu o máximo de 3 consultas por minuto. Tente novamente mais tarde.'),'Atenção',mb_iconerror);
           end
        else
           application.messagebox(pchar('Ocorreu o seguinte erro ao consultar o CNPJ: '+sLineBreak+e.Message),'Atenção',mb_iconerror);
      end;
      on e: exception do
      begin
        application.messagebox(pchar('Ocorreu o seguinte erro ao consultar o CNPJ: '+sLineBreak+e.Message),'Atenção',mb_iconerror);
      end;
    end;
  finally
    aHTTP.Free;
  end;

A função para ler os campos:

function TFCon_CNPJ.LerCampo(Texto: TStringList; NomeCampo: String): String;
var
  i : integer;
  linha, coluna1, coluna2: String;
begin
  Result := '';
  for i := 0 to Texto.Count-1 do
  begin
    linha := uppercase(Trim(Texto[i]));
    NomeCampo := uppercase(NomeCampo);

    coluna1 := copy(linha,1,pos(':',linha)-1); //pegar o texto antes do :
    coluna1 := StringReplace(Trim(coluna1),'"','',[rfReplaceAll]); //remover as aspas duplas "

    if coluna1 = NomeCampo then
    begin
      coluna2 := Trim(copy(linha,pos(':',linha)+1,length(linha))); //pegar o texto depois dos :
      coluna2 := StringReplace(Trim(coluna2),'"','',[rfReplaceAll]);  //remover as aspas duplas "
      coluna2 := StringReplace(Trim(coluna2),',','',[rfReplaceAll]);  //remover a virgula ,
      Result := coluna2;
      break;
    end;
  end
end;

 

Obrigado por compartilhar lembrando que a receitaws não e uma fonte oficial, podendo conter divergências nos dados

  • Membros Pro
Postado
Em 19/09/2023 at 14:39, Sandro Felipe Adad disse:

Começou a dar erro 

image.png.4cfcc0787fb437946b50de0ad3816a1a.png

Alguém de voces conseguiu resolver esse problema?

 

Postado
35 minutos atrás, DouglasDll disse:

Começou a dar erro 

image.png.4cfcc0787fb437946b50de0ad3816a1a.png

Alguém de voces conseguiu resolver esse problema?

 

sim marca a opção Silent = true

  • Este tópico foi criado há 323 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.