Jump to content
Sandro Lemes

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

Recommended Posts

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;

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject); var Qry : TZQuery; begin   Qry:=TZQuery.Create(nil);   Qry.Connection := dm_dados.ZConnection1;  //componente de conexão   Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');   Qry.Open;   if Qry.Locate('USER',Edit1.Text,[]) then   begin     ShowMessage('usuário cadastrado');   end   else   begin     ShowMessage('usuário inexistente');     Edit1.SetFocus;   end;   FreeAndNil(Qry); end;  
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By gabrielmdn
      Boa noite meus amigos.
       
      Estou com um problema enorme aqui. Precisei formatar o PC, e entao fiz um backup de tudo que tenho..normal 
      Quando abri o meu projeto no delphi e pedi para compilar ele parou na linha 114 e começou a aumentar os erros. Deixei por duas horas para ver até onde ia...e continuou
      Não tenho ideia do que esta acontecendo. Se não tivesse forçado a parada forçada nao teria parado até agora. 
       
      Alguem ja passou por isso? Estou bem preocupado, pois isso nunca me aconteceu.

    • By Caio Vargas
      Olá pessoa tudo beleza
      Estou criando um ecommerce porém estou com uma dúvida de como posso calcular o frete altura largura e comprimento de vários produtos no carrinho fiz a comparação do site dos correios e está dando diferença mínima de 4 reais alguém pode me ajudar ?
    • By fernandoxwiggy
      Bom dia,
      Alguém já teve que desenvolver o CIOT da empresa E-frete em C#?
       
      Estou buscando exemplos de como fazer usando o web service deles (http://dev.efrete.com.br/Services/LogonService.asmx).
      Eu acredito que preciso chamar o "login" (depois o logout) dentro desse web service, mas ele é uma interface e não estou achando um exemplo de chamar um procedimento em um web service que seja um interface.
       
      Agradeço desde já se alguém puder ajudar.
    • By Karlo Uchoa
      Boa tarde meus amigos,  Estou implementando uma integração entre um banco de dados local e outro na nuvem da Amazon. Estou com um problema sério aqui: ao fazer o Putclientes, por exemplo, ou seja, ao enviar ao servidor as alterações e inserções do Banco local, se, após um insert em lote na tabela da nuvem, o Result da função Put não conseguir retornar ao cliente rest que o chamou, por uma queda do link de internet, por exemplo, esses inserts já foram commitados na nuvem, mas os relacionamentos entre o código externo gerado e o código interno enviado, não pode ser concebida. Sendo assim, no próximo Put, os clientes sem a relação entre os códigos, serão inseridas novamente, gerando duplicidade de cadastros na nuvem. Meu problema é saber como commitar a transação na nuvem somente após o Result chegar ao cliente rest que fez a chamada. Alguém pode me ajudar com isso?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.