Inquiridor
Retorno de Autorização Nfe 3.10 (MG) C#

Pergunta
-
Estou com uma dificuldade na hora do retorno da autorização da NF-e utilizando C# (Visual Studio 2008). Está retornando um objeto vazio.
Para ser feita a chamada do WS estou utilizando o seguinte código:
public string NFeAutorizacao(string XmlEnvio, string VersaoSchema, short Ambiente, short CodIbgeUfEmi, string SiglaWS, string PathCertificado, string SenhaCertificado, ref string MsgErr, ref short FlagErr) { try { // Converte dados do xml para XmlNode XmlDocument oXmlDoc = new XmlDocument(); oXmlDoc.LoadXml(XmlEnvio); XmlNode oNode = oXmlDoc.DocumentElement; // Carrega o certificado X509Certificate certificado = new X509Certificate(); certificado = SelecionarCertificado(PathCertificado, SenhaCertificado, ref MsgErr, ref FlagErr); // Se conseguiu localizar o certificado digital if (FlagErr == 0) { // Identifica o WebService a ser utilizado: "SEFAZ Estadual", "Ambiente Nacional" ou "SCAN" switch (SiglaWS) { case "SEFAZEST": // WebService da SEFAZ Estadual ou Virtual // Identifica o ambiente a ser utilizado switch (Ambiente) { //Ambiente de Homologação #region case 2: // HOMOLOGAÇÃO // Identifica o código IBGE do Estado switch (CodIbgeUfEmi) { case 31: // MG // Declara as variáveis do WebService MG.NfeAutorizacao.Homologacao.NfeAutorizacao wsMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.NfeAutorizacao(); MG.NfeAutorizacao.Homologacao.nfeCabecMsg nfeCabecMsgMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.nfeCabecMsg(); MG.NfeAutorizacao.Homologacao.nfeDadosMsg nfeDadosMsgMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.nfeDadosMsg(); // Coloca os valores no cabeçalho nfeCabecMsgMG.cUF = CodIbgeUfEmi.ToString().Trim(); nfeCabecMsgMG.versaoDados = VersaoSchema; wsMG.nfeCabecMsgValue = nfeCabecMsgMG; nfeDadosMsgMG.Any = new XmlNode[] {oXmlDoc}; nfeDadosMsgMG.Any[0] = oNode; // Coloca o certificado wsMG.ClientCertificates.Add(certificado); wsMG.Timeout = 120000; // Comunica com o WebService string obj = nfeDadosMsgMG.Any[0].OuterXml; Console.WriteLine(obj); string retorno = wsMG.NfeAutorizacaoLote(nfeDadosMsgMG).ToString(); Console.WriteLine(retorno); return wsMG.NfeAutorizacaoLote(nfeDadosMsgMG).ToString(); default: // Código não foi informado ou é inválido FlagErr = 1; MsgErr = "Erro: Código da UF informada " + CodIbgeUfEmi.ToString().Trim() + ". Código inválido ou SEFAZ não possui WebService próprio."; return ""; } // switch (CodIbgeUfEmi) default: // Ambiente incorreto (Diferente de 1 e 2) FlagErr = 1; MsgErr = "Erro: Ambiente informado: " + Ambiente.ToString().Trim() + ". Informe um código de ambiente válido."; return ""; } // switch (Ambiente) #endregion default: // WebService não informadou ou parâmetro incorreto FlagErr = 1; MsgErr = "Erro: Sigla do WebService a ser utilizado " + SiglaWS.Trim() + ". Informe um código válido."; return ""; } // switch (SiglaWS) } else { return ""; // Retorno em branco pois houve erro } // if (FlagErr == 0) } catch (Exception e) { FlagErr = 1; MsgErr = "Erro: Não foi possível enviar o lote de NF-e à SEFAZ. " + e.Message + " - " + e.StackTrace.ToString();//"Erro: Não foi possível enviar o lote de NF-e à SEFAZ. " + e.Message + "\n" + e.InnerException.ToString() + "\n" + e.StackTrace.ToString(); return ""; } }
Beleza... É realizada a comunicação com a SeFaz e autorizada a nota (se você consultar a chave de acesso, ela estará lá normalmente) Porém dentro do método do WS, quando é realizado o "Invoke", é retornado um objeto vazio.
No webservice, é nessa linha:
object[] results = this.Invoke("NfeAutorizacaoLote", new object[] { nfeDadosMsg});
o Results[] retorna um objeto sem valores...
Estou com essa dificuldade pois necessitava do XML de retorno para atualizar a NF-e em meu sistema.
Gostaria de saber o que estou fazendo errado nessa chamada ou na instanciação do retorno?
Se necessário, posso enviar um vídeo com breakpoints e o projeto.
Todas as Respostas
-
-
-
-
Olá, alguma novidade com o tópico?
Acho que a declaração dos serviços de MG estão erradas minha linguagem de programação é VB mas estou com o mesmo problema, um exemplo é o serviço de Status, o retorno é do tipo lista de Object.
Public Function nfeStatusServicoNF2(nfeDadosMsg As Fiscal.MGH_NfeStatusServico2.nfeDadosMsg) As Object()
Att
Valdeir
- Editado Valdeir Caires sexta-feira, 27 de fevereiro de 2015 18:24
-
-
Minha função está assim:
Public Function Autorizacao(ByVal Doc As System.Xml.XmlDocument) As System.Xml.XmlDocument Dim Consulta As New MGH_NfeAutorizacao.NfeAutorizacao Consulta.ClientCertificates.Add(Certificado) Consulta.nfeCabecMsgValue = New MGH_NfeAutorizacao.nfeCabecMsg Consulta.nfeCabecMsgValue.cUF = CodigoUF(UF) Consulta.nfeCabecMsgValue.versaoDados = "3.00" Dim NFeDados As New MGH_NfeAutorizacao.nfeDadosMsg() NFeDados.Any = New System.Xml.XmlNode() {Doc} Dim Retorno As Object = Consulta.NfeAutorizacaoLote(NFeDados) Autorizacao= New Xml.XmlDocument '..:Tentei fazer a conversão do retorno, mas ele vem como uma lista de object vazia 'Autorizacao.LoadXml(CType(Retorno, System.Xml.XmlDocument).OuterXml) End Function
Os outros estados estão funcionando perfeitamente!
- Editado Valdeir Caires segunda-feira, 2 de março de 2015 16:27
-
-
-
Estou com o mesmo problema MG 3.10, já tentei alterar a classe do webservice para receber xmlNode e não consegui nada, além de retornos [0], null e exceptions
Eu achei esse site que dizem que conseguiram mas também não consegui
https://ideiasdefenestradas.wordpress.com/2014/09/11/trabalhando-de-graca-para-o-governo-nf-e-3-10/
Não aguento mais a SEFAZ, todos os outros estão funcionando normalmente
-
KKKK você não entendeu o que estou questionando, eu quero saber se antes de você atribuir para Retorno se a variavel NFeDados possui valores
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-
Então Dacceto você possui valores mais depois que atribui a variavel permanece com esses valores, como você a chama Retorno.Any[0] ou somente Retorno?
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-
-
Consegui resolver com esse link, mas ainda não sei onde atribuir dados de lote, porque pelo que entendi cada posição do any é uma nfe mas os dados de lote onde vão?
http://pt.stackoverflow.com/questions/50629/retorno-de-autoriza%C3%A7%C3%A3o-nfe-3-10-mg-c/50720#50720
Fora isso, o retorno disso é péssimo, é um array por cada posição do any e dentro um array de xmlnode, pq eles não retornam o XML!?!!??!!? AQUIII É O BRASIL!!!!
- Editado Danilo Kasparian sexta-feira, 6 de março de 2015 12:27
- Sugerido como Resposta Danilo Kasparian sexta-feira, 6 de março de 2015 14:49
-
Infelizmente para esse pessoal que criam essas obrigações o importante é recolher tão pouco importa para os demais detalhes e fazem as coisas as pressas sem ao menos testar seu funcionamento.
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-
-
-
-
-
A solução foi criar a classe do webservice na mão, um outro dev tinha criado, ficou assim:
public partial class nfeCabecMsg : SoapHeader { private string _cUF; public string cUF { get { return _cUF; } set { _cUF = value; } } private string _versaoDados; public string versaoDados { get { return _versaoDados; } set { _versaoDados = value; } } } [WebServiceBindingAttribute(Name = "NfeRetAutorizacaoSoap12", Namespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetAutorizacao")] public partial class NfeRetAutorizacao : System.Web.Services.Protocols.SoapHttpClientProtocol { private nfeCabecMsg nfeCabecMsgValueField; private bool useDefaultCredentialsSetExplicitly; /// <remarks/> public NfeRetAutorizacao() { this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; this.Url = global::Skill.T10.NFe.Properties.Settings.Default.Skill_T10_NFe_wsMGPRetAutorizacao_NfeRetAutorizacao; if ((this.IsLocalFileSystemWebService(this.Url) == true)) { this.UseDefaultCredentials = true; this.useDefaultCredentialsSetExplicitly = false; } else { this.useDefaultCredentialsSetExplicitly = true; } } public nfeCabecMsg nfeCabecMsgValue { get { return this.nfeCabecMsgValueField; } set { this.nfeCabecMsgValueField = value; } } public new string Url { get { return base.Url; } set { if ((((this.IsLocalFileSystemWebService(base.Url) == true) && (this.useDefaultCredentialsSetExplicitly == false)) && (this.IsLocalFileSystemWebService(value) == false))) { base.UseDefaultCredentials = false; } base.Url = value; } } public new bool UseDefaultCredentials { get { return base.UseDefaultCredentials; } set { base.UseDefaultCredentials = value; this.useDefaultCredentialsSetExplicitly = true; } } private bool IsLocalFileSystemWebService(string url) { if (((url == null) || (url == string.Empty))) { return false; } System.Uri wsUri = new System.Uri(url); if (((wsUri.Port >= 1024) && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { return true; } return false; } [SoapHeaderAttribute("nfeCabecMsgValue", Direction = SoapHeaderDirection.InOut)] [SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetAutorizacao/nfeRetAutorizacaoLote", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare)] public XmlNode nfeRetAutorizacaoLote(XmlNode nfeDadosMsg) { XmlNode _retorno = null; object[] results = this.Invoke("nfeRetAutorizacaoLote", new object[] { nfeDadosMsg }); _retorno = (System.Xml.XmlNode)(results[0]); return (_retorno); } }
- Sugerido como Resposta Mr. GMSOFT sexta-feira, 13 de março de 2015 01:08
-