Ir para conteúdo
  • Cadastre-se

dev botao

ACBRConsultaCNPJ


Ver Solução Respondido por Sandro Felipe Adad,
  • Este tópico foi criado há 412 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á 412 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...