Consulta CEP entre outros serviços direto no WebService dos Correios, a partir do Delphi 7 acima.

08/02/2018

0

New >> Other.... Aba WebServices... WSDL Importer... e importe a seguinte URL:
https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl

Na unit importada, substitua a linha :

 InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioDocument);


Por:

InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioHasAllSOAPActions);


Ou:

InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioHasNamespace);



Último detalhe, no indy passado setar a seguinte propriedade como True:

 HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;



Pronto! Está apto a fazer consultas diretas no site da Empresa Brasileira de Correios e Telégrafos;


Exemplo:

procedure TfrmIni.btnConsCepClick(Sender: TObject);
var
  wsAtendeCliente: AtendeCliente;
  wsConsultaCepReq: consultaCEP;
  wsConsultaCepResp: consultaCEPResponse;
  sEndCep: string;

begin
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioDocument);
  //    CHANGE TO
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasAllSOAPActions);   ((( TESTADO OK COM ESSE )))
  //    OR
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasNamespace);

  try
    try
      wsConsultaCepReq := consultaCEP.Create;
      wsConsultaCepResp := consultaCEPResponse.Create;

      HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
      wsAtendeCliente := GetAtendeCliente(False, '', HTTPRIO1);

      wsConsultaCepReq.cep := edtCep.Text;

      try
        wsConsultaCepResp := wsAtendeCliente.consultaCEP( wsConsultaCepReq );
      except
        on E: ERemotableException do
        begin
          if (UpperCase(Trim(E.message)) = 'CEP NAO ENCONTRADO') or (UpperCase(Trim(E.message)) = 'CEP NAO INFORMADO') then
          begin
            Application.MessageBox(PChar(Format('Atenção! Cep %s não informado/encontrado!', [edtCep.Text])), PChar('Mensagem'), MB_OK + MB_ICONINFORMATION);
            Exit;
          end
          else
          begin
            raise Exception.Create( E.message );
          end;
        end;
      end;

      sEndCep := wsConsultaCepResp.return.cep + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.end_ + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.complemento + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.complemento2 + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.bairro + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.cidade + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.uf + #13;

      ShowMessage( sEndCep );
    finally
      FreeAndNil(wsConsultaCepReq);
      FreeAndNil(wsConsultaCepResp);
      wsAtendeCliente._Release;
    end

  except
    on E: Exception do
    begin
      Application.MessageBox(PChar(Format('Atenção! %s%s ', [#13#13, E.message])), PChar('Erro'), MB_OK + MB_ICONERROR);
    end;
  end;
end;


Att.

Sandro Lemes
Desenvolvedor Delphi
Sandro Lemes

Sandro Lemes

Responder

Post mais votado

09/09/2019

consultaCEP e consultaCEPResponse são classes criadas?

Você tem o código fonte para disponibilizar?



na unit que é criada ao fazer o procedimento abaixo existem estas classes, no caso você vai ter que fazer uses da classe que irá ser criada!!!


New >> Other.... Aba WebServices... WSDL Importer... e importe a seguinte URL:
https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl



Sandro, estou tentando utilizar essa consulta de CEP, porém ao pesquisar na unit criada conforme suas instruções, não encontrei as classes consultaCEP e consultaCEPResponse, apenas na classe AtenteCliente possui uma função chamada consultaCEP.
Preciso fazer algo mais para importar essas classes? Além do uses uAtendeCliente1 que é o nome da minha unit, preciso adicionar mais alguma?

Luciano Peçanha

Luciano Peçanha
Responder

Mais Posts

23/07/2018

Paulo Freire

Excelente Sandro, gostei da sua simplificação, parabéns, show de bola.
Responder

17/01/2019

Amilton Machado

consultaCEP e consultaCEPResponse são classes criadas?

Você tem o código fonte para disponibilizar?
Responder

17/01/2019

Sandro Lemes

consultaCEP e consultaCEPResponse são classes criadas?

Você tem o código fonte para disponibilizar?



na unit que é criada ao fazer o procedimento abaixo existem estas classes, no caso você vai ter que fazer uses da classe que irá ser criada!!!


New >> Other.... Aba WebServices... WSDL Importer... e importe a seguinte URL:
https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl
Responder

17/10/2019

Solange Silva

Estou com mesmo problema do Luciano.
Delphi 10.3 community.
Responder

30/12/2019

Socrates Foschera

New >> Other.... Aba WebServices... WSDL Importer... e importe a seguinte URL:
https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl

Na unit importada, substitua a linha :

 InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioDocument);


Por:

InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioHasAllSOAPActions);


Ou:

InvRegistry.RegisterInvokeOptions(TypeInfo(AtendeCliente), ioHasNamespace);



Último detalhe, no indy passado setar a seguinte propriedade como True:

 HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;



Pronto! Está apto a fazer consultas diretas no site da Empresa Brasileira de Correios e Telégrafos;


Exemplo:

procedure TfrmIni.btnConsCepClick(Sender: TObject);
var
  wsAtendeCliente: AtendeCliente;
  wsConsultaCepReq: consultaCEP;
  wsConsultaCepResp: consultaCEPResponse;
  sEndCep: string;

begin
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioDocument);
  //    CHANGE TO
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasAllSOAPActions);   ((( TESTADO OK COM ESSE )))
  //    OR
  //  InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasNamespace);

  try
    try
      wsConsultaCepReq := consultaCEP.Create;
      wsConsultaCepResp := consultaCEPResponse.Create;

      HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
      wsAtendeCliente := GetAtendeCliente(False, '', HTTPRIO1);

      wsConsultaCepReq.cep := edtCep.Text;

      try
        wsConsultaCepResp := wsAtendeCliente.consultaCEP( wsConsultaCepReq );
      except
        on E: ERemotableException do
        begin
          if (UpperCase(Trim(E.message)) = 'CEP NAO ENCONTRADO') or (UpperCase(Trim(E.message)) = 'CEP NAO INFORMADO') then
          begin
            Application.MessageBox(PChar(Format('Atenção! Cep %s não informado/encontrado!', [edtCep.Text])), PChar('Mensagem'), MB_OK + MB_ICONINFORMATION);
            Exit;
          end
          else
          begin
            raise Exception.Create( E.message );
          end;
        end;
      end;

      sEndCep := wsConsultaCepResp.return.cep + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.end_ + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.complemento + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.complemento2 + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.bairro + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.cidade + #13;
      sEndCep := sEndCep + wsConsultaCepResp.return.uf + #13;

      ShowMessage( sEndCep );
    finally
      FreeAndNil(wsConsultaCepReq);
      FreeAndNil(wsConsultaCepResp);
      wsAtendeCliente._Release;
    end

  except
    on E: Exception do
    begin
      Application.MessageBox(PChar(Format('Atenção! %s%s ', [#13#13, E.message])), PChar('Erro'), MB_OK + MB_ICONERROR);
    end;
  end;
end;


Att.

Sandro Lemes
Desenvolvedor Delphi


quando importei o url deu um monte de erro de declaração pode me dizer se houve com voce tambem
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar