Ir para conteúdo
  • Cadastre-se

dev botao

[ Correção ] - ACBrConsultaCNPJ "Consulta CNPJ"


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

Recommended Posts

Postado
Em 01/11/2017 at 08:53, dimåsf disse:

Bom dia pessoal, pelo que entendi do captcha do google... espero que com essas informações seja possível melhorar a ferramenta de consulta.

Depois q vc clica ele envia a informação e depois retorna essa consulta via ajax de acordo com a imagem abaixo:

image.thumb.png.ec160d59db784b2a84b226611abd7f59.png

 

E armazena em um input g-recaptcha-response no html para postar junto com a solicitação do cnpj conforme imagem abaixo:

image.png.add272b81b12f793ab83c71e7df4f7be.png

Boa tarde Dimas,

   Realmente o google faz isso, consegui um "quebrador" de captcha que funciona www.2captcha.com (bom preço e quebra o recaptcha). Porém estou implementando a rotina na unit do TACBrConsultaCNPJ.Consulta e não estou tendo sucesso. Segue abaixo código:

   Post.WriteString('cnpj='+OnlyNumber(ACNPJ)+'&');
    Post.WriteString('g-recaptcha-response='+Trim( cCaptcha )+'&');
    Post.WriteString('origem=comprovante&');
    Post.WriteString('search_type=cnpj');
    Post.WriteString('submit1=Consultar&');
    Post.Position:= 0;

    HttpSend.Clear;
    HttpSend.Document.Position:= 0;
    HttpSend.Document.CopyFrom(Post, Post.Size);
    HTTPSend.MimeType := 'application/x-www-form-urlencoded';
    HTTPPost('https://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida_recaptcha.asp');

Em RespHTTP.Text o seguinte:


<script language="JavaScript">
  function proxima(link)
  {
   location.replace(link);
   return false;
  }
  function carrega(vobjeto) {
     for (var va = 0 ; va < document.forms[0].elements.length; va++) {
        if (document.forms[0].elements[va].name == vobjeto) {
            document.forms[0].elements[va].focus();
        }
     }    
     return false;
  }
  function volta(vvolta) {
     history.go(vvolta*-1);
     return false;
  }
  function SaltaCampo (campo, prox, tammax, teclapres)
{
   var tecla = teclapres.keyCode;
   vr = campo.value;
   tam = vr.length;
   if (tecla != 0 && tecla != 10 && tecla != 24)
      if (tam == tammax)
          prox.focus();
}
</script>


<html>

<head>

        
    <script src="https://www.google.com/recaptcha/api.js?hl=pt-BR" async defer></script>    
    
    
    <title>Emissão de Comprovante de Inscrição e de Situação Cadastral</title>
    
</head>


<form id="theForm" action="valida_recaptcha.asp" method="post" name="frmConsulta">

    <table border="0" cellspacing="0" cellpadding="0" width="100%">
        <tr>
            <td>
                <font color="#000080" face="Arial">
                <b>Emissão de Comprovante de Inscrição e de Situação Cadastral</b></font>
            </td>  
        </tr>
    </table>
    
    <hr size="1">

    <p><font face="Arial" size="2">
    <b>Contribuinte,</b></p> 
    <p>Esta página tem como objetivo permitir a emissão do Comprovante de Inscrição e de Situação Cadastral 
       de Pessoa Jurídica pela Internet em consonância com a 
    
    
    
    <a target="_blank" href="http://normas.receita.fazenda.gov.br/sijut2consulta/link.action?idAto=73658">
    <font face="Arial" size="2">        
    Instrução Normativa RFB nº 1.634, de 06 de maio de 2016.</a> 
    
    
    <p align="left">
    <font size="2" face="arial">
    
    Digite o número de CNPJ da empresa e clique em &quot;Consultar&quot;.
    
    <input type="button" 
           name="captchaSonoro" 
             id="captchaSonoro" 
        onClick="javascript:window.location.replace('Cnpjreva_solicitacao3.asp');"
          value="Captcha Sonoro"/>
    
    </font>    
    </p>  

    <input type="hidden" name="origem" value="comprovante">    
    
    <table border="0" cellspacing="1">
    <tr>
        <td valign="top">
        <font face="Arial" size="2">
        <b>CNPJ :</b> 
        <input 
            tabIndex="1" 
            name="cnpj" 
            id="cnpj"
            maxlength="14" 
            size="16" 
            onKeyup="SaltaCampo(document.frmConsulta.cnpj, document.frmConsulta.txtTexto_captcha_serpro_gov_br, 14, event)"
            value="56723091000148"> 
        </font>

        </td>
    
    </tr>
    
            
    <tr>                
        <td>
            <div class="g-recaptcha" data-sitekey="6LcT2zQUAAAAABRp8qIQR2R0Y2LWYTafR0A8WFbr"></div>            
        </td>        
    </tr>
                
    <tr>        
        <td valign="top" colspan="2">
          
        </td>    
        
    </tr>
    
    <tr>
        <td align="center" colspan="2">
        <p><br>
        
        <input type="submit" value="Consultar" id=submit1 name=submit1>
        
        <!--<button class="g-recaptcha" data-sitekey="6LcT2zQUAAAAABRp8qIQR2R0Y2LWYTafR0A8WFbr" data-callback='onSubmit'>Consultar</button>-->
        <input type="hidden" name="search_type" value="cnpj">      
        <input type="reset" name="opcao" value="Limpar">

        </p>
        </td>
    </tr>
    
    
    
    </table>

    </form>
<!-- Div obrigatório. Nele será gravado o código necessário para funcionamento do flash-->
<div id="container"></div>
</body>
</html>

Pessoal, qq sugestão é bem vinda para solução deste problema que é comum.

Postado

Eu acredito que talvez será necessário usar o TWebbrowser, pois logo após a chamada com a informação do recapcha o fluxo é redirecionado para Cnpjreva_Comprovante.asp onde estão todas as informações.

 

Usando apenas o http do indy eu acredito que teria de ser todos esse trabalho manual não é?

Não conheço bem esses compontes, o maximo q já fiz com eles foi um post simples para um pagina local, perdoem se estiver falando bobeira.

Postado
21 minutos atrás, dimåsf disse:

Eu acredito que talvez será necessário usar o TWebbrowser, pois logo após a chamada com a informação do recapcha o fluxo é redirecionado para Cnpjreva_Comprovante.asp onde estão todas as informações.

 

Usando apenas o http do indy eu acredito que teria de ser todos esse trabalho manual não é?

Não conheço bem esses compontes, o maximo q já fiz com eles foi um post simples para um pagina local, perdoem se estiver falando bobeira.

Eu fiz semana passa isso que você sugeriu, deu tudo certo, mas o problema foi o reCaptcha pedindo intermináveis verificações de placas e carros após clicar em Não sou robô.

Eu até consegui resolver os problemas de script do TWebbrowser, rodando em compatibilidade do IE instalado, mas este reCaptcha parece que sabe que o browser está rodando dentro de um sistema, então ele pensa que é algum bot....

  • Consultores
Postado

Por favor, não façam um post simplesmente pra dizer que está ou não funcionando.

Está instável e já sabemos disso.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado
50 minutos atrás, jaidomini disse:

Eu fiz semana passa isso que você sugeriu, deu tudo certo, mas o problema foi o reCaptcha pedindo intermináveis verificações de placas e carros após clicar em Não sou robô.

Eu até consegui resolver os problemas de script do TWebbrowser, rodando em compatibilidade do IE instalado, mas este reCaptcha parece que sabe que o browser está rodando dentro de um sistema, então ele pensa que é algum bot....

Mas em paginas we mesmo, ja vi o casos deste recaptha pedir inumeras vezes, mas depois ele nao pede mais.

Postado

Bom dia a todos. Consegui uma solução para a consulta do cnpj. Segue  abaixo código. Seria interessante, se possível e viável, integrá-la nos padrões do ACBR e até distribuí-la nesse formato.

na unit ACBrConsultaCNPJ foram feitas as seguintes modificações :   

function TACBrConsultaCNPJ.Consulta(const ACNPJ, ACaptcha: String;
  ARemoverEspacosDuplos: Boolean): Boolean;
var
  Post: TStringStream;
  Erro: String;
  Resposta : TStringList;
  StrAux: String;
  sMun:String;
  CountCid:Integer;
  cCaptcha : String;
begin
  Result := False;
  Erro := ValidarCNPJ( ACNPJ ) ;
  if Erro <> '' then
     raise EACBrConsultaCNPJException.Create(Erro);

  Clear;
  Post:= TStringStream.Create('');
  try
    try
      HTTPGet('https://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao2.asp');
    except
      on e : exception do
        raise EACBrConsultaCNPJException.Create('Erro ao conectar no site da receita.'+#13#10+E.Message);
    end;
    cCaptcha := QuebraCaptcha;
    if ( cCaptcha ) = '' then  raise EACBrConsultaCNPJException.Create('Erro na quebra do captcha');
    Post.WriteString('cnpj='+OnlyNumber(ACNPJ)+'&');
    Post.WriteString('g-recaptcha-response='+ cCaptcha +'&');
    Post.WriteString('origem=comprovante&');
    Post.WriteString('search_type=cnpj&');
    Post.WriteString('submit1=Consultar');
    Post.Position:= 0;
    HttpSend.Clear;
    HttpSend.Document.Position:= 0;
    HttpSend.Document.CopyFrom(Post, Post.Size);
    HTTPSend.MimeType := 'application/x-www-form-urlencoded';
    HTTPPost('https://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida_recaptcha.asp');
    Erro := VerificarErros(RespHTTP.Text);

--------------------

function TACBrConsultaCNPJ.QuebraCaptcha:String;
var
   sl :TStrings;
   IdHTTP : TIdHTTP;
   cID: string;
   nConta: Integer;
begin
  sl := TStringList.Create;
  IdHTTP := TIdHTTP.Create;
  try
    sl.Text := 'body='+( sl.Text );
    sl.Insert( 0, 'method=userrecaptcha');
    sl.Insert( 0, 'key='+FKey2Captcha);   // nova propriedade criada no componente ACBrConsultaCNPJ do tipo string
    sl.Insert( 0, 'googlekey=6LcT2zQUAAAAABRp8qIQR2R0Y2LWYTafR0A8WFbr');
    sl.Insert( 0, 'pageurl=https://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao2.asp');

    try
      IdHTTP.Request.CustomHeaders.Clear;
      IdHTTP.Request.Clear;
      cID := IdHTTP.Post( 'http://2captcha.com/in.php', sl );
      if Copy( cID,1,2 ) <> 'OK' then
        Abort;
    except
      Abort;
    end;
    cID := copy( cID, 4, 100 );
    nConta := 0;

    try
      IdHTTP.Request.CustomHeaders.Clear;
      IdHTTP.Request.Clear;
      Result := '';
      Sleep(10000);  // aguardar 10 segundos
      repeat
        Sleep(5000);  // aguardar 5 segundo para cada tentativa
        Result := IdHTTP.Get( 'http://2captcha.com/res.php?key='+FKey2Captcha+'&action=get&id='+cID );
        Inc( nConta );
        if (nConta >= 15) then
          Abort;
      until (Copy( Result, 1, 2 ) = 'OK');
      Result := Copy( Result, 4, 1000 );
    except
      Result := '';
    end;
  finally
    sl.Free;
    IdHTTP.Free;
  end;
end;
-------------------------------

Também foi necessário incluir o IndyProtocols.dcp no projeto ACBr_TCP.bpl.

O Key2Captcha refere-se a chave de acesso fornecida pelo site www.2captcha.com que é o responsável pela quebra do recaptcha.

Sucesso a todos !!

Fiquem com Deus.

  • Curtir 1
Postado

@Leonardo Quinino @Pablo Gimenez @junior carvalho

Entrar no projeto ACBR, uma premissa é de ser "Compilável em Lazarus".  : também acredito que isso seja necessário. Minha idéia com o post foi trazer uma luz para um problema comum. Sei que será necessário melhorias para fazer parte do projeto ACBr, mas já é um começo :-D

duvida na parte de incluir "IndyProtocols.dcp no projeto ACBr_TCP.bpl". : é necessário pois na quebra do captcha eu utilizo o componente idHTTP do indy. Se declararmos a unit IDHttp resultará em um erro de instalação dos pacotes por utilizar unit´s já incluídas em outra BLP. Fiz isso para uma solução imediata .. talvez isso possa ser melhorado.:)

O Key2Captcha refere-se a chave de acesso fornecida pelo site www.2captcha.com que é o responsável pela quebra do recaptchaisso é pago ? : SIM é pago, porém para a necessidade de onde trabalho o custo é viável, afinal, cada quebra vai sair por volta de R$ 0,0 o que é muito barato.

Estou a disposição para quaisquer melhorias e explicações.

Abraços

Postado
32 minutos atrás, valterpatrick disse:

Boa Renato, estou com o mesmo problema. Há alguma previsão de quando vai estar no ar a versão com esta correção e como faço para saber das alterações que foram feitas nas versões?

Boa tarde Valter,

Não sei qdo, nem se vai, estar vai estar disponível no projeto ACBr uma vez que depende da avaliação dos mantenedores além de adequação para lazarus e delphi 7 até tokyo. Eu uso XE2 e está funcionando legal. Para uma solução imediata serve, agora para o projeto precisa de melhorias ....

  • Fundadores
Postado

Não vamos suportar um "QuebraCaptcha"...

Isso não lhes parece ilegal ? A mim sim...

Se a receita inseriu o Captcha ela tem os motivos dela... 

Alguém já tentou contato com a Receita e questionou ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Postado
8 minutos atrás, AugustoKnitsch disse:

Bom dia,

O Site https://receitaws.com.br/ disponibiliza uma API gratuita para consulta de CNPJ (O mesmo também tem a API paga, que tem algumas vantagens em relação a gratuita). 

Basta utilizar a URL https://www.receitaws.com.br/v1/cnpj/[CNPJ] que ele irá retornar um json.

O ACBr teria interesse em adaptar o componente para a API? Se sim podemos faze-la. 

Parece interessante.

  • Curtir 1
Postado (editado)
20 minutos atrás, AugustoKnitsch disse:

Bom dia,

O Site https://receitaws.com.br/ disponibiliza uma API gratuita para consulta de CNPJ (O mesmo também tem a API paga, que tem algumas vantagens em relação a gratuita). 

Basta utilizar a URL https://www.receitaws.com.br/v1/cnpj/[CNPJ] que ele irá retornar um json.

O ACBr teria interesse em adaptar o componente para a API? Se sim podemos faze-la. 

Eu fiz faz uns 4 dias, em XE2, coloca no uses: IdHTTP e IdSSLOpenSSL

 

   function RecWslerCampo(Texto: TStringList; NomeCampo: String
     ): String;
   var
     i : integer;
     linha: String;
   begin
     NomeCampo := Trim(NomeCampo) + '=';
     Result := '';
     for i := 0 to Texto.Count-1 do
     begin
       linha := Trim(Texto);
       if Copy(linha,1,Length(NomeCampo)) = NomeCampo then
       begin
         Result := Copy(linha, Length(NomeCampo)+1, Length(linha));
         break;
       end;
     end
   end;

var
   IdHTTP1: TIdHTTP;
   IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
   sResposta: TStringList;
begin
                        try
                           IdHTTP1:= TIdHTTP.Create(self);
                           IdSSLIOHandlerSocketOpenSSL1:= TIdSSLIOHandlerSocketOpenSSL.Create(Self);
                           IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
                           IdHTTP1.ReadTimeout := 5000;
                           sResposta := TStringList.Create;
                           sResposta.Text := IdHTTP1.Get( 'https://www.receitaws.com.br/v1/cnpj/XXXXXXXXXXXXXX', ' ','%20'));
                           sResposta.Text := TrocaTexto(sResposta.Text,'": ','=');
                           sResposta.Text := TrocaTexto(sResposta.Text,'",','');
                           sResposta.Text := TrocaTexto(sResposta.Text,'"','');
                        finally
                           IdSSLIOHandlerSocketOpenSSL1.Free;
                           IdHTTP1.Free;
                           FechaAguarda;
                        end;
 

                        if Pos('nome=', sResposta.Text) > -1 then
                           begin
                              if RecWslerCampo(sResposta, 'situacao') <> 'ATIVA' then
                                 ShowMessage('Atenção, SITUAÇÃO está: ' + RecWslerCampo(sResposta, 'situacao'));

                              razao_social := RecWslerCampo(sResposta, 'nome');
                              fantasia := RecWslerCampo(sResposta,'fantasia');
 .... e assim por diante...
                           end;
end;

Editado por jaidomini
Postado
40 minutos atrás, AugustoKnitsch disse:

Bom dia,

O Site https://receitaws.com.br/ disponibiliza uma API gratuita para consulta de CNPJ (O mesmo também tem a API paga, que tem algumas vantagens em relação a gratuita). 

Basta utilizar a URL https://www.receitaws.com.br/v1/cnpj/[CNPJ] que ele irá retornar um json.

O ACBr teria interesse em adaptar o componente para a API? Se sim podemos faze-la. 

 

O legal deste serviço é que se parece com o ViaCEP já utilizado no ACBr. Acho que seria interessante alterar o ConsultaCNPJ pra "PARECER" com o ConsultaCEP com as opções RECEITA / RECEITAWS / etc.

 

Postado
3 minutos atrás, JNPace disse:
46 minutos atrás, AugustoKnitsch disse:

Bom dia,

O Site https://receitaws.com.br/ disponibiliza uma API gratuita para consulta de CNPJ (O mesmo também tem a API paga, que tem algumas vantagens em relação a gratuita). 

Basta utilizar a URL https://www.receitaws.com.br/v1/cnpj/[CNPJ] que ele irá retornar um json.

O ACBr teria interesse em adaptar o componente para a API? Se sim podemos faze-la. 

 

O legal deste serviço é que se parece com o ViaCEP já utilizado no ACBr. Acho que seria interessante alterar o ConsultaCNPJ pra "PARECER" com o ConsultaCEP com as opções RECEITA / RECEITAWS / etc.

Concordo.

Att,

Filipe Sortica
Santa Maria / RS
Analista de Sistemas

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