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 |
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 comentários:
Agradeço as informações foi de grande ajuda !
Ola,
segue um serviço muito bom e dependendo do volume de acesso é gratuito.
http://www.wscepbrasil.com.br
Att
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.
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
Postar um comentário