Authorization Return NFE 3.10 (MG) C #

2

I'm having a hard time returning the NF-e authorization using C # (Visual Studio 2008). You are returning an empty object.

To make the WS call I'm using the following code:

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 "";
        }
    }

Beauty ... Communication is done with SeFaz and the note is authorized (if you check the access key, it will be there normally) But within the WS method, when Invoke is performed, an empty object is returned.

In webservice, it's in this line:

object[] results = this.Invoke("NfeAutorizacaoLote", new object[] {
                    nfeDadosMsg});

o Results [] returns an object with no values ...

I'm having this difficulty because I needed the return XML to update the NF-e in my system.

I would like to know what I am doing wrong in this call or in the instantiation of the return?

For help, I'm making the operation video available with breakpoints:

link

And I'm making available the part of the code shown:

link

Thank you in advance!

    
asked by anonymous 13.02.2015 / 14:12

1 answer

2

As I explained to you "previously" there is an error in the webservice MG configuration, just above:

  

object [] results = this.Invoke ("NfeAuthorizationLote", new object [] {
  nfeDadosMsg});

Search for:

  

[return: System.Xml.Serialization.XmlArrayItemAttribute ("retEnviNFe",   IsNullable = false)]

And change to:

  

[return: System.Xml.Serialization.XmlArrayItemAttribute ("retEnviNFe",   Namespace=" link ", IsNullable = false)]

In the code provided, the line shown above was not added, had to add again. The answer is an array of objects, it can not simply transform into a string. In the code you commented on

  

// return rsp [8] .OuterXml;

Show how to get value

    
13.02.2015 / 20:14