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 felk_fel@hotmail.com
      Boa tarde a todos!

      De vez em quando, acontece isso comigo, o Delphi compila a aplicação mas ela não roda ou fecha sozinha...Para resolver eu estou sempre tendo que fechar o delphi e criar uma nova aplicação. Alguém poderia me ajudar conforme o vídeo abaixo?

      https://www.youtube.com/watch?v=cFBJSS5yTN8

      Agradeço pela atenção.
    • Por IgorWeldt
      Bom dia, galera.
       
      Essa é a minha primeira postagem 
       
      Seguinte, estou desenvolvendo um website simples de compra, onde o usuário fará o pagamento pela API do PagSeguro, o problema é que não estou conseguindo usar a calculadora de frete do Correios.
       
      Encontrei diversos códios prontos pela internet, porém, nenhum funciona.
       
      Minha página fica carregando e não sai disso.
       
      Falta basicamente isso para finalizar o projeto, alguém pode me dar uma luz?
       
      <?php $parametros = array(); // Código e senha da empresa, se você tiver contrato com os correios, se não tiver deixe vazio. $parametros['nCdEmpresa'] = ''; $parametros['sDsSenha'] = ''; // CEP de origem e destino. Esse parametro precisa ser numérico, sem "-" (hífen) espaços ou algo diferente de um número. $parametros['sCepOrigem'] = '81810110'; $parametros['sCepDestino'] = '80050530'; // O peso do produto deverá ser enviado em quilogramas, leve em consideração que isso deverá incluir o peso da embalagem. $parametros['nVlPeso'] = '1'; // O formato tem apenas duas opções: 1 para caixa / pacote e 2 para rolo/prisma. $parametros['nCdFormato'] = '1'; // O comprimento, altura, largura e diametro deverá ser informado em centímetros e somente números $parametros['nVlComprimento'] = '16'; $parametros['nVlAltura'] = '5'; $parametros['nVlLargura'] = '15'; $parametros['nVlDiametro'] = '0'; // Aqui você informa se quer que a encomenda deva ser entregue somente para uma determinada pessoa após confirmação por RG. Use "s" e "n". $parametros['sCdMaoPropria'] = 'n'; // O valor declarado serve para o caso de sua encomenda extraviar, então você poderá recuperar o valor dela. Vale lembrar que o valor da encomenda interfere no valor do frete. Se não quiser declarar pode passar 0 (zero). $parametros['nVlValorDeclarado'] = '200'; // Se você quer ser avisado sobre a entrega da encomenda. Para não avisar use "n", para avisar use "s". $parametros['sCdAvisoRecebimento'] = 'n'; // Formato no qual a consulta será retornada, podendo ser: Popup – mostra uma janela pop-up | URL – envia os dados via post para a URL informada | XML – Retorna a resposta em XML $parametros['StrRetorno'] = 'xml'; // Código do Serviço, pode ser apenas um ou mais. Para mais de um apenas separe por virgula. $parametros['nCdServico'] = '40010,41106'; $parametros = http_build_query($parametros); $url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx'; $curl = curl_init($url.'?'.$parametros); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $dados = curl_exec($curl); $dados = simplexml_load_string($dados); ?> <html> <head> <title>Frete Correios Testes</title> </head> <body> <h1>Calculadora de frete dos Correios</h1> <?php foreach($dados->cServico as $linhas) { if($linhas->Erro == 0) { echo $linhas->Codigo.'</br>'; echo $linhas->Valor .'</br>'; echo $linhas->PrazoEntrega.' Dias </br>'; }else { echo $linhas->MsgErro; } echo '<hr>'; } ?> </body> </html>  
      Obrigado à todos!
    • Por Felipe Garciax
      Ola,
       
      Estou com o seguinte problema, no formulario principal do meu projeto tenho um SplitView e um Image em AlClient com uma imagem em 193 kb, ao abrir e fechar o SplitView em execucao a imagem PISCA, ja usei no OBJECT INSPECTOR o DoubleBuffered em TRUE tanto para o form quanto para o SplitView e o problema persiste, ja fiz o teste no codigo tanto para o EVENTO OnShow e OnCreat:
      DoubleBuffered :=True;  e nenhum resultado... Help Me
    • Por ericborrero
      Boa Noite a todos ....
       
      aguem pode me ajudar com esse código.... preciso que ele procure o menor valor e não o maior como esta aqui
       
       
       
      Procedure TfrmAvaliacao.PiorTempo;
      var
        ArrayString: Array [1 .. 5] of string;
        PiorTempo: string;
        i: Integer;
      begin
        ArrayString[1] := dbtext2.Caption;
        ArrayString[2] := dbtext4.Caption;
        ArrayString[3] := dbtext6.Caption;
        ArrayString[4] := dbtext8.Caption;
        ArrayString[5] := dbtext10.Caption;
        PiorTempo := EmptyStr;
          for i := low(ArrayString) to high(ArrayString) - 1 do
          if PiorTempo < ArrayString then
            PiorTempo := ArrayString;

        Label210.Caption := PiorTempo;
       
      end;
       
    • Por Remeling
      Ola pessoal,
      Estou fazendo um sistema web em Delphi xe8 Intraweb, coloco os objetos no form e quando vou compilar o sistema, aparece somente a pagina em branco, o que estou fazendo errado.
×

Informação importante

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