private void vaToolStripMenuItem_Click(object sender, EventArgs e) { if (Empresa.Configuracoes.Count <= 0) { MessageBox.Show("É necessário cadastrar e configurar as empresas que serão gerenciadas pelo aplicativo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } using (ValidarXML oValidarXML = new ValidarXML()) { oValidarXML.ShowInTaskbar = true; oValidarXML.MinimizeBox = true; oValidarXML.ShowDialog(); } }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="wsProxy">Objeto da classe construida do WSDL</param> /// <param name="servicoWS">Objeto da classe de envio do XML</param> /// <param name="metodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="servicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="finalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="finalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <param name="gravaRetorno">Grava o arquivo de retorno para o ERP na execução deste método?</param> public void Invocar(WebServiceProxy wsProxy, object servicoWS, string metodo, object cabecMsg, object servicoNFe, string finalArqEnvio, string finalArqRetorno, bool gravaRetorno, SecurityProtocolType securityProtocolType) { int emp = Empresas.FindEmpresaByThread(); finalArqEnvio = Functions.ExtractExtension(finalArqEnvio); finalArqRetorno = Functions.ExtractExtension(finalArqRetorno); XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = servicoNFe.GetType(); Servicos servico = (Servicos)wsProxy.GetProp(servicoNFe, NFeStrConstants.Servico); docXML = (XmlDocument)(typeServicoNFe.InvokeMember("ConteudoXML", System.Reflection.BindingFlags.GetField, null, servicoNFe, null)); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, servicoNFe, null)); // Exclui o Arquivo de Erro Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, finalArqEnvio + ".xml") + finalArqRetorno + ".err"); if (docXML == null) { docXML.Load(XmlNfeDadosMsg); } // Validar o Arquivo XML switch (servico) { case Servicos.NFeEnviarLote: case Servicos.NFeEnviarLoteZip: case Servicos.CTeEnviarLote: case Servicos.MDFeEnviarLote: //XML de NFe, CTe e MDFe, na montagem do lote eu valido o XML antes, como o lote quem monta é o XML entendo que não está montando errado, sendo assim, não vou validar novamente o XML para ganhar desempenho. Wandrey 18/09/2016 break; default: ValidarXML validar = new ValidarXML(docXML, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false); string cResultadoValidacao = validar.ValidarArqXML(docXML, XmlNfeDadosMsg); if (cResultadoValidacao != "") { throw new Exception(cResultadoValidacao); } break; } // Definir Proxy if (ConfiguracaoApp.Proxy) { wsProxy.SetProp(servicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto)); } // Limpa a variável de retorno XmlNode XmlRetorno = null; string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. wsProxy.SetProp(servicoWS, "Timeout", 60000); if (cabecMsg != null) { switch (servico) { case Servicos.MDFePedidoConsultaSituacao: case Servicos.MDFePedidoSituacaoLote: case Servicos.MDFeEnviarLote: case Servicos.MDFeConsultaStatusServico: case Servicos.MDFeRecepcaoEvento: case Servicos.MDFeConsultaNaoEncerrado: wsProxy.SetProp(servicoWS, "mdfeCabecMsgValue", cabecMsg); break; case Servicos.CTeInutilizarNumeros: case Servicos.CTePedidoConsultaSituacao: case Servicos.CTePedidoSituacaoLote: case Servicos.CTeEnviarLote: case Servicos.CTeRecepcaoEvento: case Servicos.CTeConsultaStatusServico: case Servicos.CteRecepcaoOS: if (wsProxy.GetProp(cabecMsg, TpcnResources.cUF.ToString()).ToString() == "50") //Mato Grosso do Sul fugiu o padrão nacional { try { wsProxy.SetProp(servicoWS, "cteCabecMsg", cabecMsg); } catch //Se der erro é pq não está no ambiente normal então tem que ser o nome padrão pois Mato Grosso do Sul fugiu o padrão nacional. { wsProxy.SetProp(servicoWS, "cteCabecMsgValue", cabecMsg); } } else { wsProxy.SetProp(servicoWS, "cteCabecMsgValue", cabecMsg); } break; case Servicos.CTeDistribuicaoDFe: case Servicos.DFeEnviar: break; case Servicos.LMCAutorizacao: break; default: wsProxy.SetProp(servicoWS, "nfeCabecMsgValue", cabecMsg); break; } } //Definir novamente o protocolo de segurança, pois é uma propriedade estática e o seu valor pode ser alterado antes do envio. Wandrey 03/05/2016 ServicePointManager.SecurityProtocol = securityProtocolType; // Envio da NFe Compactada - Renan if (servico == Servicos.NFeEnviarLoteZip) { string encodedData = TFunctions.CompressXML(docXML); XmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { encodedData }); } else { XmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { docXML }); } if (XmlRetorno == null) { throw new Exception("Erro de envio da solicitação do serviço: " + servico.ToString()); } typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, servicoNFe, new object[] { XmlRetorno.OuterXml }); // Registra o retorno de acordo com o status obtido if (gravaRetorno) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, servicoNFe, new Object[] { finalArqEnvio + ".xml", finalArqRetorno + ".xml" }); } }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="wsProxy">Objeto da classe construida do WSDL</param> /// <param name="servicoWS">Objeto da classe de envio do XML</param> /// <param name="metodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="servicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="finalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="finalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void InvocarNFSe(WebServiceProxy wsProxy, object servicoWS, string metodo, string cabecMsg, object servicoNFe, string finalArqEnvio, string finalArqRetorno, PadroesNFSe padraoNFSe, Servicos servicoNFSe, SecurityProtocolType securityProtocolType) { int emp = Empresas.FindEmpresaByThread(); finalArqEnvio = Functions.ExtractExtension(finalArqEnvio); finalArqRetorno = Functions.ExtractExtension(finalArqRetorno); XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = servicoNFe.GetType(); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, servicoNFe, null)); // Exclui o Arquivo de Erro Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, finalArqEnvio + ".xml") + finalArqRetorno + ".err"); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false); string cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { switch (padraoNFSe) { case PadroesNFSe.SMARAPD: break; default: throw new Exception(cResultadoValidacao); } } //Definir novamente o protocolo de segurança, pois é uma propriedade estática e o seu valor pode ser alterado antes do envio. Wandrey 03/05/2016 ServicePointManager.SecurityProtocol = securityProtocolType; // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); // Definir Proxy if (ConfiguracaoApp.Proxy && wsProxy != null) { switch (padraoNFSe) { case PadroesNFSe.BETHA: wsProxy.Betha.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto); break; default: wsProxy.SetProp(servicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta, ConfiguracaoApp.DetectarConfiguracaoProxyAuto)); break; } } // Limpa a variável de retorno string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. if (wsProxy != null) { switch (padraoNFSe) { case PadroesNFSe.NOTAINTELIGENTE: case PadroesNFSe.BETHA: break; default: wsProxy.SetProp(servicoWS, "Timeout", 120000); break; } } //Invocar o membro switch (padraoNFSe) { #region Padrão BETHA case PadroesNFSe.BETHA: switch (metodo) { case "ConsultarSituacaoLoteRps": strRetorno = wsProxy.Betha.ConsultarSituacaoLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarLoteRps": strRetorno = wsProxy.Betha.ConsultarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "CancelarNfse": strRetorno = wsProxy.Betha.CancelarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarNfse": strRetorno = wsProxy.Betha.ConsultarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarNfsePorRps": strRetorno = wsProxy.Betha.ConsultarNfsePorRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "RecepcionarLoteRps": strRetorno = wsProxy.Betha.RecepcionarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; } break; #endregion Padrão BETHA #region NOTAINTELIGENTE case PadroesNFSe.NOTAINTELIGENTE: //NFe.Components.PClaudioMG.api_portClient wsClaudio = (NFe.Components.PClaudioMG.api_portClient)servicoWS; switch (servicoNFSe) { case Servicos.NFSeRecepcionarLoteRps: //strRetorno = wsClaudio.RecepcionarLoteRps(docXML.OuterXml.ToString()); break; } //strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml.ToString() }); break; #endregion NOTAINTELIGENTE #region Padrão ISSONLINE case PadroesNFSe.ISSONLINE_ASSESSORPUBLICO: int operacao; string senhaWs = Functions.GetMD5Hash(Empresas.Configuracoes[emp].SenhaWS); switch (servicoNFSe) { case Servicos.NFSeRecepcionarLoteRps: operacao = 1; break; case Servicos.NFSeCancelar: operacao = 2; break; default: operacao = 3; break; } strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Convert.ToSByte(operacao), Empresas.Configuracoes[emp].UsuarioWS, senhaWs, docXML.OuterXml }); break; #endregion Padrão ISSONLINE #region Padrão Blumenau-SC case PadroesNFSe.BLUMENAU_SC: strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { 1, docXML.OuterXml }); break; #endregion Padrão Blumenau-SC #region Padrão Paulistana case PadroesNFSe.PAULISTANA: strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { 1, docXML.OuterXml }); break; #endregion Padrão Paulistana #region TECNOSISTEMAS case PadroesNFSe.TECNOSISTEMAS: strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml, cabecMsg.ToString() }); break; #endregion TECNOSISTEMAS #region SMARAPD case PadroesNFSe.SMARAPD: if (metodo == "nfdEntradaCancelar") { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS, TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS), docXML.OuterXml }); } else if (metodo == "nfdSaida") { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS, TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS), Empresas.Configuracoes[emp].UnidadeFederativaCodigo.ToString(), docXML.OuterXml }); } else if (metodo == "urlNfd") { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Convert.ToInt32(docXML.GetElementsByTagName("codigoMunicipio")[0].InnerText), Convert.ToInt32(docXML.GetElementsByTagName("numeroNfd")[0].InnerText), Convert.ToInt32(docXML.GetElementsByTagName("serieNfd")[0].InnerText), docXML.GetElementsByTagName("inscricaoMunicipal")[0].InnerText }); } else { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS, TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS), Empresas.Configuracoes[emp].UnidadeFederativaCodigo, docXML.OuterXml }); } break; #endregion SMARAPD #region ISSWEB case PadroesNFSe.ISSWEB: string versao = docXML.DocumentElement.GetElementsByTagName("Versao")[0].InnerText; string cnpj = docXML.DocumentElement.GetElementsByTagName("CNPJCPFPrestador")[0].InnerText; strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { cnpj, docXML.OuterXml, versao }); break; #endregion ISSWEB #region NA_INFORMATICA case PadroesNFSe.NA_INFORMATICA: switch (servicoNFSe) { #region Recepcionar Lote RPS - Assíncrono case Servicos.NFSeRecepcionarLoteRps: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.RecepcionarLoteRps dadosEnvio = new Components.PCorumbaMS.RecepcionarLoteRps(); // Components.PCorumbaMS.RecepcionarLoteRpsResponse dadosRetorno = new Components.PCorumbaMS.RecepcionarLoteRpsResponse(); // dadosEnvio.EnviarLoteRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRps(dadosEnvio); // strRetorno = dadosRetorno.EnviarLoteRpsResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.RecepcionarLoteRps dadosEnvio = new Components.HCorumbaMS.RecepcionarLoteRps(); // Components.HCorumbaMS.RecepcionarLoteRpsResponse dadosRetorno = new Components.HCorumbaMS.RecepcionarLoteRpsResponse(); // dadosEnvio.EnviarLoteRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRps(dadosEnvio); // strRetorno = dadosRetorno.EnviarLoteRpsResposta; //} break; #endregion Recepcionar Lote RPS - Assíncrono #region Recepcionar Lote RPS - Síncrono case Servicos.NFSeRecepcionarLoteRpsSincrono: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.RecepcionarLoteRpsSincrono dadosEnvio = new Components.PCorumbaMS.RecepcionarLoteRpsSincrono(); // Components.PCorumbaMS.RecepcionarLoteRpsSincronoResponse dadosRetorno = new Components.PCorumbaMS.RecepcionarLoteRpsSincronoResponse(); // dadosEnvio.EnviarLoteRpsSincronoEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRpsSincrono(dadosEnvio); // strRetorno = dadosRetorno.EnviarLoteRpsSincronoResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.RecepcionarLoteRpsSincrono dadosEnvio = new Components.HCorumbaMS.RecepcionarLoteRpsSincrono(); // Components.HCorumbaMS.RecepcionarLoteRpsSincronoResponse dadosRetorno = new Components.HCorumbaMS.RecepcionarLoteRpsSincronoResponse(); // dadosEnvio.EnviarLoteRpsSincronoEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).RecepcionarLoteRpsSincrono(dadosEnvio); // strRetorno = dadosRetorno.EnviarLoteRpsSincronoResposta; //} break; #endregion Recepcionar Lote RPS - Síncrono #region Cancelar RPS case Servicos.NFSeCancelar: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.CancelarNfse dadosEnvio = new Components.PCorumbaMS.CancelarNfse(); // Components.PCorumbaMS.CancelarNfseResponse dadosRetorno = new Components.PCorumbaMS.CancelarNfseResponse(); // dadosEnvio.CancelarNfseEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).CancelarNfse(dadosEnvio); // strRetorno = dadosRetorno.CancelarNfseResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.CancelarNfse dadosEnvio = new Components.HCorumbaMS.CancelarNfse(); // Components.HCorumbaMS.CancelarNfseResponse dadosRetorno = new Components.HCorumbaMS.CancelarNfseResponse(); // dadosEnvio.CancelarNfseEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).CancelarNfse(dadosEnvio); // strRetorno = dadosRetorno.CancelarNfseResposta; //} break; #endregion Cancelar RPS #region Consultar Lote RPS case Servicos.NFSeConsultarLoteRps: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.ConsultarLoteRps dadosEnvio = new Components.PCorumbaMS.ConsultarLoteRps(); // Components.PCorumbaMS.ConsultarLoteRpsResponse dadosRetorno = new Components.PCorumbaMS.ConsultarLoteRpsResponse(); // dadosEnvio.ConsultarLoteRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarLoteRps(dadosEnvio); // strRetorno = dadosRetorno.ConsultarLoteRpsResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.ConsultarLoteRps dadosEnvio = new Components.HCorumbaMS.ConsultarLoteRps(); // Components.HCorumbaMS.ConsultarLoteRpsResponse dadosRetorno = new Components.HCorumbaMS.ConsultarLoteRpsResponse(); // dadosEnvio.ConsultarLoteRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarLoteRps(dadosEnvio); // strRetorno = dadosRetorno.ConsultarLoteRpsResposta; //} break; #endregion Consultar Lote RPS #region Consulta Situação Nfse case Servicos.NFSeConsultar: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.ConsultarNfsePorFaixa dadosEnvio = new Components.PCorumbaMS.ConsultarNfsePorFaixa(); // Components.PCorumbaMS.ConsultarNfsePorFaixaResponse dadosRetorno = new Components.PCorumbaMS.ConsultarNfsePorFaixaResponse(); // dadosEnvio.ConsultarNfsePorFaixaEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorFaixa(dadosEnvio); // strRetorno = dadosRetorno.ConsultarNfsePorFaixaResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.ConsultarNfsePorFaixa dadosEnvio = new Components.HCorumbaMS.ConsultarNfsePorFaixa(); // Components.HCorumbaMS.ConsultarNfsePorFaixaResponse dadosRetorno = new Components.HCorumbaMS.ConsultarNfsePorFaixaResponse(); // dadosEnvio.ConsultarNfsePorFaixaEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorFaixa(dadosEnvio); // strRetorno = dadosRetorno.ConsultarNfsePorFaixaResposta; //} break; #endregion Consulta Situação Nfse #region Consulta Situação Nfse por RPS case Servicos.NFSeConsultarPorRps: //if (Empresas.Configuracoes[emp].AmbienteCodigo == (int)TipoAmbiente.taProducao) //{ // ((Components.PCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.PCorumbaMS.ConsultarNfsePorRps dadosEnvio = new Components.PCorumbaMS.ConsultarNfsePorRps(); // Components.PCorumbaMS.ConsultarNfsePorRpsResponse dadosRetorno = new Components.PCorumbaMS.ConsultarNfsePorRpsResponse(); // dadosEnvio.ConsultarNfsePorRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.PCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorRps(dadosEnvio); // strRetorno = dadosRetorno.ConsultarNfsePorRpsResposta; //} //else //{ // ((Components.HCorumbaMS.NfseWSService)servicoWS).ClientCertificates.Add(Empresas.Configuracoes[emp].X509Certificado); // Components.HCorumbaMS.ConsultarNfsePorRps dadosEnvio = new Components.HCorumbaMS.ConsultarNfsePorRps(); // Components.HCorumbaMS.ConsultarNfsePorRpsResponse dadosRetorno = new Components.HCorumbaMS.ConsultarNfsePorRpsResponse(); // dadosEnvio.ConsultarNfsePorRpsEnvio = docXML.OuterXml.ToString(); // dadosRetorno = ((Components.HCorumbaMS.NfseWSService)servicoWS).ConsultarNfsePorRps(dadosEnvio); // strRetorno = dadosRetorno.ConsultarNfsePorRpsResposta; //} break; #endregion Consulta Situação Nfse por RPS } break; #endregion NA_INFORMATICA #region ABASE case PadroesNFSe.ABASE: if (servicoNFSe == Servicos.NFSeConsultarPorRps) { goto default; } else { XmlNode xmlRetorno = wsProxy.InvokeXML(servicoWS, metodo, new object[] { cabecMsg.ToString(), docXML.OuterXml }); strRetorno = xmlRetorno.OuterXml; } break; #endregion ABASE case PadroesNFSe.LEXSOM: XmlNode result = wsProxy.InvokeXML(servicoWS, metodo, new object[] { docXML }); strRetorno = result.OuterXml; break; default: #region Demais padrões if (string.IsNullOrEmpty(cabecMsg)) { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { docXML.OuterXml }); } else { strRetorno = wsProxy.InvokeStr(servicoWS, metodo, new object[] { cabecMsg.ToString(), docXML.OuterXml }); } break; #endregion Demais padrões } #region gerar arquivos assinados(somente debug) #if DEBUG string path = Application.StartupPath + "\\teste_assintura\\"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } StreamWriter sw = new StreamWriter(path + "nfseMsg_assinado.xml", true); sw.Write(docXML.OuterXml); sw.Close(); StreamWriter sw2 = new StreamWriter(path + "cabecMsg_assinado.xml", true); sw2.Write(cabecMsg.ToString()); sw2.Close(); #endif #endregion gerar arquivos assinados(somente debug) //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, servicoNFe, new object[] { strRetorno }); // Registra o retorno de acordo com o status obtido if (finalArqEnvio != string.Empty && finalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, servicoNFe, new Object[] { finalArqEnvio + ".xml", finalArqRetorno + ".xml" }); } }
private void CmdCancela_Click(object sender, EventArgs e) { if ((DateTime.Now - p.datadigitacao).TotalHours > 24) { MessageBox.Show("Prazo de Cancelamento Superior ao Previsto na Legislação.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (p.conddoc == "C") { MessageBox.Show("NF-e já cancelada.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (cboMotivo.Text.Trim().Length < 15) { MessageBox.Show("Minimo de 15 caracteres!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.Cursor = Cursors.WaitCursor; StreamWriter Grava; GerarXML geraxml = new GerarXML(); AssinarXML assinar = new AssinarXML(); ValidarXML validar = new ValidarXML(); TransmitirXML transmitir = new TransmitirXML(); XMLDao xmldao = new XMLDao(); string retValidar = string.Empty; string xMotivo = cboMotivo.Text; string retTransmitir = string.Empty; txtResultado.Text = string.Empty; try { //Gerando xml xmlCanc = geraxml.CancelamentoNFe(p, xMotivo); //Assinando xml xmlCanc_Assinado = assinar.AssinaXML(xmlCanc.InnerXml, "infEvento", Certificado.getInstance.oCertificado); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao assinar: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } try { //Validando o xml assinado retValidar = validar.Valida(xmlCanc_Assinado, "Canc"); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao Validar: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } if (retValidar == string.Empty) { try { //Recebendo xml de retorno da transmissão retTransmitir = transmitir.XML_CancelamentoNFCe4(xmlCanc_Assinado, p.nfiscal, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument xmlRetorno = new XmlDocument(); xmlRetorno.LoadXml(retTransmitir); //Lote processado if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "128") { //Evento registrado e vinculado a NFC-e if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "135") { try { p.xml.numdoc = p.numdoc; p.xml.data = DateTime.Now; p.xml.arquivoXML = xmlRetorno.InnerXml; p.xml.Modelo = p.modelo; p.xml.statNFCe = "135"; if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLCancelado)) { //Salva o arquivo XML na pasta Grava = File.CreateText(Controle.getInstance.caminho_XMLCancelado + @"\110111-" + p.chave + "-1-procEventoNfe.xml"); Grava.Write(p.xml.arquivoXML); Grava.Close(); } //Salva arquivo XML no Banco SQL (NFe) if (xmldao.Grava_XML(p.xml)) { //Atualizando o status do pedido para cancelada (135) (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, p.xml.statNFCe); var db = new Database("stringConexao"); try { db.BeginTransaction(); foreach (PedidoItem pItem in p.lstPedidoItem) { db.Update("UPDATE produto " + "SET Estoque = Estoque + " + pItem.qtditens * 1 + ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") + " WHERE CodPro = " + pItem.codpro); } //Boleta cancelada db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } txtResultado.AppendText("Pedido cancelado com sucesso!"); txtResultado.ForeColor = Color.Green; } else { txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro ao salvar o arquivo XML no banco de dados, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Green; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Green; } } else { txtResultado.AppendText("Erro ao cancelar (002): " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro ao cancelar (001): " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro ao transmitir (001): " + retTransmitir + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao Transmitir XML: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro na validação do XML: " + retValidar + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } this.Cursor = Cursors.Default; }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="oWSProxy">Objeto da classe construida do WSDL</param> /// <param name="oServicoWS">Objeto da classe de envio do XML</param> /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void InvocarNFSe(WebServiceProxy oWSProxy, object oServicoWS, string cMetodo, string cabecMsg, object oServicoNFe, string cFinalArqEnvio, string cFinalArqRetorno, PadroesNFSe padraoNFSe, Servicos servicoNFSe, Core.Empresa empresa) { XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = oServicoNFe.GetType(); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Resgatar o caminho para salvar o xml de retorno string caminhoSalvarXmlRetorno = (string)(typeServicoNFe.InvokeMember("SalvarXmlRetornoEm", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, empresa.CodigoMunicipio); string cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { throw new Exception(cResultadoValidacao); } // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); // Definir Proxy if (ConfiguracaoApp.Proxy) { if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta)); } else { oWSProxy.Betha.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } } // Limpa a variável de retorno string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Timeout", 60000); } //Invocar o membro switch (padraoNFSe) { #region Padrão BETHA case PadroesNFSe.BETHA: switch (cMetodo) { case "ConsultarSituacaoLoteRps": strRetorno = oWSProxy.Betha.ConsultarSituacaoLoteRps(docXML, empresa.tpAmb); break; case "ConsultarLoteRps": strRetorno = oWSProxy.Betha.ConsultarLoteRps(docXML, empresa.tpAmb); break; case "CancelarNfse": strRetorno = oWSProxy.Betha.CancelarNfse(docXML, empresa.tpAmb); break; case "ConsultarNfse": strRetorno = oWSProxy.Betha.ConsultarNfse(docXML, empresa.tpAmb); break; case "ConsultarNfsePorRps": strRetorno = oWSProxy.Betha.ConsultarNfsePorRps(docXML, empresa.tpAmb); break; case "RecepcionarLoteRps": strRetorno = oWSProxy.Betha.RecepcionarLoteRps(docXML, empresa.tpAmb); break; } break; #endregion #region Padrão ISSONLINE case PadroesNFSe.ISSONLINE: int operacao; string senhaWs = Functions.GetMD5Hash(empresa.SenhaWS); switch (servicoNFSe) { case Servicos.RecepcionarLoteRps: operacao = 1; break; case Servicos.CancelarNfse: operacao = 2; break; default: operacao = 3; break; } strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Convert.ToSByte(operacao), empresa.UsuarioWS, senhaWs, docXML.OuterXml }); break; #endregion #region Padrão Blumenau-SC case PadroesNFSe.BLUMENAU_SC: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Padrão Paulistana case PadroesNFSe.PAULISTANA: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Demais padrões case PadroesNFSe.GINFES: case PadroesNFSe.THEMA: case PadroesNFSe.SALVADOR_BA: case PadroesNFSe.CANOAS_RS: case PadroesNFSe.ISSNET: case PadroesNFSe.DUETO: default: if (string.IsNullOrEmpty(cabecMsg)) { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { docXML.OuterXml }); } else { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { cabecMsg.ToString(), docXML.OuterXml }); } break; #endregion } //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { strRetorno }); // Registra o retorno de acordo com o status obtido if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", caminhoSalvarXmlRetorno }); } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); //Definir o serviço que será executado para a classe Servico = Servicos.NFSeCancelar; try { Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).EnvioXML) + Propriedade.ExtRetorno.CanNfse_ERR); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + NomeArquivoXML); oDadosPedCanNfse = new DadosPedCanNfse(emp); //Ler o XML para pegar parâmetros de envio PedCanNfse(emp, NomeArquivoXML); PadroesNFSe padraoNFSe = Functions.PadraoNFSe(oDadosPedCanNfse.cMunicipio); WebServiceProxy wsProxy = null; object pedCanNfse = null; //Criar objetos das classes dos serviços dos webservices do SEFAZ if (IsUtilizaCompilacaoWs(padraoNFSe)) { wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, oDadosPedCanNfse.cMunicipio, oDadosPedCanNfse.tpAmb, oDadosPedCanNfse.tpEmis, padraoNFSe, oDadosPedCanNfse.cMunicipio); if (wsProxy != null) { pedCanNfse = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); } } System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(oDadosPedCanNfse.cMunicipio, oDadosPedCanNfse.tpAmb, oDadosPedCanNfse.tpEmis, padraoNFSe, Servico); string cabecMsg = ""; switch (padraoNFSe) { case PadroesNFSe.IPM: //código da cidade da receita federal, este arquivo pode ser encontrado em ~\uninfe\doc\Codigos_Cidades_Receita_Federal.xls</para> //O código da cidade está hardcoded pois ainda está sendo usado apenas para campo mourão IPM ipm = new IPM((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, oDadosPedCanNfse.cMunicipio); if (ConfiguracaoApp.Proxy) { ipm.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } ipm.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.ABASE: cabecMsg = "<cabecalho xmlns=\"http://nfse.abase.com.br/nfse.xsd\" versao =\"1.00\"><versaoDados>1.00</versaoDados></cabecalho>"; break; case PadroesNFSe.GINFES: cabecMsg = ""; //Cancelamento ainda tá na versão 2.0 então não tem o cabecMsg break; case PadroesNFSe.BETHA: #region Betha ConteudoXML.PreserveWhitespace = false; ConteudoXML.Load(NomeArquivoXML); if (!ConteudoXML.DocumentElement.Name.Contains("e:")) { padraoNFSe = PadroesNFSe.BETHA202; Components.Betha.NewVersion.Betha betha = new Components.Betha.NewVersion.Betha((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital signbetha = new AssinaturaDigital(); signbetha.Assinar(NomeArquivoXML, emp, 202); betha.CancelarNfse(NomeArquivoXML); } else { wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); wsProxy.Betha = new Betha(); } break; #endregion Betha case PadroesNFSe.ABACO: case PadroesNFSe.CANOAS_RS: cabecMsg = "<cabecalho versao=\"201001\"><versaoDados>V2010</versaoDados></cabecalho>"; break; case PadroesNFSe.BHISS: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.WEBISS: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.WEBISS_202: cabecMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.02\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.PAULISTANA: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosPedCanNfse.tpAmb == 1) { pedCanNfse = new NFe.Components.PSaoPauloSP.LoteNFe(); } else { throw new Exception("Município de São Paulo-SP não dispõe de ambiente de homologação para envio de NFS-e em teste."); } EncryptAssinatura(); break; case PadroesNFSe.DSF: if (oDadosPedCanNfse.cMunicipio == 3549904) { cabecMsg = "<cabecalho versao=\"3\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>3</versaoDados></cabecalho>"; } else { EncryptAssinatura(); } break; case PadroesNFSe.TECNOSISTEMAS: cabecMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" versao=\"20.01\" xmlns=\"http://www.nfse-tecnos.com.br/nfse.xsd\"><versaoDados>20.01</versaoDados></cabecalho>"; break; case PadroesNFSe.FINTEL: cabecMsg = "<cabecalho versao=\"2.02\" xmlns=\"http://iss.irati.pr.gov.br/Arquivos/nfseV202.xsd\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.SYSTEMPRO: SystemPro syspro = new SystemPro((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].X509Certificado, oDadosPedCanNfse.cMunicipio); AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); syspro.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.SIGCORP_SIGISS: SigCorp sigcorp = new SigCorp((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio); sigcorp.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.SIGCORP_SIGISS_203: cabecMsg = "<cabecalho versao=\"2.03\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.03</versaoDados></cabecalho>"; break; case PadroesNFSe.METROPOLIS: #region METROPOLIS Metropolis metropolis = new Metropolis((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital metropolisdig = new AssinaturaDigital(); metropolisdig.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); metropolis.CancelarNfse(NomeArquivoXML); break; #endregion METROPOLIS case PadroesNFSe.FIORILLI: Fiorilli fiorilli = new Fiorilli((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital ass = new AssinaturaDigital(); ass.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); fiorilli.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.SIMPLISS: SimplISS simpliss = new SimplISS((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital sing = new AssinaturaDigital(); sing.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); simpliss.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.CONAM: Conam conam = new Conam((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); conam.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.EGOVERNE: #region E-Governe EGoverne egoverne = new EGoverne((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assegov = new AssinaturaDigital(); assegov.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); egoverne.CancelarNfse(NomeArquivoXML); #endregion E-Governe break; case PadroesNFSe.COPLAN: #region Coplan Coplan coplan = new Coplan((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assCoplan = new AssinaturaDigital(); assCoplan.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); coplan.CancelarNfse(NomeArquivoXML); break; #endregion Coplan case PadroesNFSe.EL: #region E&L EL el = new EL((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyUsuario : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxySenha : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyServidor : "")); el.CancelarNfse(NomeArquivoXML); #endregion E&L break; case PadroesNFSe.GOVDIGITAL: GovDigital govdig = new GovDigital((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].X509Certificado, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital adgovdig = new AssinaturaDigital(); adgovdig.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); govdig.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.BSITBR: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosPedCanNfse.tpAmb == 1) { switch (oDadosPedCanNfse.cMunicipio) { case 5211800: pedCanNfse = new Components.PJaraguaGO.nfseWS(); break; case 5220454: pedCanNfse = new Components.PSenadorCanedoGO.nfseWS(); break; } } else { switch (oDadosPedCanNfse.cMunicipio) { case 5211800: //Jaraguá - GO throw new Exception("Município de Jaraguá-GO não dispõe de ambiente de homologação para envio de NFS-e em teste."); case 5220454: //Senador Canedo - GO throw new Exception("Município de Senador Canedo-GO não dispõe de ambiente de homologação para envio de NFS-e em teste."); } } break; case PadroesNFSe.EQUIPLANO: cabecMsg = "1"; break; case PadroesNFSe.PORTALFACIL_ACTCON_202: cabecMsg = "<cabecalho><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.PORTALFACIL_ACTCON: case PadroesNFSe.PRODATA: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados></cabecalho>"; break; case PadroesNFSe.MGM: #region MGM MGM mgm = new MGM((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); mgm.CancelarNfse(NomeArquivoXML); break; #endregion MGM case PadroesNFSe.NATALENSE: cabecMsg = "<cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" versao=\"1\" xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\"><versaoDados>1</versaoDados></cabecalho>"; break; case PadroesNFSe.CONSIST: #region Consist Consist consist = new Consist((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); consist.CancelarNfse(NomeArquivoXML); break; #endregion Consist case PadroesNFSe.MEMORY: #region Memory Memory memory = new Memory((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); memory.CancelarNfse(NomeArquivoXML); break; #endregion Memory case PadroesNFSe.CAMACARI_BA: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados><versao>2.01</versao></cabecalho>"; break; case PadroesNFSe.NA_INFORMATICA: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); //if (oDadosPedCanNfse.tpAmb == 1) // pedCanNfse = new Components.PCorumbaMS.NfseWSService(); //else // pedCanNfse = new Components.HCorumbaMS.NfseWSService(); break; case PadroesNFSe.PRONIN: if (oDadosPedCanNfse.cMunicipio == 4109401 || oDadosPedCanNfse.cMunicipio == 3131703 || oDadosPedCanNfse.cMunicipio == 4303004 || oDadosPedCanNfse.cMunicipio == 3556602 || oDadosPedCanNfse.cMunicipio == 3512803 || oDadosPedCanNfse.cMunicipio == 4323002 || oDadosPedCanNfse.cMunicipio == 3505807 || oDadosPedCanNfse.cMunicipio == 3530300 || oDadosPedCanNfse.cMunicipio == 4308904 || oDadosPedCanNfse.cMunicipio == 4118501 || oDadosPedCanNfse.cMunicipio == 3554300 || oDadosPedCanNfse.cMunicipio == 3542404 || oDadosPedCanNfse.cMunicipio == 5005707 || oDadosPedCanNfse.cMunicipio == 4314423 || oDadosPedCanNfse.cMunicipio == 3511102 || oDadosPedCanNfse.cMunicipio == 3535804 || oDadosPedCanNfse.cMunicipio == 4306932) { Pronin pronin = new Pronin((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assPronin = new AssinaturaDigital(); assPronin.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); pronin.CancelarNfse(NomeArquivoXML); } break; case PadroesNFSe.EGOVERNEISS: #region EGoverne ISS EGoverneISS egoverneiss = new EGoverneISS((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); egoverneiss.CancelarNfse(NomeArquivoXML); break; #endregion EGoverne ISS case PadroesNFSe.BAURU_SP: Bauru_SP bauru_SP = new Bauru_SP((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio); bauru_SP.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.SMARAPD: if (Empresas.Configuracoes[emp].UnidadeFederativaCodigo == 3201308) //Município de Cariacica-ES { throw new Exception("Município de Cariacica-ES não permite cancelamento de NFS-e via webservice."); } break; case PadroesNFSe.SMARAPD_204: cabecMsg = "<cabecalho versao=\"2.04\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.04</versaoDados></cabecalho>"; break; #region Tinus case PadroesNFSe.TINUS: Tinus tinus = new Tinus((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital tinusAss = new AssinaturaDigital(); tinusAss.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); tinus.CancelarNfse(NomeArquivoXML); break; #endregion Tinus #region SH3 case PadroesNFSe.SH3: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; #endregion SH3 #if _fw46 #region SOFTPLAN case PadroesNFSe.SOFTPLAN: Components.SOFTPLAN.SOFTPLAN softplan = new Components.SOFTPLAN.SOFTPLAN((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].TokenNFse, Empresas.Configuracoes[emp].TokenNFSeExpire, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, Empresas.Configuracoes[emp].ClientID, Empresas.Configuracoes[emp].ClientSecret); AssinaturaDigital softplanAssinatura = new AssinaturaDigital(); softplanAssinatura.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); // Validar o Arquivo XML ValidarXML softplanValidar = new ValidarXML(NomeArquivoXML, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false); string validacao = softplanValidar.ValidarArqXML(NomeArquivoXML); if (validacao != "") { throw new Exception(validacao); } if (ConfiguracaoApp.Proxy) { softplan.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } AssinaturaDigital softplanAss = new AssinaturaDigital(); softplanAss.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio, AlgorithmType.Sha256); softplan.CancelarNfse(NomeArquivoXML); if (Empresas.Configuracoes[emp].TokenNFse != softplan.Token) { Empresas.Configuracoes[emp].SalvarConfiguracoesNFSeSoftplan(softplan.Usuario, softplan.Senha, softplan.ClientID, softplan.ClientSecret, softplan.Token, softplan.TokenExpire, Empresas.Configuracoes[emp].CNPJ); } break; #endregion SOFTPLAN #endif case PadroesNFSe.INTERSOL: cabecMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><p:cabecalho versao=\"1\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:p=\"http://ws.speedgov.com.br/cabecalho_v1.xsd\" xmlns:p1=\"http://ws.speedgov.com.br/tipos_v1.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://ws.speedgov.com.br/cabecalho_v1.xsd cabecalho_v1.xsd \"><versaoDados>1</versaoDados></p:cabecalho>"; break; case PadroesNFSe.JOINVILLE_SC: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosPedCanNfse.tpAmb == 2) { pedCanNfse = new Components.HJoinvilleSC.Servicos(); } else { pedCanNfse = new Components.PJoinvilleSC.Servicos(); } break; case PadroesNFSe.AVMB_ASTEN: cabecMsg = "<cabecalho versao=\"2.02\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.02</versaoDados></cabecalho>"; wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosPedCanNfse.tpAmb == 2) { pedCanNfse = new Components.HPelotasRS.INfseservice(); } else { pedCanNfse = new Components.PPelotasRS.INfseservice(); } break; case PadroesNFSe.EMBRAS: cabecMsg = "<cabecalho versao=\"2.02\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.MODERNIZACAO_PUBLICA: cabecMsg = "<cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.02\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.E_RECEITA: cabecMsg = "<cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.02\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.TIPLAN_203: case PadroesNFSe.INDAIATUBA_SP: cabecMsg = "<cabecalho versao=\"2.03\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.03</versaoDados></cabecalho>"; break; #if _fw46 case PadroesNFSe.ADM_SISTEMAS: cabecMsg = "<cabecalho versao=\"2.01\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.01</versaoDados></cabecalho>"; wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); pedCanNfse = oDadosPedCanNfse.tpAmb == 1 ? new Components.PAmargosaBA.InfseClient(GetBinding(), new EndpointAddress("https://demo.saatri.com.br/servicos/nfse.svc")) : new Components.HAmargosaBA.InfseClient(GetBinding(), new EndpointAddress("https://homologa-demo.saatri.com.br/servicos/nfse.svc")) as object; SignUsingCredentials(emp, pedCanNfse); break; #endif case PadroesNFSe.PUBLIC_SOFT: if (oDadosPedCanNfse.cMunicipio.Equals(2610707)) { cabecMsg = "N9M="; } break; case PadroesNFSe.SIMPLE: Simple simple = new Simple((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); simple.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.SISPMJP: cabecMsg = "<cabecalho versao=\"2.02\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\" ><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.D2TI: cabecMsg = "<cabecalhoCancelamentoNfseLote xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.ctaconsult.com/nfse\"><versao>1.00</versao><ambiente>2</ambiente></cabecalhoCancelamentoNfseLote>"; break; case PadroesNFSe.VERSATECNOLOGIA: VersaTecnologia versa = new VersaTecnologia((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedCanNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assVersa = new AssinaturaDigital(); assVersa.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); versa.CancelarNfse(NomeArquivoXML); break; case PadroesNFSe.IIBRASIL: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.04\"><versaoDados>2.04</versaoDados></cabecalho>"; //wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); //if (oDadosPedCanNfse.tpAmb == 2) //{ // pedCanNfse = new Components.HLimeiraSP.NfseWSService(); //} //else //{ // throw new Exception("Município de São Paulo-SP não dispõe de ambiente de homologação para envio de NFS-e em teste."); //} break; } if (IsInvocar(padraoNFSe, Servico, Empresas.Configuracoes[emp].UnidadeFederativaCodigo)) { //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, oDadosPedCanNfse.cMunicipio); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, pedCanNfse, NomeMetodoWS(Servico, oDadosPedCanNfse.cMunicipio), cabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).EnvioXML, //"-ped-cannfse", Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).RetornoXML, //"-cannfse", padraoNFSe, Servico, securityProtocolType); /// grava o arquivo no FTP string filenameFTP = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).EnvioXML) + Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).RetornoXML); if (File.Exists(filenameFTP)) { new GerarXML(emp).XmlParaFTP(emp, filenameFTP); } } } catch (Exception ex) { var strErro = ex.HResult.ToString(); var strMesagemErro = ex.Message; try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedCanNFSe).EnvioXML, Propriedade.ExtRetorno.CanNfse_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 31/08/2011 RetornoErroERP.GeraArquivoErroERP(NomeArquivoXML, strErro, strMesagemErro, Propriedade.ExtRetorno.CanNfse_ERR); } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de cancelamento de NFe, infelizmente //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido. //Wandrey 31/08/2011 } } }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="oWSProxy">Objeto da classe construida do WSDL</param> /// <param name="oServicoWS">Objeto da classe de envio do XML</param> /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void Invocar(WebServiceProxy oWSProxy, object oServicoWS, string cMetodo, object cabecMsg, object oServicoNFe, string cFinalArqEnvio, string cFinalArqRetorno) { int emp = Empresas.FindEmpresaByThread(); XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = oServicoNFe.GetType(); Servicos servico = (Servicos)oWSProxy.GetProp(oServicoNFe, NFe.Components.NFeStrConstants.Servico); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Exclui o Arquivo de Erro Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err"); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo); string cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { throw new Exception(cResultadoValidacao); } // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); // Definir Proxy if (ConfiguracaoApp.Proxy) { oWSProxy.SetProp(oServicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta)); } // Limpa a variável de retorno XmlNode XmlRetorno = null; string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. oWSProxy.SetProp(oServicoWS, "Timeout", 60000); //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP if (ConfiguracaoApp.ChecarConexaoInternet) { if (!Functions.IsConnectedToInternet()) { //Registrar o erro da validação para o sistema ERP throw new ExceptionSemInternet(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg); } } //Atribuir conteúdo para uma propriedade da classe NfeStatusServico2 if (cMetodo.Substring(0, 3).ToLower() == "sce") // DPEC { oWSProxy.SetProp(oServicoWS, "sceCabecMsgValue", cabecMsg); } else { switch (servico) { case Servicos.MDFePedidoConsultaSituacao: case Servicos.MDFePedidoSituacaoLote: case Servicos.MDFeEnviarLote: case Servicos.MDFeConsultaStatusServico: case Servicos.MDFeRecepcaoEvento: case Servicos.MDFeConsultaNaoEncerrado: oWSProxy.SetProp(oServicoWS, "mdfeCabecMsgValue", cabecMsg); break; case Servicos.CTeInutilizarNumeros: case Servicos.CTePedidoConsultaSituacao: case Servicos.CTePedidoSituacaoLote: case Servicos.CTeEnviarLote: case Servicos.CTeRecepcaoEvento: case Servicos.CTeConsultaStatusServico: if (oWSProxy.GetProp(cabecMsg, NFe.Components.TpcnResources.cUF.ToString()).ToString() == "50") //Mato Grosso do Sul fugiu o padrão nacional { try { oWSProxy.SetProp(oServicoWS, "cteCabecMsg", cabecMsg); } catch //Se der erro é pq não está no ambiente normal então tem que ser o nome padrão pois Mato Grosso do Sul fugiu o padrão nacional. { oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", cabecMsg); } } else { oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", cabecMsg); } break; case Servicos.DFeEnviar: break; /*default: * oWSProxy.SetProp(oServicoWS, "nfeCabecMsgValue", cabecMsg); * break;*/ } } // Envio da NFe Compactada - Renan if (servico == Servicos.NFeEnviarLoteZip2) { XmlNfeDadosMsg = XmlNfeDadosMsg + ".gz"; FileInfo XMLNfeZip = new FileInfo(XmlNfeDadosMsg); string encodedData = StreamExtensions.ToBase64(XMLNfeZip); XmlRetorno = oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { encodedData }); } else { XmlRetorno = oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { docXML }); } if (XmlRetorno == null) { throw new Exception("Erro de envio da solicitação do serviço: " + servico.ToString()); } typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { XmlRetorno.OuterXml }); // Registra o retorno de acordo com o status obtido if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", cFinalArqRetorno + ".xml" }); } }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="oWSProxy">Objeto da classe construida do WSDL</param> /// <param name="oServicoWS">Objeto da classe de envio do XML</param> /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param> /// <param name="cabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void InvocarNFSe(WebServiceProxy oWSProxy, object oServicoWS, string cMetodo, string cabecMsg, object oServicoNFe, string cFinalArqEnvio, string cFinalArqRetorno, PadroesNFSe padraoNFSe, Servicos servicoNFSe) { int emp = Empresas.FindEmpresaByThread(); XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = oServicoNFe.GetType(); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("NomeArquivoXML", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); // Exclui o Arquivo de Erro Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err"); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(XmlNfeDadosMsg, Empresas.Configuracoes[emp].UnidadeFederativaCodigo); string cResultadoValidacao = validar.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { switch (padraoNFSe) { case PadroesNFSe.ISSONLINE4R: break; case PadroesNFSe.SMARAPD: break; default: throw new Exception(cResultadoValidacao); } } // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); // Definir Proxy if (ConfiguracaoApp.Proxy) { if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Proxy", Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta)); } else { oWSProxy.Betha.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } } // Limpa a variável de retorno string strRetorno = string.Empty; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. if (padraoNFSe != PadroesNFSe.BETHA) { oWSProxy.SetProp(oServicoWS, "Timeout", 120000); } //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP if (ConfiguracaoApp.ChecarConexaoInternet) //danasa: 12/2013 { if (!Functions.IsConnectedToInternet()) { //Registrar o erro da validação para o sistema ERP throw new ExceptionSemInternet(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg); } } //Invocar o membro switch (padraoNFSe) { #region Padrão BETHA case PadroesNFSe.BETHA: switch (cMetodo) { case "ConsultarSituacaoLoteRps": strRetorno = oWSProxy.Betha.ConsultarSituacaoLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarLoteRps": strRetorno = oWSProxy.Betha.ConsultarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "CancelarNfse": strRetorno = oWSProxy.Betha.CancelarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarNfse": strRetorno = oWSProxy.Betha.ConsultarNfse(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "ConsultarNfsePorRps": strRetorno = oWSProxy.Betha.ConsultarNfsePorRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; case "RecepcionarLoteRps": strRetorno = oWSProxy.Betha.RecepcionarLoteRps(docXML, Empresas.Configuracoes[emp].AmbienteCodigo); break; } break; #endregion #region Padrão ISSONLINE case PadroesNFSe.ISSONLINE: int operacao; string senhaWs = Functions.GetMD5Hash(Empresas.Configuracoes[emp].SenhaWS); switch (servicoNFSe) { case Servicos.NFSeRecepcionarLoteRps: operacao = 1; break; case Servicos.NFSeCancelar: operacao = 2; break; default: operacao = 3; break; } strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Convert.ToSByte(operacao), Empresas.Configuracoes[emp].UsuarioWS, senhaWs, docXML.OuterXml }); break; #endregion #region Padrão Blumenau-SC case PadroesNFSe.BLUMENAU_SC: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Padrão Paulistana case PadroesNFSe.PAULISTANA: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { 1, docXML.OuterXml }); break; #endregion #region Demais padrões case PadroesNFSe.TECNOSISTEMAS: strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { docXML.OuterXml, cabecMsg.ToString() }); break; case PadroesNFSe.SMARAPD: if (cMetodo == "nfdEntradaCancelar") { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS, TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS), docXML.OuterXml }); } else { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { Empresas.Configuracoes[emp].UsuarioWS, TFunctions.EncryptSHA1(Empresas.Configuracoes[emp].SenhaWS), Empresas.Configuracoes[emp].UnidadeFederativaCodigo, docXML.OuterXml }); } break; case PadroesNFSe.ISSWEB: string versao = docXML.DocumentElement.GetElementsByTagName("Versao")[0].InnerText; string cnpj = docXML.DocumentElement.GetElementsByTagName("CNPJCPFPrestador")[0].InnerText; strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { cnpj, docXML.OuterXml, versao }); break; case PadroesNFSe.GINFES: case PadroesNFSe.THEMA: case PadroesNFSe.SALVADOR_BA: case PadroesNFSe.CANOAS_RS: case PadroesNFSe.ISSNET: default: if (string.IsNullOrEmpty(cabecMsg)) { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { docXML.OuterXml }); } else { strRetorno = oWSProxy.InvokeStr(oServicoWS, cMetodo, new object[] { cabecMsg.ToString(), docXML.OuterXml }); } break; #endregion } #region gerar arquivos assinados(somente debug) #if DEBUG string path = Application.StartupPath + "\\teste_assintura\\"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } StreamWriter sw = new StreamWriter(path + "nfseMsg_assinado.xml", true); sw.Write(docXML.OuterXml); sw.Close(); StreamWriter sw2 = new StreamWriter(path + "cabecMsg_assinado.xml", true); sw2.Write(cabecMsg.ToString()); sw2.Close(); #endif #endregion //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { strRetorno }); // Registra o retorno de acordo com o status obtido if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", cFinalArqRetorno + ".xml" }); } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); //Definir o serviço que será executado para a classe Servico = Servicos.NFSeRecepcionarLoteRps; try { Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).EnvioXML) + Propriedade.ExtRetorno.RetEnvLoteRps_ERR); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + NomeArquivoXML); oDadosEnvLoteRps = new DadosEnvLoteRps(emp); EnvLoteRps(emp, NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ PadroesNFSe padraoNFSe = Functions.PadraoNFSe(oDadosEnvLoteRps.cMunicipio); WebServiceProxy wsProxy = null; object envLoteRps = null; if (IsUtilizaCompilacaoWs(padraoNFSe, Servico, oDadosEnvLoteRps.cMunicipio)) { wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis, padraoNFSe, oDadosEnvLoteRps.cMunicipio); if (wsProxy != null) { envLoteRps = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); } } System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis, padraoNFSe, Servico); string cabecMsg = ""; switch (padraoNFSe) { case PadroesNFSe.IPM: //código da cidade da receita federal, este arquivo pode ser encontrado em ~\uninfe\doc\Codigos_Cidades_Receita_Federal.xls</para> //O código da cidade está hardcoded pois ainda está sendo usado apenas para campo mourão IPM ipm = new IPM((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, oDadosEnvLoteRps.cMunicipio); if (ConfiguracaoApp.Proxy) { ipm.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } ipm.EmiteNF(NomeArquivoXML, false); break; case PadroesNFSe.GINFES: switch (oDadosEnvLoteRps.cMunicipio) { case 2304400: //Fortaleza - CE cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; case 4125506: //São José dos Pinhais - PR cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://nfe.sjp.pr.gov.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; default: cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; } break; case PadroesNFSe.ABASE: cabecMsg = "<cabecalho xmlns=\"http://nfse.abase.com.br/nfse.xsd\" versao =\"1.00\"><versaoDados>1.00</versaoDados></cabecalho>"; break; case PadroesNFSe.BETHA: #region Betha string versao = Functions.GetAttributeXML("LoteRps", "versao", NomeArquivoXML); if (versao.Equals("2.02")) { padraoNFSe = PadroesNFSe.BETHA202; Components.Betha.NewVersion.Betha betha = new Components.Betha.NewVersion.Betha((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital signbetha = new AssinaturaDigital(); signbetha.Assinar(NomeArquivoXML, emp, 202); if (GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.BETHA202) == Servicos.NFSeRecepcionarLoteRpsSincrono) { betha.EmiteNFSincrono(NomeArquivoXML); } else { betha.EmiteNF(NomeArquivoXML); } } else { wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); wsProxy.Betha = new Betha(); } break; #endregion Betha case PadroesNFSe.ABACO: case PadroesNFSe.CANOAS_RS: cabecMsg = "<cabecalho versao=\"201001\"><versaoDados>V2010</versaoDados></cabecalho>"; break; case PadroesNFSe.BLUMENAU_SC: EncryptAssinatura(); break; case PadroesNFSe.BHISS: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.BHISS); break; case PadroesNFSe.SH3: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.SH3); break; case PadroesNFSe.WEBISS: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.WEBISS_202: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.WEBISS_202); cabecMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.02\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.PAULISTANA: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosEnvLoteRps.tpAmb == 1) { envLoteRps = new Components.PSaoPauloSP.LoteNFe(); } else { throw new Exception("Município de São Paulo-SP não dispõe de ambiente de homologação para envio de NFS-e em teste."); } EncryptAssinatura(); break; case PadroesNFSe.NA_INFORMATICA: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.VVISS); wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); //if (oDadosEnvLoteRps.tpAmb == 1) // envLoteRps = new Components.PCorumbaMS.NfseWSService(); //else // envLoteRps = new Components.HCorumbaMS.NfseWSService(); break; case PadroesNFSe.BSITBR: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.BSITBR); wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosEnvLoteRps.tpAmb == 1) { envLoteRps = new Components.PJaraguaGO.nfseWS(); } else { throw new Exception("Município de Jaraguá-GO não dispõe de ambiente de homologação para envio de NFS-e em teste."); } break; case PadroesNFSe.PORTOVELHENSE: cabecMsg = "<cabecalho versao=\"2.00\" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\"><versaoDados>2.00</versaoDados></cabecalho>"; break; case PadroesNFSe.DSF: EncryptAssinatura(); break; case PadroesNFSe.TECNOSISTEMAS: cabecMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" versao=\"20.01\" xmlns=\"http://www.nfse-tecnos.com.br/nfse.xsd\"><versaoDados>20.01</versaoDados></cabecalho>"; break; case PadroesNFSe.FINTEL: cabecMsg = "<cabecalho versao=\"2.02\" xmlns=\"http://iss.irati.pr.gov.br/Arquivos/nfseV202.xsd\"><versaoDados>2.02</versaoDados></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.FINTEL); break; case PadroesNFSe.PORTALFACIL_ACTCON: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.PORTALFACIL_ACTCON); break; case PadroesNFSe.PORTALFACIL_ACTCON_202: cabecMsg = "<cabecalho><versaoDados>2.02</versaoDados></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.PORTALFACIL_ACTCON_202); break; case PadroesNFSe.SYSTEMPRO: #region SystemPro SystemPro syspro = new SystemPro((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); syspro.EmiteNF(NomeArquivoXML); break; #endregion SystemPro case PadroesNFSe.SIGCORP_SIGISS: #region SigCorp SigCorp sigcorp = new SigCorp((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio); sigcorp.EmiteNF(NomeArquivoXML); break; #endregion SigCorp case PadroesNFSe.FIORILLI: #region Fiorilli Fiorilli fiorilli = new Fiorilli((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital ass = new AssinaturaDigital(); ass.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); // Validar o Arquivo XML ValidarXML validar = new ValidarXML(NomeArquivoXML, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false); string resValidacao = validar.ValidarArqXML(NomeArquivoXML); if (resValidacao != "") { throw new Exception(resValidacao); } fiorilli.EmiteNF(NomeArquivoXML); break; #endregion Fiorilli case PadroesNFSe.SIMPLISS: #region Simpliss SimplISS simpliss = new SimplISS((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital sign = new AssinaturaDigital(); sign.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); simpliss.EmiteNF(NomeArquivoXML); break; #endregion Simpliss case PadroesNFSe.CONAM: #region Conam Conam conam = new Conam((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); conam.EmiteNF(NomeArquivoXML); break; #endregion Conam case PadroesNFSe.RLZ_INFORMATICA: #region RLZ Rlz_Informatica rlz = new Rlz_Informatica((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio); rlz.EmiteNF(NomeArquivoXML); break; #endregion RLZ case PadroesNFSe.EGOVERNE: #region E-Governe EGoverne egoverne = new EGoverne((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assEGovoverne = new AssinaturaDigital(); assEGovoverne.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); egoverne.EmiteNF(NomeArquivoXML); break; #endregion E-Governe case PadroesNFSe.EL: #region E&L EL el = new EL((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyUsuario : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxySenha : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyServidor : "")); el.EmiteNF(NomeArquivoXML); break; #endregion E&L case PadroesNFSe.GOVDIGITAL: #region GOV-Digital GovDigital govdig = new GovDigital((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].X509Certificado, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital adgovdig = new AssinaturaDigital(); adgovdig.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); govdig.EmiteNF(NomeArquivoXML); break; #endregion GOV-Digital case PadroesNFSe.EQUIPLANO: cabecMsg = "1"; break; case PadroesNFSe.NATALENSE: cabecMsg = "<cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" versao=\"1\" xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\"><versaoDados>1</versaoDados></cabecalho>"; break; case PadroesNFSe.PRODATA: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados></cabecalho>"; break; case PadroesNFSe.VVISS: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.VVISS); break; case PadroesNFSe.ELOTECH: #region EloTech EloTech elotech = new EloTech((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); elotech.EmiteNF(NomeArquivoXML); break; #endregion EloTech case PadroesNFSe.METROPOLIS: #region METROPOLIS Metropolis metropolis = new Metropolis((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital metropolisdig = new AssinaturaDigital(); metropolisdig.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); metropolis.EmiteNF(NomeArquivoXML); break; #endregion METROPOLIS case PadroesNFSe.MGM: #region MGM MGM mgm = new MGM((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); mgm.EmiteNF(NomeArquivoXML); break; #endregion MGM case PadroesNFSe.CONSIST: #region Consist Consist consist = new Consist((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); consist.EmiteNF(NomeArquivoXML); break; #endregion Consist case PadroesNFSe.NOTAINTELIGENTE: #region Nota Inteligente wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); if (oDadosEnvLoteRps.tpAmb == 1) { //envLoteRps = new NFe.Components.PClaudioMG.api_portClient(); } else { throw new Exception("Município de São Paulo-SP não dispõe de ambiente de homologação para envio de NFS-e em teste."); } #endregion Nota Inteligente break; case PadroesNFSe.COPLAN: #region Coplan Coplan coplan = new Coplan((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assCoplan = new AssinaturaDigital(); assCoplan.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); coplan.EmiteNF(NomeArquivoXML); break; #endregion Coplan case PadroesNFSe.FREIRE_INFORMATICA: cabecMsg = "<cabecalho xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"2.02\"><versaoDados>2.02</versaoDados></cabecalho>"; break; case PadroesNFSe.MEMORY: #region Memory Memory memory = new Memory((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital sigMem = new AssinaturaDigital(); sigMem.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); memory.EmiteNF(NomeArquivoXML); break; #endregion Memory case PadroesNFSe.CAMACARI_BA: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.CAMACARI_BA); cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados><versao>2.01</versao></cabecalho>"; break; case PadroesNFSe.CARIOCA: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.CARIOCA); break; case PadroesNFSe.PRONIN: if (oDadosEnvLoteRps.cMunicipio == 4109401 || oDadosEnvLoteRps.cMunicipio == 3131703 || oDadosEnvLoteRps.cMunicipio == 4303004) { Pronin pronin = new Pronin((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assPronin = new AssinaturaDigital(); assPronin.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); pronin.EmiteNF(NomeArquivoXML); } break; case PadroesNFSe.EGOVERNEISS: #region EGoverne ISS EGoverneISS egoverneiss = new EGoverneISS((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); egoverneiss.EmiteNF(NomeArquivoXML); break; #endregion EGoverne ISS case PadroesNFSe.SUPERNOVA: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.SUPERNOVA); break; case PadroesNFSe.MARINGA_PR: Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.MARINGA_PR); break; case PadroesNFSe.BAURU_SP: #region BAURU_SP Bauru_SP bauru_SP = new Bauru_SP((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio); bauru_SP.EmiteNF(NomeArquivoXML); break; #endregion BAURU_SP #region Tinus case PadroesNFSe.TINUS: Tinus tinus = new Tinus((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosEnvLoteRps.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital tinusAss = new AssinaturaDigital(); tinusAss.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); tinus.EmiteNF(NomeArquivoXML); break; #endregion Tinus #region SOFTPLAN case PadroesNFSe.SOFTPLAN: SOFTPLAN softplan = new SOFTPLAN((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, Empresas.Configuracoes[emp].ClientID, Empresas.Configuracoes[emp].ClientSecret); AssinaturaDigital softplanAssinatura = new AssinaturaDigital(); softplanAssinatura.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); // Validar o Arquivo XML ValidarXML softplanValidar = new ValidarXML(NomeArquivoXML, Empresas.Configuracoes[emp].UnidadeFederativaCodigo, false); string validacao = softplanValidar.ValidarArqXML(NomeArquivoXML); if (validacao != "") { throw new Exception(validacao); } if (ConfiguracaoApp.Proxy) { softplan.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); } AssinaturaDigital softplanAss = new AssinaturaDigital(); softplanAss.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio, AlgorithmType.Sha256); softplan.EmiteNF(NomeArquivoXML); break; #endregion SOFTPLAN case PadroesNFSe.INTERSOL: cabecMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><p:cabecalho versao=\"1\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:p=\"http://ws.speedgov.com.br/cabecalho_v1.xsd\" xmlns:p1=\"http://ws.speedgov.com.br/tipos_v1.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://ws.speedgov.com.br/cabecalho_v1.xsd cabecalho_v1.xsd \"><versaoDados>1</versaoDados></p:cabecalho>"; break; } if (IsInvocar(padraoNFSe, Servico, oDadosEnvLoteRps.cMunicipio)) { //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, envLoteRps, NomeMetodoWS(Servico, oDadosEnvLoteRps.cMunicipio), cabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).RetornoXML, padraoNFSe, Servico, securityProtocolType); /// /// grava o arquivo no FTP string filenameFTP = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).EnvioXML) + "\\" + Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).RetornoXML); if (File.Exists(filenameFTP)) { new GerarXML(emp).XmlParaFTP(emp, filenameFTP); } } } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.EnvLoteRps).EnvioXML, Propriedade.ExtRetorno.RetEnvLoteRps_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 31/08/2011 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de cancelamento de NFe, infelizmente //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido. //Wandrey 31/08/2011 } } }
private void cmdInutilizar_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; string retValidar = string.Empty; string retTransmitir = string.Empty; txtResultado.Text = string.Empty; GerarXML geraxml = new GerarXML(); TransmitirXML transmitir = new TransmitirXML(); ValidarXML validarXml = new ValidarXML(); AssinarXML assinar = new AssinarXML(); StreamWriter Grava; try { //Gerando xml xmlInut = geraxml.InutilizacaoNFe(Convert.ToInt32(txtNFInicial.Text), Convert.ToInt32(txtNFInicial.Text), p.serienfiscal, "Erro interno do sistema", p.modelo); //Assinando xml xmlInut_Assinado = assinar.AssinaXML(xmlInut.InnerXml, "infInut", Certificado.getInstance.oCertificado); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao assinar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } try { // Validando o XML retValidar = validarXml.Valida(xmlInut_Assinado, "Inut"); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao validar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } if (retValidar == string.Empty) { try { //Recebendo xml de retorno da transmissão retTransmitir = transmitir.XML_InutilizacaoNFCe4(xmlInut_Assinado, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument retxml = new XmlDocument(); retxml.LoadXml(retTransmitir); //Lote Processado if (retxml.GetElementsByTagName("cStat")[0].InnerText == "102") { try { XMLDao xmlDao = new XMLDao(); p.xml.numdoc = p.numdoc; p.xml.data = DateTime.Now; p.xml.arquivoXML = retxml.InnerXml; p.xml.Modelo = p.modelo; p.xml.statNFCe = "102"; if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLInutilizado)) { //Salvando o arquivo XML na pasta selecionada no FORM Parametros > aba Arquivos Grava = File.CreateText(Controle.getInstance.caminho_XMLInutilizado + @"\NOTA " + p.nfiscal + " - INUTILIZADA.xml"); Grava.Write(p.xml.arquivoXML); Grava.Close(); } //Atualizando o status do pedido para inutilizada (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, "102"); using (var db = new Database("stringConexao")) { try { db.BeginTransaction(); foreach (PedidoItem pItem in p.lstPedidoItem) { db.Update("UPDATE produto " + "SET Estoque = Estoque + " + pItem.qtditens * 1 + ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") + " WHERE CodPro = " + pItem.codpro); } //Boleta cancelada db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } txtResultado.AppendText("Nota Fiscal inutilizada com sucesso!"); txtResultado.ForeColor = Color.Green; } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Nota Fiscal inutilizada com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Maroon; } } else { txtResultado.AppendText("Erro ao transmitir XML (002): " + retxml.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } else { txtResultado.AppendText("Erro ao transmitir XML (001): " + retTransmitir + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao finalizar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } this.Cursor = Cursors.Default; }
// ======================================================================== private bool Gera_NFCe(Pedido pedido) { var msg = new StringBuilder(); XmlDocument xmlNFe = new XmlDocument(); XmlDocument xmlNFe_Assinado = new XmlDocument(); GerarXML gerarXml = new GerarXML(); AssinarXML assinarXml = new AssinarXML(); ValidarXML validarXml = new ValidarXML(); TransmitirXML transmitirXml = new TransmitirXML(); Email email = new Email(); XMLDao xmlDao = new XMLDao(); StreamWriter Grava; string retValidar; string strProc; string strXmlProcNfe; string retTransmitir; string cStatus_LoteProcessado; string cStatus_Autorizado; int nPosI; int nPosF; try { retTransmitir = string.Empty; retValidar = string.Empty; cStatus_LoteProcessado = string.Empty; cStatus_Autorizado = string.Empty; try { // Gerando o XML xmlNFe = (gerarXml.NFe(pedido)); //MensagemSistema("Arquivo Gerado ...", Color.OliveDrab); // Assinando o XML xmlNFe_Assinado = assinarXml.AssinaXML(xmlNFe.InnerXml, "infNFe", Certificado.getInstance.oCertificado); } catch (Exception ex) { MessageBox.Show("** Erro ao ASSINAR XML NFC-e, tente novamente **" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } try { // Validando o XML retValidar = validarXml.Valida(xmlNFe_Assinado, "NFe"); //Inserindo a URL QRCode no xml já assinado xmlNFe_Assinado.LoadXml(xmlNFe_Assinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" + gerarXml.Gera_Url_QRCode(xmlNFe_Assinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>")); } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("** Erro ao VALIDAR XML NFC-e **" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } if (retValidar == string.Empty) { try { //MensagemSistema("Enviando a NFC-e", Color.OliveDrab); // Recebendo o XML de retorno da transmissão retTransmitir = transmitirXml.XML_NFCe4(xmlNFe_Assinado, pedido.nfiscal, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument xmlRetorno = new XmlDocument(); xmlRetorno.LoadXml(retTransmitir); // Lote processado if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104") { // Autorizado if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100") { try { //MensagemSistema("Autorizado o uso da NFC-e", Color.OliveDrab); pedido.chave = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText; pedido.protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText; // Separar somente o conteúdo a partir da tag <protNFe> até </protNFe> nPosI = retTransmitir.IndexOf("<protNFe"); nPosF = retTransmitir.Length - (nPosI + 13); strProc = retTransmitir.Substring(nPosI, nPosF); // XML pronto para salvar strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.0"">" + xmlNFe_Assinado.InnerXml + strProc + "</nfeProc>"; pedido.xml = new XML { numdoc = pedido.numdoc, arquivoXML = strXmlProcNfe, data = DateTime.Now, Modelo = pedido.modelo, statNFCe = "100" }; //Salva arquivo XML no Banco SQL (NFe) if (xmlDao.Grava_XML(pedido.xml)) { // Atualizando o pedido com a Chave, Protocolo, e statNFCe if ((new PedidoDao()).Update_ChaveProtocolo_condDoc_StatNFCe(pedido.numdoc, pedido.chave, pedido.protocolo, pedido.xml.statNFCe)) { if (GerarXML.str_Ambiente == "1") { if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLAutorizado)) { //Salvando o arquivo XML na pasta Grava = File.CreateText(Controle.getInstance.caminho_XMLAutorizado.Remove(Controle.getInstance.caminho_XMLAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.chave + "-procNfe.xml"); Grava.Write(pedido.xml.arquivoXML); Grava.Close(); } } } } } catch (Exception ex) { MessageBox.Show("** NOTA EMITIDA **, mas houve um erro inesperado" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(004) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** NOTA EMITIDA **, mas houve um erro inesperado"); msg.Append(Environment.NewLine); msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(003) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** Erro ao Transmitir(003) XML NFC-e**"); msg.Append(Environment.NewLine); msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(002) XML NFC-e" + Environment.NewLine + retTransmitir, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** Erro ao Transmitir(002) XML NFC-e **"); msg.Append(Environment.NewLine); msg.Append(retTransmitir); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } catch (Exception ex) { MessageBox.Show("Erro ao Transmitir(001) XML NFC-e" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { MessageBox.Show("Erro ao validar XML NFC-e" + Environment.NewLine + retValidar, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Ocorreu um erro inesperado, informe ao administrador do sistema!" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } return(true); }