Ir para conteúdo
  • Cadastre-se

dev botao

Erro Capturar Captcha Cnpj


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

Recommended Posts

Pessoal, a receita mudou o modo de pegar o captcha do CNPJ, deixando igual do CPF

 

agora é possível recuperar pela URL: http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp

 

 

ATENÇÃO

 

Retorno do Captcha agora é PNG e não mais JPG

 

em anexo fontes

ACBrConsultaCNPJ.pas

Alexandre De Carli,
Gerente de Projetos na empresa Econtabil Software.


email: [email protected]
site: http://www.extremeprogramming.wordpress.com
Pato Branco - PR

Link para o comentário
Compartilhar em outros sites

Caros amigos,

 

Primeira parte do problema era a exibição do Captcha sem dar erro e resolvi desta forma:

 

procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);
var
  Img64, ImgBin, DataClientID: AnsiString;
  P: Integer;
begin
  try
    if HTTPSend.ResultCode = 200 then
    begin
      HTTPSend.Document.Position := 0;
      Stream.CopyFrom(HttpSend.Document, HttpSend.Document.Size);
 
      Stream.Position := 0;
    end;
  Except
    on E: Exception do begin
      raise EACBrConsultaCNPJException.Create('Erro na hora de fazer o download da imagem do captcha.'+#13#10+E.Message);
    end;
  end;
end;
 
 
Antes estava assim:
 
procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);
var
  Img64, ImgBin, DataClientID: AnsiString;
  P: Integer;
begin
  try
    HTTPGet(GetCaptchaURL);
    if HttpSend.ResultCode = 200 then
    begin
      HTTPSend.Document.Position := 0;
      Stream.CopyFrom(HttpSend.Document, HttpSend.Document.Size);
      Stream.Position := 0;
    end;
  Except on E: Exception do begin
    raise EACBrConsultaCNPJException.Create('Erro na hora de fazer o download da imagem do captcha.'+#13#10+E.Message);
  end;
  end;
end;
 
 
Na rotina de consulta deve estar da mesma forma ue a usada na Consulta CPF e, para isto, basta olhar o exemplo de consulta CPF.
 
 
Por fim estou tentando resolver a parte de consulta, mas até agora não consegui progredir em nada.
 
Espero ter ajudado a dar um caminho para iniciarmos uma solução final.
 
Atenciosamente...
 
Marcus Vinicius Scarpelli
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Esta parte resolvi com este procedimento:
 

procedure TfrmPrincipal.LabAtualizarCaptchaClick(Sender: TObject);
var
  Stream: TMemoryStream;
  ImgArq: String;
begin
  Stream := TMemoryStream.Create;
  try
    ACBrConsultaCNPJ1.Captcha(Stream);
    ImgArq := ExtractFilePath(ParamStr(0))+PathDelim+'captch.png';
    Stream.SaveToFile( ImgArq );
    Image1.Picture.LoadFromFile( ImgArq );
 
    EditCaptcha.Clear;
    EditCaptcha.SetFocus;
  finally
    Stream.Free;
  end;
end;
Link para o comentário
Compartilhar em outros sites

Bom, fiz duas mudanças no ACBrConsultaCNPJ.pas e consegui pegar o resultado. Segue os 2 trechos que modifiquei e o arquivo .pas final, se quiserem ver e modificar.

Lembrando que, precisa mudar, como já dito anteriormente, o carregamento do componente TImage para aceitar PNG agora. Acima ai já foi postado solução para isso.

 

 

1 - procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);

procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);
begin
    try
        //Passando só a URL do captcha, dava erro depois, na leitura dos campos. - Rafael
        if HttpSend.ResultCode = 200 then
        begin
            HttpSend.Document.Position := 0;
            Stream.CopyFrom(HttpSend.Document, HttpSend.Document.Size);
            Stream.Position := 0;
        end;
    Except
        on E: Exception do
        begin
            raise EACBrConsultaCNPJException.Create('Erro na hora de fazer o download da imagem do captcha.' + #13#10 + E.Message);
        end;
    end;
end;
 
2 - o inicio da function TACBrConsultaCNPJ.Consulta(const ACNPJ, ACaptcha: String;
function TACBrConsultaCNPJ.Consulta(const ACNPJ, ACaptcha: String;
    ARemoverEspacosDuplos: Boolean): Boolean;
var
    Post: TStringStream;
    Erro: String;
    Resposta: TStringList;
    StrAux: String;
begin
    Erro := ACBrValidadorValidarCNPJ(ACNPJ);
    if Erro <> '' then
        raise EACBrConsultaCNPJException.Create(Erro);
 
    Clear;
    Post := TStringStream.Create('');
    try
        Post.WriteString('origem=comprovante&');
        Post.WriteString('cnpj=' + OnlyNumber(ACNPJ) + '&');
        Post.WriteString('txtTexto_captcha_serpro_gov_br=' + Trim(ACaptcha) + '&');
        Post.WriteString('submit1=Consultar&');
        Post.WriteString('search_type=cnpj');
        Post.Position := 0;
..........

 

 

ACBrConsultaCNPJ.pas

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

 

Bom, fiz duas mudanças no ACBrConsultaCNPJ.pas e consegui pegar o resultado. Segue os 2 trechos que modifiquei e o arquivo .pas final, se quiserem ver e modificar.

Lembrando que, precisa mudar, como já dito anteriormente, o carregamento do componente TImage para aceitar PNG agora. Acima ai já foi postado solução para isso.

 

 

1 - procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);

procedure TACBrConsultaCNPJ.Captcha(Stream: TStream);
begin
    try
        //Passando só a URL do captcha, dava erro depois, na leitura dos campos. - Rafael
        if HttpSend.ResultCode = 200 then
        begin
            HttpSend.Document.Position := 0;
            Stream.CopyFrom(HttpSend.Document, HttpSend.Document.Size);
            Stream.Position := 0;
        end;
    Except
        on E: Exception do
        begin
            raise EACBrConsultaCNPJException.Create('Erro na hora de fazer o download da imagem do captcha.' + #13#10 + E.Message);
        end;
    end;
end;
 
2 - o inicio da function TACBrConsultaCNPJ.Consulta(const ACNPJ, ACaptcha: String;
function TACBrConsultaCNPJ.Consulta(const ACNPJ, ACaptcha: String;
    ARemoverEspacosDuplos: Boolean): Boolean;
var
    Post: TStringStream;
    Erro: String;
    Resposta: TStringList;
    StrAux: String;
begin
    Erro := ACBrValidadorValidarCNPJ(ACNPJ);
    if Erro <> '' then
        raise EACBrConsultaCNPJException.Create(Erro);
 
    Clear;
    Post := TStringStream.Create('');
    try
        Post.WriteString('origem=comprovante&');
        Post.WriteString('cnpj=' + OnlyNumber(ACNPJ) + '&');
        Post.WriteString('txtTexto_captcha_serpro_gov_br=' + Trim(ACaptcha) + '&');
        Post.WriteString('submit1=Consultar&');
        Post.WriteString('search_type=cnpj');
        Post.Position := 0;
..........

 

 

Muito bom.. Deu certinho.. Muito obrigado cara. Resolveu meu problema.

Analista/Programador

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

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde

peguei o código para comparar e subir ao svn mas com o merge marcou o arquivo todo!

usou algum formatador de código? se sim favor somente altera o necessário para funcionar e anexar novamente a unit para poder efetuar o merge!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

deu tudo certo aqui.   obrigado!

 

aproveitando....  existe alguma forma de obter a inscrição estadual?

 

Opa... Eu utilizo o AcbrNFe pra puxar a IE.

 

var lCnpj: String;

begin

    ACBrNFe1.Configuracoes.WebServices.UF            := 'MG';
    ACBrNFe1.WebServices.ConsultaCadastro.UF      := 'MG';
    ACBrNFe1.WebServices.ConsultaCadastro.CNPJ := '14.757.209/0001-09';
    ACBrNFe1.WebServices.ConsultaCadastro.Executar;
 
    lCnpj := ACBrNFe1.WebServices.ConsultaCadastro.RetConsCad.InfCad.Items[0].IE;
    ...
end;
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Segue novamente o arquivo que modifiquei, sem fazer a formatação dos fontes.

Os 2 trechos que mudei coloquei um comentario com o nome Rafael, para facilitar a busca para quem se interessar em ver o que foi modificado.

Boa noite

ainda assim não entendi como é que após você chamar uma vez a tela e depois passar o capctha ele sabe de qual sessão está sendo passado

pois foi removido as informações?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

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