Вы находитесь на странице: 1из 6

Como acessar o webservice dos correios

Requisitos: Código desenvolvido em C# ASP NET, no ambiente Visual Studio 2010.


Autor: Emerson Shigueo Sugimoto – BSI UTFPR

Primeiro passo: Acessar o site dos correios


(http://www.correios.com.br/webservices/default.cfm) e fazer o download o arquivo de
documentação SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.

Segundo Passo: Criar um projeto ASP Net do Visual Studio (Figura 001) e adicionar a referência
ao webservice: http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx (Figura 002)

Figura 001 – Novo Projeto no Visual Studio


Figura 002 – Add Web Reference

O link do webservice usado é: http://www.correios.com.br/webservices/default.cfm (ver


Figura 003).
Figura 003 – Adicionando a referência ao projeto

O seu projeto deve estar assim:

Figura 004 – Projeto

Para criar a referência do web service via código, basta fazer isto:

webserviceCorreios.br.com.correios.ws.CalcPrecoPrazoWS ws = new
br.com.correios.ws.CalcPrecoPrazoWS();

Particularmente eu adicionei uma página index.aspx e o código ficou assim:

/// <summary>
/// Exemplo simples em C# de como acessar o webservice dos correios
/// </summary>
public partial class index : System.Web.UI.Page
{

enum tpCdFormato : short {


caixa_pacote = 1,
rolo_prisma = 2
}
/// <summary>
/// OBS: em SEDEX_com_contrato1, SEDEX_com_contrato2 e
SEDEX_com_contrato3, a documentação dos correios
/// nomeia-os como 'SEDEX_com_contrato', sem realizar uma distinção clara
entre eles, apenas o código muda -@see getCodigo(tpCdServico);
/// </summary>
enum tpCdServico {
PAC_sem_contrato,
SEDEX_sem_contrato,
SEDEX_a_Cobrar_sem_contrato,
SEDEX_10_sem_contrato,
SEDEX_Hoje_sem_contrato,
SEDEX_com_contrato1,
SEDEX_com_contrato2,
SEDEX_com_contrato3,
e_SEDEX_com_contrato,
PAC_com_contrato
}

private string getCodigo(tpCdServico tp) {


switch(tp) {
case tpCdServico.PAC_sem_contrato:
return "41106";
case tpCdServico.SEDEX_sem_contrato:
return "40010";
case tpCdServico.SEDEX_a_Cobrar_sem_contrato:
return "40045";
case tpCdServico.SEDEX_10_sem_contrato:
return "40215";
case tpCdServico.SEDEX_Hoje_sem_contrato:
return "40290";
case tpCdServico.SEDEX_com_contrato1:
return "40096";
case tpCdServico.SEDEX_com_contrato2:
return "40436";
case tpCdServico.SEDEX_com_contrato3:
return "40444";
case tpCdServico.e_SEDEX_com_contrato:
return "81019";
case tpCdServico.PAC_com_contrato:
return "41068";
}
return string.Empty;
}

protected void Page_Load(object sender, EventArgs e)


{
tpCdServico tpCdSer = tpCdServico.SEDEX_10_sem_contrato; //pode ser
mais de um
string cepOrigem = "71939360";
string cepDestino = "72151613";
tpCdFormato tpFormato = tpCdFormato.caixa_pacote;
string peso = "0,25"; //em Kg
bool maoPropria = false;
bool avisoRecebimento = true;

webserviceCorreios.br.com.correios.ws.CalcPrecoPrazoWS ws = new
br.com.correios.ws.CalcPrecoPrazoWS();
br.com.correios.ws.cResultado res =
ws.CalcPrecoPrazo(
nCdEmpresa: "",
sDsSenha: "",
nCdServico: getCodigo(tpCdSer),
sCepOrigem: cepOrigem,
sCepDestino: cepDestino,
nVlPeso: peso,
nCdFormato: Convert.ToInt16(tpFormato),
nVlComprimento:0,
nVlAltura:0,
nVlLargura:0,
nVlDiametro:0,
sCdMaoPropria: maoPropria ? "S":"N",
nVlValorDeclarado:0,
sCdAvisoRecebimento: avisoRecebimento ? "S" : "N");

string rt = "<hr /><span style=\"font-family:Verdana, Geneva, sans-


serif; font-size:10pt;\">";

foreach(br.com.correios.ws.cServico cs in res.Servicos) {
//Response.Write(cs.ToString() + "<br />");
rt += "<strong>Codigo:</strong> " + cs.Codigo + "<br />";
rt += "<strong>EntregaDomiciliar:</strong> " +
cs.EntregaDomiciliar + "<br />";
rt += "<strong>EntregaSabado:</strong> " + cs.EntregaSabado +
"<br />";
rt += "<strong>PrazoEntrega:</strong> " + cs.PrazoEntrega + "<br
/>";
rt += "<strong>Valor:</strong> " + cs.Valor + "<br />";
rt += "<strong>ValorAvisoRecebimento:</strong> " +
cs.ValorAvisoRecebimento + "<br />";
rt += "<strong>ValorMaoPropria:</strong> " + cs.ValorMaoPropria +
"<br />";
rt += "<strong>ValorValorDeclarado:</strong> " +
cs.ValorValorDeclarado + "<br />";
rt += "<strong>Erro:</strong> " + cs.Erro + "<br />";
rt += "<strong>MsgErro:</strong> " + cs.MsgErro + "<br />";
rt += "</span><hr />";
}

litResuladoCorreios.Text = rt;

ws = null;
}
}

OBS a minha página index.aspx contém um controle literal (litResuladoCorreios):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs"


Inherits="webserviceCorreios.index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>

<asp:Literal ID="litResuladoCorreios" runat="server"></asp:Literal>


</body>
</html>

O resultado é:

Para demais informações, favor acessar o site dos correios e ler a documentação.

Вам также может понравиться