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:
And I'm making available the part of the code shown:
Thank you in advance!