Consulta CEP, entre outros serviços, diretamente no webService dos Correios

23/07/2018

0

Bom dia Galera!



Ha poucos dias descobri uma maneira nativa e sem precisar de instalar DLLs, componentes infinitos(Deus me livre)... e achei interessante postar (Estou em processo de mudança mental e compartilhar coisas difíceis é um começo! rsss)!



Então...vamos lá! Segue abaixo uma maneira nativa e fácil de consultar CEPS nos correios! Espero que gostem!







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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar