Ir para conteúdo
  • Cadastre-se

dev botao

ACBRConsultaCNPJ


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

Recommended Posts

  • Consultores

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"

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Consultores
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

 

 

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

@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

 

 

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Consultores

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"

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

 

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
Link para o comentário
Compartilhar em outros sites

  • Consultores

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"

Link para o comentário
Compartilhar em outros sites

  • Consultores
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"

Link para o comentário
Compartilhar em outros sites

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;

 

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

Em 27/09/2023 at 12:57, Dfox disse:

Boa tarde aqui esta o exemplo so baixar e compilar 😉

ACBrConsultaCNPJ.zip 15.97 kB · 84 downloads

Boa Tarde.

Primeiramente agradecer ao empenho de todos os envolvidos.

Implementamos a rotina de consulta de CNPJ e está funcionando perfeitamente.

Obrigado

Anderson

Editado por Andergoncalves
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
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?

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 306 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...