Muito utilizado, principalmente, em lojas virtuais, o c??lculo de frete ?? uma funcionalidade bastante importante para todo e qualquer sistema. Nesse artigo veremos como usufruir do Web-Service dos Correios e fazer o c??lculo de frete para um determinado peso, local e tipo de frete. Pelo Web-Service ?? poss??vel consultar SEDEX, e-SEDEX e PAC. Lembrando que, para o tipo e-SEDEX e outros, a empresa deve ter um contrato com os Correios para utilizar essa modalidade. Isso ser?? mostrado como informar o login dos Correios antes de fazer a consulta.
Antes de come??ar, veja abaixo as formas de consulta que os Correios disp??e (retirado do site):
Forma de acesso e resposta | Defini????o | Exemplos de uso | Protocolos de Acesso e de Resposta |
---|---|---|---|
Webservice | A consulta utiliza a tecnologia webservices ??? cole????o de protocolos e padr??es usados para troca de informa????es entre aplica????es Internet. | Lojas virtuais Sistemas corporativos |
Acesso e resposta via XML, SOAP e WSDL – protocolos dewebservices |
Resultado XML | A consulta retorna os dados em formato XML, para livre tratamento das informa????es pelo cliente. | Lojas virtuais Sites de empresas |
Acesso via post Resposta padr??o XML |
Resultado p??gina do cliente | A consulta transfere as informa????es de resposta para uma p??gina do cliente, por ele especificada. | Sites de empresas | Acesso via post Resposta via get |
Resultado p??gina dos Correios | A resposta vem numa p??gina dos Correios, em formato de p??gina pop-up. | Call-centers | Acesso via post Resposta em p??gina dos Correios |
Conforme explicado, vamos utilizar o Web-Service para consumir e obter a resposta desejada. Nesse link tem o manual com maiores detalhes acerca do uso. Vamos a implementa????o!
Crie/Abra um Web Site e clique com o direito sobre o projeto para abrir o menu. Escolha a op????o Add Web Reference… .
Informe a URL http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx e clique em Go. Aguarde a realiza????o da busca pelo Web-Service, renomeie o servi??o (caso deseje) e escolha Add Reference.
Veja que em seu projeto ir?? surgir uma pasta nova denominada App_WebReferences e seu web.config ter?? uma nova entrada. Agora, preparemos o seguinte m??todo (s??o apenas sugest??es, pode melhor??-la ou adequar a sua necessidade):
private string ConsultaWebService()
{
// Dados da empresa, se tiver contrato com os Correios
string nCdEmpresa = string.Empty;
string sDsSenha = string.Empty;
// C??digo do tipo de frete – por padr??o deixei o SEDEX
string nCdServico = “40010”;
// Cep de origem e destino – apenas n??meros
string sCepOrigem = “40280000”;
string sCepDestino = “40280000”;
// Peso total da encomenda – por padr??o deixei 1kg
string nVlPeso = “1”;
// Formato da encomenda – por padr??o deixei caixa
int nCdFormato = 1;
// Para encomenda do tipo PAC, deve-se preencher a dimens??o da embalagem
decimal nVlComprimento = 0;
decimal nVlAltura = 0;
decimal nVlLargura = 0;
decimal nVlDiametro = 0;
// Informa se ?? por m??o pr??pria – por padr??o deixei N??o
string sCdMaoPropria = “N”;
// Valor declarado – por padr??o n??o informo
decimal nVlValorDeclarado = 0;
// Se desejo recebr aviso de recebimento – por padr??o n??o quero
string sCdAvisoRecebimento = “N”;
// Instancio o web-service
Correios.CalcPrecoPrazoWS webServiceCorreios = new Correios.CalcPrecoPrazoWS();
// Efetuo a requisi????o
Correios.cResultado retornoCorreios = webServiceCorreios.CalcPrecoPrazo(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura, nVlLargura, nVlDiametro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);
// Verifico se h?? retorno
if (retornoCorreios.Servicos.Length > 0)
{
// Se deu tudo certo, ent??o retorna o valor
if (retornoCorreios.Servicos[0].Erro == “0”)
return “R$ “ + retornoCorreios.Servicos[0].Valor;
else
return retornoCorreios.Servicos[0].MsgErro;
}
else
return “N??O FOI POSS??VEL CONSULTAR O SERVI??O DESEJADO!”;
}
No caso, o array de servi??os veio apenas um pois informando na vari??vel nCdServico que era para consultar apenas SEDEX. Pode ser mais de um numa consulta separados por v??rgula, exemplo “40010,81019”.
A tabela de servi??os dispon??veis s??o:
C??digo Servi??o
41106 PAC sem contrato
40010 SEDEX sem contrato
40045 SEDEX a Cobrar, sem contrato
40215 SEDEX 10, sem contrato
40290 SEDEX Hoje, sem contrato
40096 SEDEX com contrato
40436 SEDEX com contrato
40444 SEDEX com contrato
81019 e-SEDEX, com contrato
41068 PAC com contrato
Essas e outras informa????es voc?? encontra no manual dos Correios. Isso possibilita e facilita bastante ao programador na consulta e obten????o dessa informa????o. Nunca escrevi tanto a palavra Correios em minha vida… T??!
7 respostas em “Calculando frete com Web-Service dos Correios”
Agrade??o as informa????es foi de grande ajuda !
Realmente funciona ok valeu! Por??m, acionado via
client (JS Event) teremos 2 request's: 1 para o m??todo do servidor aspx.net no qual instancia CalcPrecoPrazoWS e o outro para o webservice do correio propriamente dito. Via $.Ajax teriamos apenas 1 request. ou seja JS Event -> Correio.
Ola,
segue um servi??o muito bom e dependendo do volume de acesso ?? gratuito.
http://www.wscepbrasil.com.br
Att
Parab??ns muito bom, vou testa aqui mais j?? da pra ver a qualidade muito obrigado.
Parab??ns, funcionando!
Foi de grande ajuda. Obrigado!
Cara foi de grande ajuda o seu c??digo, olhei em muitos lugares mas consegui sanar minhas d??vidas com o seu c??digo aqui. Grato