Ir para conteúdo
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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por amauri.alves
      Boa tarde,
      Preciso converter um código que está em Java para usar no delphi. este código criptografa uma senha.

      Alguém consegue converter este código para pascal pois eu conhecimento em java é bem próximo de zero:

      import java.util.Base64;
      import javax.crypto.Cipher;
      import javax.crypto.spec.IvParameterSpec;
      import javax.crypto.spec.SecretKeySpec;

      public class Cryptography
      {
      private static String key = "G!P@4#1$1%M4SC4D";
      private static String iv = "C#&UjO){QwzFcsPs";

      public static String encrypt(String plainText) throws Exception
      {
      byte[] plainTextbytes = plainText.getBytes("UTF-8");
      byte[] keyBytes = key.getBytes("UTF-8");
      byte[] ivBytes = iv.getBytes("UTF-8");
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      SecretKeySpec secKey = new SecretKeySpec(keyBytes, "AES");
      cipher.init(Cipher.ENCRYPT_MODE, secKey, new IvParameterSpec(ivBytes));
      return Base64.getEncoder().encodeToString(cipher.doFinal(plainTextbytes));
      }
      }
      obrigado;  
    • Por amauri.alves
      Boa noite,
      Estou desenvolvendo uma interface que precisa acessar um webservice fornecido pelo meu cliente e trazer dele uma série de informações, o cliente me disponibilizou a documentação do web servisse, o problema é que eu nunca desenvolvi nada acessando webservice, alguém pode me dar uma ajuda sobre o que eu preciso para buscar as informações que eu preciso.

      O Meu ambiente é o seguinte:
      Windows 10
      Delphi xe8

      Obrigado.
    • Por MarcosPeixoto
      Olá, 
       
      De um tempo para cá, ao compilar o sistema em modo debug, passou a demorar bastante para abrir a aplicação, o que torna bastante improdutivo quando existe a necessidade de depurar processos. 
       
      Utilizo o Delphi Berlim, Update 1, instalei o IDE Fix e FastDCC64 que teoricamente corrige bugs e otimiza carregamento do delphi. 
      Utilizo componentes de terceiros como ACBr, FastReports, GExperts, JEDI, TMS, ActiveQueryBuilder, etc... 
      O Sistema Operacional é Win 10, atualizado com versão 1803, Core i5, 8Gb, HD SSD. 
      Minha estrutura é multicamadas, e no caso o servidor já está levantado. 
       
      Monitorando no "Event Log" do delphi ao compilar, são apresentadas várias mensagens de carregamento de recursos de dlls e é nesse ponto que há uma lentidão enorme. 
      São apresentadas mensagens "Module Load: " + nome da dll + " No Debug Info". Segue algumas linhas que são apresentadas como exemplo: 
       
       
      Notei que algumas dessa dlls são apresentadas mais de uma vez, me parecendo fazer carregamento das mesmas coisas repetidas vezes, suponho ser uma anormalidade. 
      Para se ter uma idéia, para um dos meus menores módulos, o executável compilado em debug fica com cerca de 100Mb e leva aproximadamente 6 minutos para ser gerado. 
      O mesmo executável compilado em modo release, fica com 8.8Mb, e leva menos de 1 minuto para ser gerado. 
       
      Não consegui identificar ainda as causas disso. Alguém passou por essa situação ou tem alguma sugestão? 
       
      Marcos
    • Por tiago_pimenta
      Pessoal, bom dia, tudo bem ?
       
      Pesquisei aqui no fórum mas não achei nada parecido com o que eu preciso. 
       
      Hoje eu tenho o seguinte cenário, na empresa que eu trabalho, eles utilizam o Delphi 10 Seattle e a um tempo atrás eles fizeram "backup" das configurações do Delphi via Registro do Windows "regedit". Assim que comecei na empresa, me entregaram um notebook que já era usado por um outro colaborador, porém assim que loguei com o meu usuário no notebook, a configuração do Delphi ficou zerada... Rodei dois arquivos do regedit e os componentes apareceram normalmente no Delphi. Porém, os caminhos dos componentes e dos projetos, são C:\ComponentesD10 e C:\Projetos respectivamente.

      Pois bem, o meu problema é o seguinte, quero configurar o meu notebook pessoal para poder rodar os sistemas eventualmente quando precisar a noite ou no final de semana, ou se eu conseguir, queria até usar o meu notebook pessoal na empresa, pois o note da empresa é inferior ao meu, mas o problema é que eu não gostaria de usar os caminhos dos componentes e dos projetos "C:\ComponentesD10" e "C:\Projetos". Já tentei fazer a instalação normal dos componentes, sem usar os arquivos do regedit, porém tem alguns componentes que não estou conseguindo instalar, e para melhorar a minha situação, o componente UserControl por exemplo, já foi modificado, então se eu instalar o UserControl original, terei problemas.

      A minha dúvida então é a seguinte, estou pensando em criar uma VM, instalar o Delphi e "instalar" os componentes usando o arquivo regedit, mas depois, mudar o caminho da pasta onde eles estão e gerar novamente esses arquivos do "regedit" para fazer a instalação na maquina física já com o caminho que eu quero... Tem alguma forma de fazer isso ? É só mudar o "Library path" ?

      Obrigado

      Att.
      Tiago Pimenta
    • Por kathsystems
      Olá,
       
      Pessoal estou tentando criar um arquivo xml em tempo de execução no Android: "CliendDataSet.SaveToFile('/data/data/App/files/Arquivo.xml');" .Não da erro mas não cria o arquivo.
       
      Meu Mainfast:
       
      <?xml version="1.0" encoding="utf-8"?>
      <!-- BEGIN_INCLUDE(manifest) -->
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="%package%"
              android:versionCode="%versionCode%"
              android:versionName="%versionName%"
              android:installLocation="%installLocation%">
          <!-- This is the platform API where NativeActivity was introduced. -->
          <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
          String[] permissoes = new String[]{
              Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS,};
              PermissionUtils.validate(this, 0, permissoes);
      <%uses-permission%>
          <uses-permission android:name="android.permission.INTERNET" />
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
          <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
          <uses-permission android:name="android.permission.READ_OWNER_DATA" />
          <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
          <application android:persistent="%persistent%"
              android:restoreAnyVersion="%restoreAnyVersion%"
              android:label="%label%"
              android:debuggable="%debuggable%"
              android:largeHeap="%largeHeap%"
              android:icon="%icon%"
              android:theme="%theme%"
              android:hardwareAccelerated="%hardwareAccelerated%">
       
      alguém sabe onde estou errando?
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.