Olá, neste post irei explicar como calcular o frete em uma aplicação simples em ASP.NET usando um determinado peso, local de origem e local de destino, como precisei fazer isso para uma loja virtual que eu estou adaptando, achei que seria interessante compartilhar, só gostaria de salientar que este exemplo é só para você entender o conceito, não significa que você precisa necessariamente fazer da mesma forma, bom, vamos ao que interessa.
Antes de tudo peço que dêem uma olhada no seguinte documento fornecido pelo site dos correios.
SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.pdf
assim vocês ficarão familiarizados com os parâmetros que devem ser passados para o webService.
1 – Primeiramente vamos criar um novo projeto do tipo ASP.NET WebApplication com o nome de TestandoWebServiceCorreios, conforme a imagem abaixo:
2 – Após isso vamos clicar com o botão direito em cima do projeto e escolher a opção Add Web Referente e adicionar o endereço abaixo:
http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx
feito isso clique em GO, se quiser, mude o nome da referência, eu modifiquei para Correios.
3 – Após isso crie uma pasta chamada Lib, dentro do seu projeto, clicando em cima do projeto e selecionando a opção New Folder.
4 – Dentro da pasta Lib, vamos criar um nova classe, que vai se chamar ConsultaCorreios. (clicar com o botão direito, Add > Class)
5 – dentro desta classe vamos criar algums atributos que representam os parâmetros que devem ser passados para o método no webservice, mas, antes disso vamos criar 2 Enums, para representar o código do serviço e o formato da encomenda, conforme imagem abaixo.
[hr]
6 – Após isso vamos definir os atributos da nossa classe ConsultaCorreios conforme imagem abaixo.
Vocês devem ter reparado que criei os atributos como privados, isso não será problema, pois iremos criar agora as propriedades desses atributos, para isso basta selecionar a linha do atributo, clicar com o botão direito escolher a opção refactor e clicar em Encapsulate Field, escolha o nome da propriedade, eu geralmente deixo o mesmo nome que o Visual Studio sugere, damos OK e depois Apply, deste modo estamos usando um dos conceitos chave da POO que é o encapsulamento.
7 – Feito isto vamos partir para o próximo passo, vamos criar um método na nossa classe, esse método vai se chamar ValorServico e vai nos retornar uma string que será o valor do serviço, ou seja, o valor do nosso frete.
implemente conforme imagem abaixo:
Agora vamos a algumas explicações.
– Ao passar os parâmetros para o método do webservice após instanciá-lo, como estou passando o nosso enum cdServico como parâmetro e o parâmetro recebe uma string, é necessário eu convertê-lo para Inteiro e depois converter para string, caso eu converta para string direto o valor não vai ser o que o método espera, exemplo: se eu chamo o cdServico.PacSemContrato.toString() o resultado vair ser = PacSemContrato e se eu faço o Convert.ToInt23(cdServico.PacSemContrato) o resultado vai ser o código que o método espera, só que no formato inteiro, portanto, após obter o valor eu converto para string.
mesma coisa com o mesma coisa ao passar o Enum formatoEncomenda, porém como o método recebe um inteiro eu só precisei converter para inteiro direto.
mais embaixo fazemos uma checagem da nossa requisição, se retornou count maior do que zero fazemos a checagem para retornar o valor.
Dito isso vamos na Solution Explorer, clicar com o botão direito no arquivo Default.aspx que foi gerado quando criamos o WebSite e selecionar a opção View Designer, após isso, arraste um label, um button e um textbox para a página, organize do jeito que quiser, vamos colocar o nome do botão de btnOK e do textbox vamos deixar textbox1 mesmo.
após isso dê dois cliques no botão que será criado o evento OnClick do mesmo, vamos adicionar o seguinte trecho lá em cima na using para termos acesso a classe ConsultaCorreios.
using TestandoWebServiceCorreios.Lib;
feito isso, vamos implementar conforme imagem abaixo.
como vocês podem ver, como o método já está totalmente definido dentro da classe, eu só preciso ter o trabalho de popular os atributos, e depois atribuir o retorno a algum lugar, obviamente em uma aplicação de produção, eu teria um tratamento de erros elaborado e passaria valores dinâmicos para a classe, baseado em dados do meu cliente, para ver o retorno, basta executar a aplicação e clicar no botão OK, modifique os valores para ver os diferentes resultados, enfim, espero que este post tenha ajudado em alguma coisa e qualquer dúvida quanto a implementação do mesmo, basta deixa um comentário, que eu responderei ASAP, abaixo deixo o link para download da solução