Calculando o Valor do SEDEX com ASP.NET

Postado por Daniel Garcia às 11:37 SÁBADO, 11 DE JULHO DE 2009

Neste post mostrarei um dica que é muito útil principalmente para quem está desenvolvendo um site de e-commerce, o cálculo do valor de envio via SEDEX dos Correios.

Os Correios disponibiliza em seu site uma URL que efetua o calculo prá você. Vou demostrar como implementamos isso dentro do ASP.NET.

Para isso seguiremos os seguintes passos:

1 - Crie um formulário com os seguintes campos: "Serviço", "CEP de Origem", "CEP Destino", "Peso", "Em Mãos", "Valor Declarado" e "Aviso de Recebimento".

A seguir, o Código do formulário:
       ...
      <table cellpadding="0" cellspacing="0">
            <tr>
                  <td>Serviço:&nbsp;&nbsp;</td>
                  <td>
                        <asp:DropDownList ID="ddlServico" runat="server">
                              <asp:ListItem Value="40010">SEDEX</asp:ListItem>
                              <asp:ListItem Value="40215">SEDEX 10</asp:ListItem>
                        </asp:DropDownList>
                  </td>
            </tr>
            <tr>
                  <td>CEP de Origem:&nbsp;&nbsp;</td>
                  <td><asp:TextBox ID="txtCEPOrigem" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                  <td>CEP de Destino:&nbsp;&nbsp;</td>
                  <td><asp:TextBox ID="txtCEPDesino" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                  <td>Peso:&nbsp;&nbsp;</td>
                  <td><asp:TextBox ID="txtPeso" runat="server" Width="80px"></asp:TextBox></td>
            </tr>
            <tr>
                  <td>Em Mãos:&nbsp;&nbsp;</td>
                  <td>
                        <asp:DropDownList ID="ddlEmMaos" runat="server">
                              <asp:ListItem Value="s">Sim</asp:ListItem>
                              <asp:ListItem Value="n">Não</asp:ListItem>
                        </asp:DropDownList>
                  </td>
            </tr>
            <tr>
                  <td>Valor Declarado:&nbsp;&nbsp;</td>
                  <td><asp:TextBox ID="txtValorDeclarado" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                  <td>Aviso Recebimento:&nbsp;&nbsp;</td>
                  <td>
                        <asp:DropDownList ID="ddlAvisoRecebimento" runat="server">
                              <asp:ListItem Value="s">Sim</asp:ListItem>
                              <asp:ListItem Value="n">Não</asp:ListItem>
                        </asp:DropDownList>
                  </td>
            </tr>
            <tr>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
            </tr>
            <tr>
                  <td>&nbsp;</td>
                  <td style="margin-left: 40px">
                        <asp:Button ID="btnCalcular" runat="server" Text="Calcular" onclick="btnCalcular_Click" style="height: 26px" />
                  </td>
            </tr>
            <tr>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
            </tr>
            <tr>
                  <td colspan="2">
                        <asp:Label ID="lblValor" runat="server" style="text-align: center"></asp:Label>
                  </td>
            </tr>
      </table>
       ...

* Observe os valores de cada ListItem dos DropDowLists "ddlServico", "ddlMaoPropria" e "ddlAvisoRecebimento". Eles devem permanecer os mesmo para que a consulta ocorra corretamente.

2 - Implemente o evento Click do botão "btnCalcular".

protected void btnCalcular_Click(object sender, EventArgs e)
{
        try
        {
               HttpWebRequest req;
               HttpWebResponse resp; 
               DataSet ds; 
               StreamReader sr;
// 1 - Atribui os valores dos campos a variáveis
string servico = ddlServico.SelectedValue;
string cepOrigem = txtCEPOrigem.Text;
string cepDestino = txtCEPDesino.Text;
string peso = txtPeso.Text;
string maopropria = ddlEmMaos.SelectedValue;
string avisorecebimento = ddlAvisoRecebimento.SelectedValue;

// 2 - Faz uma requisição a URL passando os valores selecionados via QueryString (resposta em XML)
req = (HttpWebRequest)WebRequest.Create("http://www.correios.com.br/encomendas/precos/calculo.cfm?" +
                                                            "Servico=" + servico + "&cepOrigem=" + cepOrigem + "&cepDestino=" + cepDestino +
                                                            "&peso=" + peso.Replace(",", ".") + "&MaoPropria=" + maopropria + 
                                                            "&AvisoRecebimento=" + avisorecebimento + "&resposta=xml");

// 3 - Armazena a resposta da requisição
resp = (HttpWebResponse)req.GetResponse();

// 4 - Converte a resposta (XML) da requisição para um StreamReader
sr = new StreamReader(resp.GetResponseStream(), System.Text.Encoding.UTF8); ds = new DataSet();

// 5 - Lê o StreamReader (XML) e carrega em um DataSet
ds.ReadXml(sr);

sr.Close();
resp.Close();

// 6 - Verifica se a consulta retornou erro
if (Convert.ToInt32(ds.Tables["erro"].Rows[0]["codigo"]) != 0)
{
      throw new Exception(ds.Tables["erro"].Rows[0]["descricao"].ToString());
}
// 7 - Caso a Consulta não tenha retornado erro, carrega o resultado no Label
else
{
      lblValor.Text = ds.Tables["Dados_Postais"].Rows[0]["preco_postal"].ToString().Replace(".", ",");
}

}
catch (Exception ex)

        lblValor.Text = ex.Message;
}

}

3 - Finalmente, está pronto. Ao clicar no botão "Calcular" o resultado será esse:

E ai, gostaram? Espero que esta dica seja útil prá vocês!

5.0 ponto(s). Avaliado por 2 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

ASP.NET | C# | E-Commerce

Comentários

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Sobre o Autor

Daniel Garcia - MCP, MCTS, MCPD
Meu nome é Daniel Garcia, venho atuando no mercado de tecnologia há mais de uma década. Durante esse tempo tive a oportunidade de trabalhar com diversas tecnologias, principalmente Microsoft. Conquistei os títulos: MCP, MCTS, MCDP e MCT. Desde então, venho contribuindo com toda a Comunidade, divulgando meu conhecimento das tecnologias Microsoft.