Código Fonte - O melhor conteúdo para programadores

ASP / Diversos

Calcular SEDEX em tempo real pelos Correios


enviado por Gabriel Fróes
Com esta classe é possível calcular em tempo real (online) o valor do SEDEX entre 2 CEPs através do site dos Correios.

Esta classe suporta os seguintes serviços:

- SEDEX
- SEDEX Hoje
- SEDEX 10
- SEDEX a Cobrar

Este código é muito útil para sites de comércio eletrônico.
<%
'=======================================================
'CLASSE SEDEX
'=======================================================
Class Sedex
   '-----------------------------------------------------
   'Funcao: doCalculoSedex(ByVal ServicoCodigo, ByVal CepOrigem, ByVal CepDestino, ByVal Peso, ByVal MaoPropria, ByVal ValorDeclarado, ByVal AvisoRecebimento)
   'Sinopse: Retorna Lista de Indicadores Financeiros
   'Parâmetros:
   '   ServicoCodigo: Código do tipo de entrega que será calculada
   '               O valores possíveis são:
   '               - 40010 (SEDEX)
   '               - 40290 (SEDEX Hoje)
   '               - 40215 (SEDEX 10)
   '               - 40045 (SEDEX a Cobrar)
   '               Valor padrão é: 40010 
   '   CepOrigem: Cep de Origem no formato XXXXX-XXX
   '   CepDestino: Cep de Destino no formato XXXXX-XXX
   '   Peso: Peso da remessa limite de 30
   '   MaoPropria: Serviço de Mão Própria(S/N)
   '            Valor padrão é: N
   '   ValorDeclarado: Serviço de seguro com valor declarado
   '   AvisoRecebimento: Serviço de Aviso de Recebimento(S/N)
   '            Valor padrão é: N
   'Retorno: Objeto SedexInfo
   'Autor: Gabriel Fróes - www.codigofonte.com.br
   '-----------------------------------------------------
   Function doCalculoSedex(ByVal ServicoCodigo, ByVal CepOrigem, ByVal CepDestino, ByVal Peso, ByVal MaoPropria, ByVal ValorDeclarado, ByVal AvisoRecebimento)
      'Declaração das variáveis/objetos
       Dim Retorno
       Dim URL
       Dim objXmlHttp
       Dim objXmlDoc
       'Inicialização dos objetos/variáveis
       Set objXmlHttp      = Server.CreateObject("MSXML2.XMLHTTP")
       Set objXmlDoc      = Server.CreateObject("MSXML2.DOMDocument")
       Set doCalculoSedex   = New SedexInfo
       
       'Validando as variáveis
       If ServicoCodigo = "" Then
         ServicoCodigo = 40010
      End If
      Peso = Replace(Peso, ",", ".")
      If MaoPropria = "" Then
         MaoPropria = "N"
      End If
      ValorDeclarado = Replace(ValorDeclarado, ",", ".")
      If AvisoRecebimento = "" Then
         AvisoRecebimento = "N"
      End If
      
       'Montando a URL para busca no site
       URL =      "http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=Xml"
       URL = URL & "&servico="            & ServicoCodigo
       URL = URL & "&cepOrigem="         & CepOrigem
       URL = URL & "&cepDestino="         & CepDestino
       URL = URL & "&peso="            & Peso
       URL = URL & "&MaoPropria="         & MaoPropria
       URL = URL & "&valorDeclarado="      & ValorDeclarado
       URL = URL & "&avisoRecebimento="   & AvisoRecebimento
      objXMLHttp.Open "GET", URL, False
      objXMLHttp.Send
      'Verificando se a busca foi bem sucedida
      If objXmlHttp.statusText = "OK" Then
         objXmlDoc.loadXML(objXmlHttp.responseText)      
         'Verificando se o retorno foi bem sucediido
         If TypeName(objXmlDoc) = "DOMDocument" Then
            doCalculoSedex.Versao            = objXmlDoc.selectSingleNode("//calculo_precos//versao_arquivo").text
            doCalculoSedex.ServicoCodigo      = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//servico").text
            doCalculoSedex.ServicoNome         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//servico_nome").text
            doCalculoSedex.UFOrigem            = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//uf_origem").text
            doCalculoSedex.LocalOrigem         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//local_origem").text
            doCalculoSedex.CEPOrigem         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//cep_origem").text
            doCalculoSedex.UFDestino         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//uf_destino").text
            doCalculoSedex.LocalDestino         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//local_destino").text
            doCalculoSedex.CEPDestino         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//cep_destino").text
            doCalculoSedex.Peso               = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//peso").text
            doCalculoSedex.MaoPropria         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//mao_propria").text
            doCalculoSedex.AvisoRecebimento      = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//aviso_recebimento").text
            doCalculoSedex.ValorDeclarado      = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//valor_declarado").text
            doCalculoSedex.TarifaValorDeclarado   = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//tarifa_valor_declarado").text
            doCalculoSedex.PrecoPostal         = objXmlDoc.selectSingleNode("//calculo_precos//dados_postais//preco_postal").text
            doCalculoSedex.ErroCodigo         = objXmlDoc.selectSingleNode("//calculo_precos//erro//codigo").text
            doCalculoSedex.ErroDescricao      = objXmlDoc.selectSingleNode("//calculo_precos//erro//descricao").text
         Else
            doCalculoSedex.ErroCodigo = "1001"
            doCalculoSedex.ErroDescricao = "Não foi possível consultar à base dos correios neste momento."
         End If
      Else
         doCalculoSedex.ErroCodigo = objXmlHttp.status
         doCalculoSedex.ErroDescricao = objXmlHttp.statusText
      End If
    
       'Destruindo os objetos
       Set objXmlDoc   = Nothing
       Set objXmlHttp   = Nothing
   End Function
End Class

'-----------------------------------------------------
'Classe com os Atributos do Sedex
'-----------------------------------------------------
Class SedexInfo
   Public Versao
   Public ServicoCodigo
   Public ServicoNome
   Public UFOrigem
   Public LocalOrigem
   Public CEPOrigem
   Public UFDestino
   Public LocalDestino
   Public CEPDestino
   Public Peso
   Public MaoPropria
   Public AvisoRecebimento
   Public ValorDeclarado
   Public TarifaValorDeclarado
   Public PrecoPostal
   Public ErroCodigo
   Public ErroDescricao
End Class

'-----------------------------------------------------
'EXEMPLO DE CHAMADA
'-----------------------------------------------------
Dim objSedex
Dim objInfo
Set objSedex = New Sedex
Set objInfo = New SedexInfo
Set objInfo = objSedex.doCalculoSedex("", "02401-200", "90110-170", 30, "N", "", "N")
If objInfo.ErroCodigo = "0" Then
   Response.Write "Serviço: <b>" & objInfo.ServicoNome & "</b><br />"
   Response.Write "UF Origem: <b>" & objInfo.UFOrigem & "</b><br />"
   Response.Write "Local Origem: <b>" & objInfo.LocalOrigem & "</b><br />"
   Response.Write "CEP Origem: <b>" & objInfo.CEPOrigem & "</b><hr />"
   Response.Write "UF Destino: <b>" & objInfo.UFDestino & "</b><br />"
   Response.Write "Local Destino: <b>" & objInfo.LocalDestino & "</b><br />"
   Response.Write "CEP Destino: <b>" & objInfo.CEPDestino & "</b><hr />"
   Response.Write "Peso: <b>" & objInfo.Peso & "</b><br />"
   Response.Write "Mao Propria: <b>" & objInfo.MaoPropria & "</b><br />"
   Response.Write "Valor Declarado: <b>" & objInfo.ValorDeclarado & "</b><br />"
   Response.Write "Tarifa Valor Declarado: <b>" & objInfo.TarifaValorDeclarado & "</b><br />"
   Response.Write "Preço Postal: <b>" & objInfo.PrecoPostal & "</b><br />"
Else
   Response.Write objInfo.ErroDescricao
End If
Set objInfo = Nothing
Set objSedex = Nothing
%>


Versão impressa gerada em: sábado, 7 de novembro de 2009

© Copyright 2006 - R&W Consulting.