[Resolvido] NFe 2.00 Mudanças
Olá pessoal,
Recentemente tive que refazer as mudanças de integração com os servidores da NFe versão 2.00, e estou aqui para deixar material para quem for tentar futuramente. Não vou tratar do XML da NFe e suas mudanças, pois para fazer isto basta você ver no manual de integração no site da sefaz http://www.nfe.fazenda.gov.br/portal/integracao.aspx
A ferramenta de trabalho que usei foi o Visual Studio 2005.
Para comunicar com um Webservice, você deve apenas fazer uma "Web Reference" clicando com o botão direito sobre o projeto na Solution Explorer e clicar em Add Web Reference.... Você precisará já ter um certificado digital válido no computador antes de fazer isso para o site da sefaz.
Após criar a referencia e dar o nome a ela, você deve apenas referenciá-la no código e setar suas propriedades.
A mudança é que você não envia mais o cabeçalho e o XML como string mas como XMLNode (System.Xml.XMLNode) ou XMLDocument, que serve também. Na verdade, o cabeçalho nem é enviado mais para o método do web service, mas ele vai somente no SOAP Header, que agora é exigido.(antes não era validado, pois era enviado pelo método em forma de string)
Mas não se preocupem com o SOAP Header, pois o visual studio já cria uma classe na referencia que você faz chamada nfeCabecMsg, que você deverá usar para enviar o cabeçalho.
Abaixo deixo o método que desenvolvi para a comunicação com o web service de consultar o status do serviço:
Private Function ConsStatServ(ByVal cUF As String, ByVal XML As XmlDocument, ByVal URLWebService As String, ByVal Certificate As X509Certificate2) As XmlDocument
Dim NfeStatusServico As New NFeStatusServico.NfeStatusServico2 'Esta classe foi criada ao criar a web reference
Dim nfeCabecMsg As New NFeStatusServico.nfeCabecMsg ' Esta também. NFeStatusServico é um nome que eu dei na hora de criar a web reference
nfeCabecMsg.versaoDados = "2.00"
nfeCabecMsg.cUF = cUF ' meu caso foi sempre 52 pois so desenvolvi para goias
NfeStatusServico.nfeCabecMsgValue = nfeCabecMsg
NfeStatusServico.Url = URLWebService
NfeStatusServico.ClientCertificates.Add(Certificate)
Dim Retorno As New XmlDocument
Retorno.LoadXml(NfeStatusServico.nfeStatusServicoNF2(XML).OuterXml) 'ficar atento ao nome do método no webservice, pode variar de uf pra uf
Return Retorno 'retorno o retorno do webservice como XMLDocument para outro método onde trato as informações recebidas.
End Function
tive um probleminha muito chato com a linha Me.URL dentro do namespace Reference.vb que é criado automaticamente com o visual studio, quando
se faz a "Web Reference". Porque dava um erro dizendo que o XML Não pode ser formado, e nos detalhes do erro dizia
Could not load type 'namespace.User' from assembly 'assemblyName e etc....
então tive que remover essa linha. Se der esse problema com você, apenas exclua a linha:
Me.Url = Global.My.MySettings.Default. etc etc etc
que está dentro da sub New dentro da classe Reference.vb dentro da pasta Web Refereces na pasta do webservice que você criou. Pra falar a verdade eu nem vi utilidade nessa linha pois eu tenho que setar a url do webservice de qualquer maneira :\
Flw galera
Espero que seja útil
Discussão (0)
Carregando comentários...