Return of Authorization Nfe 3.10 (MG) C#

Asked

Viewed 2,680 times

3

I’m having a hard time returning NF-e authorization using C# (Visual Studio 2008). It’s returning an empty object.

To be made the call from WS I am 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 with Sefaz is performed and the note authorized (if you consult the access key, it will be there normally) But within the WS method, when "Invoke" is performed, an empty object is returned.

At the webservice, it’s on this line:

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

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

I have this difficulty because I needed the return XML to update the NF-e on my system.

I wonder what I’m doing wrong in this call or in the instantiation of return?

For help, I am providing the video of the operation with breakpoints:

https://www.dropbox.com/s/xyj4l82k7djhxbq/Difference%20SeFaz%20MG%20Retorno.camrec? dl=0

And I’m making available the demonstrated code part:

https://www.dropbox.com/s/d2ndqa4nos4p72z/BibliotecaNF310.7z?dl=0

Thank you in advance!

1 answer

2


As I explained to you "earlier" has an error in the configuration of the MG webservice, just above:

Object[] Results = this. Invoke("Nfeautorizacaolote", new Object[] {
nfeDadosMsg});

Look for:

[Return: System.xml.Serialization.Xmlarrayitemattribute("retEnviNFe", Isnullable=false)]

And changes to:

[Return: System.xml.Serialization.Xmlarrayitemattribute("retEnviNFe", Namespace = "http://www.portalfiscal.inf.br/nfe", Isnullable=false)]

In the code provided, the line shown above was not added, I had to add again.
The answer is an array of objects, you can’t just turn into a string.

In the code you mentioned

//Return rsp[8]. Outerxml;

show how to get the value

inserir a descrição da imagem aqui

  • I did, Hub. I even sent you some e-mails with replies and even a video with the operation. I made the change you said and are presenting the message "Object reference not set to an instance of an object", as already reported.

  • 1

    See updated reply @Thales

  • Thanks for the answer, @Hub.

  • It worked @Hub! Thank you very much.

  • You’re welcome @Thales

Browser other questions tagged

You are not signed in. Login or sign up in order to post.