Problemas entre webservices do PR e NF-e do AX – Parte 2
Tuesday, July 13 2010 - Blog
Como disse na parte 1 deste post, encontramos outro problema mesmo conseguindo conectar nos webservices do Paraná.
Quando uma nota fiscal era enviada, tinhamos o seguinte comportamento no histórico da NF-e:
| Message Type | Mesasge Status | Status | Description | Web Service conectado |
| NF-e | Waiting to send | Created | ||
| NF-e | Sent | Created | 103 - Lote Recebido com sucesso | NFeRecepcao |
| NF-e | Processed | Rejected | 299 - XML utiliza codificação diferente de UTF-8 | NfeRetRecepcao |
Quando verifiquei o histórico, ficou claro para mim que havia um problema com os xmls usados nos outros web services que não o de recepção da NF-e. Ja que a mensagem de envio tinha retornado 103 - Lote Recebido com sucesso.
Como comentei no primeiro post, a SEFAZ/PR não seguiu alguns padrões do XML definidos pela W3C. Os webservices somente aceitam XMLs em que a declaração <?xml version="1.0" encoding="UTF-8"?> aparece explicitamente no xml. Os web services da SEFAZ/SP e SEFAZ/RS aceitam o XML sem essa declaração, por que implicitamente o encoding é UTF-8.
O processo de envio de mensagem usa 5 classes para formatar o XML a ser enviado ao webservice:
| Prefixo: | EFDocMsgFormat | |
| WebService | Classe NF-e V1.10 | Classe NF-e V2.00 |
| NfeRecepcao | _XmlSubmit_BR | _XmlSubmitV2_BR |
| NfeRetRecepcao | _XmlSubmitReturn_BR | _XmlSubmitReturnV2_BR |
| NfeCancelamento | _XmlCancel_BR | _XmlCancelV2_BR |
| NfeInutilizacao | _XmlDiscard_BR | _XmlDiscardV2_BR |
| NfeConsulta | _XmlInquire_BR | _XmlInquireV2_BR |
Somente a classe _XMLSubmit_BR (consequentemente a classe V2) explicitamente adiciona a declaração <?xml>.
Ainda precisamos fazer um pequeno ajuste nas outras 4 classes que geram o XML para que tudo funcione normalmente. Não é necessário alterar as classes da versão 2.00 ja que nenhuma delas sobrescreve o método write ou doFormat da classe base.
Para que tudo fucnione normalmente, basta colocar a seguinte chamada:
xmlDoc.insertBefore(
xmlDoc.createXmlDeclaration('1.0', 'UTF-8', ''),
xmlDoc.documentElement());
Entre as seguinte chamadas:
xmlDoc = XmlDocument::newXml(consReciNFeElement.outerXml());
_stream.write(xmlDoc.toString());
No método write das classes: EFDocMsgFormat_XmlSubmitReturn_BR, EFDocMsgFormat_XmlInquire_BR
No método doFormat das classes: EFDocMsgFormat_XmlCancel_BR, EFDocMsgFormat_XmlDiscard_BR
Com os métodos alterados o processamento das NF-e acontece normalmente!
Abs!
