ASP.NET é um modelo de desenvolvimento Web unificado que inclui os serviços necessários para você construir aplicações web de nível empresarial com um mínimo de codificação. ASP.NET faz parte do framework .NET , e ao codificar aplicativos ASP.NET você tem acesso as classes no framework .NET. Você pode codificar seus aplicativos em qualquer linguagem compatível com o Common Language Runtime (CLR), inclusive do Microsoft Visual Basic e C#. Estas linguagens permitem você desenvolver aplicações que se beneficiam do ambiente integrado de execução, proteção de tipos, herança, e assim por diante.

     

      È através do ASP.NET que iremos desenvolver um projeto para comunicação com o webservices dos correios. Essa comunicação é muito importa, pois, através dela podemos buscar informações nos correios como :

1 - Cálculo de Frete para SEDEX

2 - Cálculo de Frete para PAC

3 - Prazo de entrega.

      Este projeto pode ser aplicado em lojas virtuais, softwares cliente/servidor e até mesmo disponibilizar para os clientes consultarem essas informações no seu site.

     

      O primeiro passo que deveremos dar para entender um pouco mais sobre o WebService é baixando a documentação no site dos correios, para isso utilize o link do webservice inserido no "para saber mais", através dessa documentação saberemos quais os retornos o Web-Service traz e como faremos para comunicar com ele.

      Recomendo que baixe essa documentação e faça uma leitura para que possam entender melhor o seu funcionamento.

Criando Nosso Projeto no ASP.NET:

      Vamos utilizar o endereço do WebService calcPrecoPrazo e referenciá-lo em nosso projeto.

      Primeiro passo é criar um novo projeto no Visual Studio 2010 (figura01), aqui estou utilizando uma Blank Solutions (figura02), ou seja, um projeto em branco, onde irei adicionar outro projeto dentro. Esse método é muito eficiente e organizado, pois, através dele eu posso adicionar e gerenciar vários projetos.

 Marcos Alexandre de Souza - Calculo Frete

Figura 01 - Criando novo projeto

 

Figura 02 - Escolhendo tipo de projeto

      Feito a criação de nossa blank solutions, vamos agora adicionar um novo projeto ASP.NET Web  Applications, conforme exemplo abaixo. O nome do projeto e da página vocês fiquem a vontade para determina-los.

 

 

     

       Com o projeto criado, vamos trabalhar com a página que irá receber os dados de entrada e exibir o nosso calculo de frete. Nesse exemplo iremos calcular o sedex e o PAC. A imagem abaixo ilustra a nossa página, esse modelo é apenas para explicar como funcionam os cálculos de frete dos correios.

     

       Iremos informar para o webservice o valor do produto, cep de origem, cep de destino, peso do produto, comprimento da embalagem, altura da embalagem, largura da embalagem e caso haja o diâmetro você poderá informar.  Após essas informações iremos clicar no botão calcular frete e nossas páginas irão calcular o valor do sedex, PAC e o prazo de entrega do produto.


      Para que isso tudo funcione, vamos adicionar a referencia do webservice dos correios em nosso projeto. A imagem abaixo ilustra a referência feita ao webservice.

   

 

      Bom, nossa página foi criada fizemos referência ao webservice, agora vamos programa o botão calcular frete.

     Vamos criar um método privado chamado ConsultaWebServiceCorreios, esse método fará a comunicação com o serviço dos correios e nos retornará o preço cobrado para envio do SEDEX e do PAC.

      O código abaixo está comentado facilitando para você o entendimento de cada linha de código.

private decimal ConsultaWebServiceCorreios(string nuCepDestino, int Servico, decimal nVlComprimento, decimal nVlAltura, decimal nVlLargura, decimal nVlDiametro, decimal nuPeso)

        {

 

            string nuCep = "35164383";

            TxtCidadeOrigem.Text = "Ipatinga";

 

            // Dados da empresa, se tiver contrato com os Correios

            string nCdEmpresa = string.Empty;

            string sDsSenha = string.Empty;

 

            // Código do tipo de frete – Sedex ou PAC

            string nCdServico = Servico.ToString();

           

            // Cep de origem e destino - apenas números

            string sCepOrigem = nuCep;

            string sCepDestino = nuCepDestino.Replace(".", "").Replace("-", "").Replace("/", "");

           

            // Peso total da encomenda

            string nVlPeso = nuPeso.ToString();

           

            // Formato da encomenda

            int nCdFormato = 1; //Caixa

 

            // Informa se é por mão própria

            string sCdMaoPropria = "N";

           

            // Valor declarado

            decimal nVlValorDeclarado = 0; //não informado - padrao

 

            // Se desejo receber aviso de recebimento

            string sCdAvisoRecebimento = "N"; //por padrao não

 

 

            // Instância o WebService

            Correios.CalcPrecoPrazoWS webServiceCorreios = new Correios.CalcPrecoPrazoWS();

 

 

            // Efetua a requisição

            Correios.cResultado retornoCorreios = webServiceCorreios.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura, nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

 

 

            // Verifica se há retorno

            if (retornoCorreios.Servicos.Length > 0)

            {

                // Se deu tudo certo, então retorna o valor

                if (retornoCorreios.Servicos[0].Erro == "0")

                {

                    LblPrazoEntrega.Text = retornoCorreios.Servicos[0].PrazoEntrega.ToString() + " dia(s).";

                    return decimal.Parse(retornoCorreios.Servicos[0].Valor.ToString());

                }

                else

                {

                    LblMensagem.Text = retornoCorreios.Servicos[0].MsgErro;

                    return 0;

                }

            }

            else

            LblMensagem.Text = "NÃO FOI POSSÍVEL CONSULTAR O SERVIÇO DESEJADO!";

            return 0;

 

        }

 

      Agora o código para o botão de calcular o frete:

       protected void BtnCalcularFrete_Click(object sender, EventArgs e)

        {

            CalculaFrete();

        }

 

        private void CalculaFrete()

        {

            if (TxtValorProduto.Text == string.Empty)

            {

                LblMensagem.Text = "Para calcular o frete é necessário informar o valor do produto.";

                return;

            }

 

            LblMensagem.Text = string.Empty;

 

            string nuCep = TxtCepDestino.Text;

 

            decimal VlProduto = decimal.Parse(TxtValorProduto.Text.ToString().Replace("R$", ""));

 

            if (nuCep == string.Empty)

            {

                LblMensagem.Text = "Digite o número do cep.";

                return;

            }

 

            if (nuCep.Length < 8)

            {

                LblMensagem.Text = "Cep de destino é inválido.";

                return;

            }

 

            //Calcula o Valor do Frete, sistema verifica o tamanho das caixas para fazer cálculo.

 

            decimal ValorPac = 0;

            decimal ValorSedex = 0;

            decimal nVlComprimento = 0;

            decimal nVlAltura = 0;

            decimal nVlLargura = 0;

            decimal nVlDiamentro = 0;

 

 

            nVlComprimento = decimal.Parse(TxtComprimento.Text);

            nVlAltura = decimal.Parse(TxtAltura.Text);

            nVlLargura = decimal.Parse(TxtLargura.Text);

            nVlDiamentro = decimal.Parse(TxtDiamentro.Text);

 

            ValorSedex = decimal.Parse(ConsultaWebServiceCorreios(TxtCepDestino.Text, 40010, nVlComprimento, nVlAltura, nVlLargura, nVlDiamentro, decimal.Parse(TxtPeso.Text)).ToString());

            ValorPac = decimal.Parse(ConsultaWebServiceCorreios(TxtCepDestino.Text, 41106, nVlComprimento, nVlAltura, nVlLargura, nVlDiamentro, decimal.Parse(TxtPeso.Text)).ToString());

 

            TxtSedex.Text = ValorSedex.ToString();

            TxtPac.Text = ValorPac.ToString();

 

        }

 

 

     Feito os procedimentos acima mencionados, teremos o resultado conforme a imagem abaixo.

     Veja que o webservice retornou para nossa página o valor do sedex e do PAC e também quantos dias para entrega dessa encomenda.


     

      Para podermos conferir se os valores retornados estão mesmo corretos, vamos entrar no site dos correios através e preencher as mesmas informações que fornecemos para nossa página. Vendo nas imagens abaixo, podemos comprovar que nosso calculo de frete está correto, agora é só adicionar em seus projetos e boa sorte.

 

 

   

 

      O artigo explica de forma clara e objetiva como fazer acesso ao webservice dos correios e retornar as informações de cálculos de fretes para Sedex e Pac, como também o prazo de entrega. Além você tem uma visão de como trabalhar com WebServices e poderá aplicar em outros tipos de projetos que tenham necessidade de ler WebService. Qualquer dúvida você poderá entrar no DevBrasil e postar seus comentários.

 

Para saber mais

Aprofunde seus conhecimentos na comunidade de Asp.Net

Conheça o MID (Most Influential Developer) e faça parte desse time
Blog ThiagoMarcal
Correios

MSDN

WebService Correios

CalculoPreçoPrazo

Prazo via correios

Exibições: 2132

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de Sérgio Barros em 9 junho 2014 às 13:14

Marcos, boa tarde! ótimo post mais as imagens não estão disponíveis, você poderia disponibilizar o código fonte de exemplo ?

Desde já agradeço.

Comentário de Marcos Alexandre de Souza em 26 outubro 2012 às 8:03

Valeu Ezequiel. obrigado pelo comentário.

Comentário de Ezequiel da Silva Daniel em 26 outubro 2012 às 0:04

Show de bola, obrigado pelo post... valeu!

Comentário de Felipe C de Jesus em 28 setembro 2012 às 12:34

Marcos, show de bola !! Muito bacana :)

Comentário de Igor Waterloo em 14 agosto 2012 às 20:54

Massa, parabens !!

Comentário de Marcos Alexandre de Souza em 5 agosto 2012 às 14:47

Valeu, Thiago.

Comentário de Thiago Lunardi em 3 agosto 2012 às 9:09

Muito bacana, Marcos!

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço