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

Web service

Delphi

08/02/2018

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

Curtidas 3

Melhor post

Luciano Peçanha

Luciano Peçanha

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?
GOSTEI 1

Mais Respostas

Paulo Freire

Paulo Freire

08/02/2018

Excelente Sandro, gostei da sua simplificação, parabéns, show de bola.
GOSTEI 0
Amilton Machado

Amilton Machado

08/02/2018

consultaCEP e consultaCEPResponse são classes criadas?

Você tem o código fonte para disponibilizar?
GOSTEI 0
Sandro Lemes

Sandro Lemes

08/02/2018

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
GOSTEI 0
Solange Silva

Solange Silva

08/02/2018

Estou com mesmo problema do Luciano.
Delphi 10.3 community.
GOSTEI 0
Socrates Foschera

Socrates Foschera

08/02/2018

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
GOSTEI 0
POSTAR