public override void Execute() { int emp = Empresas.FindEmpresaByThread(); //Definir o serviço que será executado para a classe Servico = Servicos.NFSeConsultarNFSePNG; try { oDadosPedNfsePNG = new DadosPedSitNfse(emp); //Ler o XML para pegar parâmetros de envio PedNFSePNG(NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ PadroesNFSe padraoNFSe = Functions.PadraoNFSe(oDadosPedNfsePNG.cMunicipio); WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, oDadosPedNfsePNG.cMunicipio, oDadosPedNfsePNG.tpAmb, oDadosPedNfsePNG.tpEmis, padraoNFSe); object pedNfsePNG = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); string cabecMsg = ""; //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, Convert.ToInt32(oDadosPedNfsePNG.cMunicipio)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, pedNfsePNG, NomeMetodoWS(Servico, oDadosPedNfsePNG.cMunicipio), cabecMsg, this, "-ped-nfsepng", "-nfsepng", padraoNFSe, Servico); /// /// grava o arquivo no FTP string filenameFTP = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.ExtEnvio.PedNFSePNG) + Propriedade.ExtRetorno.NFSePNG); 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.ExtEnvio.PedNFSePNG, Propriedade.ExtRetorno.NFSePNG_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 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosPedInut = new DadosPedInut(emp); PedInut(emp, NomeArquivoXML); //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oInutilizacao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS);//NomeClasseWS(Servico, dadosPedInut.cUF)); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedInut.cUF, Servico)); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosPedInut.cUF.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLCTeInut); //Criar objeto da classe de assinatura digita AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(dadosPedInut.cUF)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oInutilizacao, wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, dadosPedInut.cUF), oCabecMsg, this, "-ped-inu", "-inu"); //Ler o retorno do webservice this.LerRetornoInut(); } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedInu_XML, Propriedade.ExtRetorno.Inu_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 09/03/2010 } } }
/// <summary> /// Realiza efetivamente o teste assinando o XML de simualação /// </summary> /// <param name="provider">Objeto com as informaçoes do provider que será testado</param> /// <returns></returns> public bool TestarProvider(CertProviders provider) { bool result = false; this.SimularXML(provider); AssinaturaDigital assinatura = new AssinaturaDigital(); assinatura.TesteCertificado = true; result = assinatura.TestarProviderCertificado(TempFile, "SimulacaoProvider", "Provider", Certificado, CodEmp, PIN); ApagarXMLTeste(); return(result); }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); //Definir o serviço que será executado para a classe Servico = Servicos.NFSeConsultar; try { oDadosPedSitNfse = new DadosPedSitNfse(emp); //Ler o XML para pegar parâmetros de envio PedSitNfse(NomeArquivoXML); //Criar objetos das classes dos serviços dos webservices do SEFAZ PadroesNFSe padraoNFSe = Functions.PadraoNFSe(oDadosPedSitNfse.cMunicipio); WebServiceProxy wsProxy = null; object pedLoteRps = null; if (IsUtilizaCompilacaoWs(padraoNFSe)) { wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, oDadosPedSitNfse.cMunicipio, oDadosPedSitNfse.tpAmb, oDadosPedSitNfse.tpEmis, padraoNFSe); pedLoteRps = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); } string cabecMsg = ""; switch (padraoNFSe) { case PadroesNFSe.GINFES: if (oDadosPedSitNfse.cMunicipio == 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>"; else cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; case PadroesNFSe.BETHA: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); wsProxy.Betha = new Betha(); break; 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.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.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 xmlns=\"http://iss.pontagrossa.pr.gov.br/Arquivos/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.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, oDadosPedSitNfse.cMunicipio); syspro.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.SIGCORP_SIGISS: SigCorp sigCorp = new SigCorp((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio); sigCorp.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.SIMPLISS: SimplISS simpliss = new SimplISS((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); simpliss.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.CONAM: Conam conam = new Conam((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); conam.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.RLZ_INFORMATICA: Rlz_Informatica rlz = new Rlz_Informatica((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio); rlz.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.EGOVERNE: #region E-Governe EGoverne egoverne = new EGoverne((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor, Empresas.Configuracoes[emp].X509Certificado); AssinaturaDigital assegov = new AssinaturaDigital(); assegov.Assinar(NomeArquivoXML, emp, oDadosPedSitNfse.cMunicipio); egoverne.ConsultarNfse(NomeArquivoXML); #endregion break; case PadroesNFSe.EL: #region E&L EL el = new EL((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyUsuario : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxySenha : ""), (ConfiguracaoApp.Proxy ? ConfiguracaoApp.ProxyServidor : "")); el.ConsultarNfse(NomeArquivoXML); break; #endregion case PadroesNFSe.GOVDIGITAL: GovDigital govdig = new GovDigital((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, Empresas.Configuracoes[emp].X509Certificado, oDadosPedSitNfse.cMunicipio, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); AssinaturaDigital adgovdig = new AssinaturaDigital(); adgovdig.Assinar(NomeArquivoXML, emp, oDadosPedSitNfse.cMunicipio); govdig.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.EQUIPLANO: cabecMsg = "1"; break; case PadroesNFSe.PRODATA: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados></cabecalho>"; break; case PadroesNFSe.FISSLEX: FISSLEX fisslex = new FISSLEX((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyServidor); fisslex.ConsultarNfse(NomeArquivoXML); break; case PadroesNFSe.MGM: #region MGM MGM mgm = new MGM((TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo, Empresas.Configuracoes[emp].PastaXmlRetorno, oDadosPedSitNfse.cMunicipio, Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS); mgm.ConsultarNfse(NomeArquivoXML); break; #endregion case PadroesNFSe.NATALENSE: cabecMsg = "<cabecalho><versaoDados>2.01</versaoDados></cabecalho>"; break; } if (IsUtilizaCompilacaoWs(padraoNFSe, Servico)) { //Assinar o XML AssinaturaDigital ad = new AssinaturaDigital(); ad.Assinar(NomeArquivoXML, emp, oDadosPedSitNfse.cMunicipio); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.InvocarNFSe(wsProxy, pedLoteRps, NomeMetodoWS(Servico, oDadosPedSitNfse.cMunicipio), cabecMsg, this, "-ped-sitnfse", "-sitnfse", padraoNFSe, Servico); /// /// grava o arquivo no FTP string filenameFTP = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.ExtEnvio.PedSitNfse) + Propriedade.ExtRetorno.SitNfse); 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.ExtEnvio.PedSitNfse, Propriedade.ExtRetorno.SitNfse_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 btn_Validar_Click(object sender, EventArgs e) { LimparEPosicionarTC(); try { if (this.edtFilename.Text == "" || !File.Exists(this.edtFilename.Text)) { this.textBox_resultado.Text = "Arquivo não encontrado."; return; } //Copiar o arquivo XML para temporários para assinar e depois vou validar o que está nos temporários FileInfo oArquivo = new FileInfo(this.edtFilename.Text); string cArquivo = System.IO.Path.GetTempPath() + oArquivo.Name; oArqDestino = new FileInfo(cArquivo); oArquivo.CopyTo(cArquivo, true); //Remover atributo de somente leitura que pode gerar problemas no acesso do arquivo NFe.Service.TFunctions.RemoveSomenteLeitura(cArquivo); NFe.Service.TaskValidar val = new Service.TaskValidar(); val.NomeArquivoXML = oArqDestino.FullName; val.Execute(); //Detectar o tipo do arquivo NFe.Validate.ValidarXML validarXML = new NFe.Validate.ValidarXML(cArquivo, Empresas.Configuracoes[Emp].UnidadeFederativaCodigo); this.textBox_resultado.Text = validarXML.TipoArqXml.cRetornoTipoArq; if (validarXML.TipoArqXml.nRetornoTipoArq >= 1 && validarXML.TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { this.edtTipoarquivo.Text = validarXML.TipoArqXml.cRetornoTipoArq; //Assinar o arquivo XML copiado para a pasta TEMP bool lValidar = false; AssinaturaDigital oAD = new AssinaturaDigital(); try { validarXML.EncryptAssinatura(cArquivo); //danasa: 12/2013 oAD.Assinar(cArquivo, Emp, Empresas.Configuracoes[Emp].UnidadeFederativaCodigo); lValidar = true; } catch (Exception ex) { lValidar = false; this.textBox_resultado.Text = "Ocorreu um erro ao tentar assinar o XML: \r\n\r\n" + validarXML.TipoArqXml.cRetornoTipoArq + "\r\n" + ex.Message; } if (lValidar == true) { //Validar o arquivo if (validarXML.TipoArqXml.nRetornoTipoArq >= 1 && validarXML.TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { ///danasa: 12/2013 validarXML.ValidarArqXML(cArquivo); if (string.IsNullOrEmpty(validarXML.TipoArqXml.cArquivoSchema)) { this.textBox_resultado.Text = "XML não possui schema de validação, sendo assim não é possível validar XML"; } else if (validarXML.Retorno == 0) { this.textBox_resultado.Text = "Arquivo validado com sucesso!"; } else { this.textBox_resultado.Text = "XML INCONSISTENTE!\r\n\r\n" + validarXML.RetornoString; } } else { //this.textBox_tipoarq.Text = validarXML.TipoArqXml.cRetornoTipoArq; this.textBox_resultado.Text = "XML INCONSISTENTE!\r\n\r\n" + validarXML.TipoArqXml.cRetornoTipoArq; } } } try { if (wb == null) { wb = new WebBrowser(); wb.Parent = this.metroTabPage2; wb.Dock = DockStyle.Fill; wb.DocumentCompleted += webBrowser1_DocumentCompleted; } wb.Navigate(cArquivo); } catch { webBrowser1_DocumentCompleted(null,null); } } catch (Exception ex) { this.textBox_resultado.Text = ex.Message + "\r\n" + ex.StackTrace; } }
/// <summary> /// Efetua a validação de qualquer XML, NFE, Cancelamento, Inutilização, etc..., e retorna se está ok ou não /// </summary> /// <param name="Arquivo">Nome do arquivo XML a ser validado e assinado</param> /// <param name="PastaValidar">Nome da pasta onde fica os arquivos a serem validados</param> /// <param name="PastaXMLErro">Nome da pasta onde é para gravar os XML´s validados que apresentaram erro.</param> /// <param name="PastaXMLRetorno">Nome da pasta de retorno onde será gravado o XML com o status da validação</param> /// <param name="Certificado">Certificado digital a ser utilizado na validação</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>28/05/2009</date> public void ValidarAssinarXML(string Arquivo) { int emp = Empresas.FindEmpresaByThread(); Boolean Assinou = true; //Assinar o XML se tiver tag para assinar AssinaturaDigital oAD = new AssinaturaDigital(); try { if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { this.EncryptAssinatura(Arquivo); //danasa: 12/2013 oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo); Assinou = true; } } catch (Exception ex) { Assinou = false; try { GravarXMLRetornoValidacao(Arquivo, "2", "Ocorreu um erro ao assinar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } if (Assinou) { #region Adicionar a tag do qrCode na NFCe if (Arquivo.EndsWith(Propriedade.ExtEnvio.Nfe, StringComparison.InvariantCultureIgnoreCase)) { if (!String.IsNullOrEmpty(Empresas.Configuracoes[emp].IndentificadorCSC)) { QRCode qrCode = new QRCode(Empresas.Configuracoes[emp].IndentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, Arquivo); if (qrCode.CalcularLink()) { string url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)NFe.Components.TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe; qrCode.GerarLinkConsulta(url); qrCode.AddLinkQRCode(); } } } #endregion // Validar o Arquivo XML if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID) { try { Validar(Arquivo); if (Retorno != 0) { this.GravarXMLRetornoValidacao(Arquivo, "3", "Ocorreu um erro ao validar o XML: " + RetornoString); new Auxiliar().MoveArqErro(Arquivo); } else { if (!Directory.Exists(Empresas.Configuracoes[emp].PastaValidado)) { Directory.CreateDirectory(Empresas.Configuracoes[emp].PastaValidado); } string ArquivoNovo = Empresas.Configuracoes[emp].PastaValidado + "\\" + Functions.ExtrairNomeArq(Arquivo, ".xml") + ".xml"; Functions.Move(Arquivo, ArquivoNovo); /* if (File.Exists(ArquivoNovo)) { FileInfo oArqNovo = new FileInfo(ArquivoNovo); oArqNovo.Delete(); } FileInfo oArquivo = new FileInfo(Arquivo); oArquivo.MoveTo(ArquivoNovo); */ this.GravarXMLRetornoValidacao(Arquivo, "1", "XML assinado e validado com sucesso."); } } catch (Exception ex) { try { this.GravarXMLRetornoValidacao(Arquivo, "4", "Ocorreu um erro ao validar o XML: " + ex.Message); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } else { try { this.GravarXMLRetornoValidacao(Arquivo, "5", "Ocorreu um erro ao validar o XML: " + TipoArqXml.cRetornoTipoArq); new Auxiliar().MoveArqErro(Arquivo); } catch { //Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada. //Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010 } } } }
/// <summary> /// Assinar e validar o XML da Nota Fiscal Eletrônica e move para a pasta de assinados /// </summary> /// <param name="pasta">Nome da pasta onde está o XML a ser validado e assinado</param> /// <returns>true = Conseguiu assinar e validar</returns> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 03/04/2009 /// </remarks> public void AssinarValidarXMLNFe(string pasta) { int emp = Empresas.FindEmpresaByThread(); //Criar Pasta dos XML´s a ser enviado em Lote já assinados string pastaLoteAssinado = pasta + Propriedade.NomePastaXMLAssinado; //Se o arquivo XML já existir na pasta de assinados, vou avisar o ERP que já tem um em andamento string arqDestino = pastaLoteAssinado + "\\" + Functions.ExtrairNomeArq(NomeArquivoXML, ".xml") + ".xml"; try { //Fazer uma leitura de algumas tags do XML DadosNFeClass dadosNFe = this.LerXMLNFe(NomeArquivoXML); string ChaveNfe = dadosNFe.chavenfe; string TpEmis = dadosNFe.tpEmis; //Inserir NFe no XML de controle do fluxo FluxoNfe oFluxoNfe = new FluxoNfe(); if (oFluxoNfe.NfeExiste(ChaveNfe)) { //Mover o arquivo da pasta em processamento para a pasta de XML´s com erro oAux.MoveArqErro(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + Functions.ExtrairNomeArq(NomeArquivoXML, ".xml") + ".xml"); //Deletar a NFE do arquivo de controle de fluxo oFluxoNfe.ExcluirNfeFluxo(ChaveNfe); //Vou forçar uma exceção, e o ERP através do inicio da mensagem de erro pode tratar e já gerar uma consulta //situação para finalizar o processo. Assim envito perder os XML´s que estão na pasta EmProcessamento //tendo assim a possibilidade de gerar o -procNfe.XML através da consulta situação. //Wandrey 08/10/2009 //throw new Exception("NFE NO FLUXO: Esta nota fiscal já está na pasta de Notas Fiscais em processo de envio, desta forma não é possível envia-la novamente. Se a nota fiscal estiver presa no fluxo de envio sem conseguir finalizar o processo, gere um consulta situação da NFe para forçar a finalização.\r\n" + NomeArquivoXML); } else { //Deletar o arquivo XML da pasta de temporários de XML´s com erros se o mesmo existir Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + Functions.ExtrairNomeArq(NomeArquivoXML, ".xml") + ".xml"); } //Validações gerais ValidacoesGeraisXMLNFe(NomeArquivoXML, dadosNFe); //Assinar o arquivo XML AssinaturaDigital assDig = new AssinaturaDigital(); assDig.Assinar(NomeArquivoXML, emp, Convert.ToInt32(dadosNFe.cUF)); //Adicionar a tag do QRCode if (!String.IsNullOrEmpty(Empresas.Configuracoes[emp].IndentificadorCSC) && dadosNFe.mod == "65") { QRCode qrCode = new QRCode(Empresas.Configuracoes[emp].IndentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, NomeArquivoXML); if (qrCode.CalcularLink()) { string url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)NFe.Components.TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe; qrCode.GerarLinkConsulta(url); qrCode.AddLinkQRCode(); } } // Validar o Arquivo XML da NFe com os Schemas se estiver assinado ValidarXML validar = new ValidarXML(NomeArquivoXML, Convert.ToInt32(dadosNFe.cUF)); string cResultadoValidacao = validar.ValidarArqXML(NomeArquivoXML); if (cResultadoValidacao != "") { //Registrar o erro da validação do schema para o sistema ERP throw new Exception(cResultadoValidacao); } //Mover o arquivo XML da pasta de lote para a pasta de XML´s assinados //Se a pasta de assinados não existir, vamos criar if (!Directory.Exists(pastaLoteAssinado)) { Directory.CreateDirectory(pastaLoteAssinado); } FileInfo fiDestino = new FileInfo(arqDestino); if (!File.Exists(arqDestino) || (long)DateTime.Now.Subtract(fiDestino.LastWriteTime).TotalMilliseconds >= 60000) //60.000 ms que corresponde á 60 segundos que corresponde a 1 minuto { //Mover o arquivo para a pasta de XML´s assinados Functions.Move(NomeArquivoXML, arqDestino); oFluxoNfe.InserirNfeFluxo(ChaveNfe, dadosNFe.mod, arqDestino); } else { oFluxoNfe.InserirNfeFluxo(ChaveNfe, dadosNFe.mod, arqDestino); throw new IOException("Esta nota fiscal já está na pasta de Notas Fiscais assinadas e em processo de envio, desta forma não é possível enviar a mesma novamente.\r\n" + NomeArquivoXML); } } catch (Exception ex) { try { string extFinal = Propriedade.ExtEnvio.Nfe; string extErro = Propriedade.ExtRetorno.Nfe_ERR; switch (Servico) { case Servicos.MDFeAssinarValidarEnvioEmLote: case Servicos.MDFeMontarLoteUm: extFinal = Propriedade.ExtEnvio.MDFe; extErro = Propriedade.ExtRetorno.MDFe_ERR; break; case Servicos.CTeAssinarValidarEnvioEmLote: case Servicos.CTeMontarLoteUm: extFinal = Propriedade.ExtEnvio.Cte; extErro = Propriedade.ExtRetorno.Cte_ERR; break; } TFunctions.GravarArqErroServico(NomeArquivoXML, extFinal, extErro, ex); //Se já foi movido o XML da Nota Fiscal para a pasta em Processamento, vou ter que //forçar mover para a pasta de XML com erro neste ponto. oAux.MoveArqErro(arqDestino); } catch (Exception exx) { Auxiliar.WriteLog(exx.Message, true); //Se ocorrer algum erro na hora de tentar gravar o XML de erro para o ERP ou mover o arquivo XML para a pasta de XML com erro, não //vou poder fazer nada, pq foi algum erro de rede, permissão de acesso a pasta ou arquivo, etc. //Wandey 13/03/2010 } throw; } }
/// <summary> /// Realiza efetivamente o teste assinando o XML de simualação /// </summary> /// <param name="provider">Objeto com as informaçoes do provider que será testado</param> /// <returns></returns> public bool TestarProvider(CertProviders provider) { bool result = false; this.SimularXML(provider); AssinaturaDigital assinatura = new AssinaturaDigital(); assinatura.TesteCertificado = true; result = assinatura.TestarProviderCertificado(TempFile, "SimulacaoProvider", "Provider", Certificado, CodEmp, PIN, provider.NameKey, provider.Type); ApagarXMLTeste(); return result; }
/// <summary> /// Envia o XML de cancelamento de nota fiscal /// </summary> /// <remarks> /// Atualiza a propriedade this.vNfeRetorno da classe com o conteúdo /// XML com o retorno que foi dado do serviço do WebService. /// No caso do Cancelamento se tudo estiver correto retorna um XML /// dizendo se foi cancelado corretamente ou não. /// Se der algum erro ele grava um arquivo txt com o erro em questão. /// </remarks> /// <example> /// oUniNfe.vXmlNfeDadosMsg = "c:\teste-ped-sit.xml"; /// oUniNfe.Consulta();// /// this.textBox_xmlretorno.Text = oUniNfe.vNfeRetorno; /// // /// //O conteúdo de retorno vai ser algo mais ou menos assim: /// // /// //<?xml version="1.0" encoding="UTF-8" ?> /// //<retCancNFe xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe retCancNFe_v1.07.xsd" versao="1.07"> /// // <infCanc> /// // <tpAmb>2</tpAmb> /// // <verAplic>1.10</verAplic> /// // <cStat>101</cStat> /// // <xMotivo>Cancelamento de NF-e homologado</xMotivo> /// // <cUF>51</cUF> /// // <chNFe>51080612345678901234550010000001041671821888</chNFe> /// // <dhRecbto>2008-07-01T16:37:22</dhRecbto> /// // <nProt>151080000197648</nProt> /// // </infCanc> /// //</retCancNFe> /// </example> /// <by>Wandrey Mundin Ferreira</by> /// <date>01/07/2008</date> public override void Cancelamento() { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; //Definir o serviço que será executado para a classe Servico = Servicos.CancelarNFe; try { //Ler o XML para pegar parâmetros de envio LerXML oLer = new LerXML(); oLer.PedCanc(NomeArquivoXML); if (this.vXmlNfeDadosMsgEhXML) { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servicos.CancelarNFe, emp, oLer.oDadosPedCanc.cUF, oLer.oDadosPedCanc.tpAmb, oLer.oDadosPedCanc.tpEmis); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oCancelamento = wsProxy.CriarObjeto(NomeClasseWS(Servico, oLer.oDadosPedCanc.cUF)); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS()); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, "cUF", oLer.oDadosPedCanc.cUF.ToString()); wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLCanc); //Criar objeto da classe de assinatura digita AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(oLer.oDadosPedCanc.cUF)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oCancelamento, NomeMetodoWS(Servico, oLer.oDadosPedCanc.cUF), oCabecMsg, this, "-ped-can", "-can"); //Ler o retorno do webservice LerRetornoCanc(NomeArquivoXML); } else { //Gerar o XML de solicitação de cancelamento de uma NFe a partir do TXT Gerado pelo ERP oGerarXML.Cancelamento(Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml", oLer.oDadosPedCanc.tpAmb, oLer.oDadosPedCanc.tpEmis, oLer.oDadosPedCanc.chNFe, oLer.oDadosPedCanc.nProt, oLer.oDadosPedCanc.xJust); } } catch (Exception ex) { string ExtRet = string.Empty; if (this.vXmlNfeDadosMsgEhXML) //Se for XML ExtRet = Propriedade.ExtEnvio.PedCan_XML; else //Se for TXT ExtRet = Propriedade.ExtEnvio.PedCan_TXT; try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.Can_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 09/03/2010 } } finally { try { if (!this.vXmlNfeDadosMsgEhXML) //Se for o TXT para ser transformado em XML, vamos excluir o TXT depois de gerado o XML 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 09/03/2010 } } }
/// <summary> /// Envia o XML de inutilização de numeração de notas fiscais /// </summary> /// <remarks> /// Atualiza a propriedade this.vNfeRetorno da classe com o conteúdo /// XML com o retorno que foi dado do serviço do WebService. /// No caso da Inutilização se tudo estiver correto retorna um XML /// dizendo se foi inutilizado corretamente ou não. /// Se der algum erro ele grava um arquivo txt com o erro em questão. /// </remarks> /// <example> /// oUniNfe.vXmlNfeDadosMsg = "c:\teste-ped-sit.xml"; /// oUniNfe.Inutilizacao(); /// this.textBox_xmlretorno.Text = oUniNfe.vNfeRetorno; /// // /// // /// //O conteúdo de retorno vai ser algo mais ou menos assim: /// // /// //<?xml version="1.0" encoding="UTF-8" ?> /// //<retInutNFe xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe retInutNFe_v1.07.xsd" versao="1.07"> /// // <infInut> /// // <tpAmb>2</tpAmb> /// // <verAplic>1.10</verAplic> /// // <cStat>102</cStat> /// // <xMotivo>Inutilizacao de numero homologado</xMotivo> /// // <cUF>51</cUF> /// // <ano>08</ano> /// // <CNPJ>12345678901234</CNPJ> /// // <mod>55</mod> /// // <serie>1</serie> /// // <nNFIni>101</nNFIni> /// // <nNFFin>101</nNFFin> /// // <dhRecbto>2008-07-01T16:47:11</dhRecbto> /// // <nProt>151080000197712</nProt> /// // </infInut> /// //</retInutNFe> /// </example> /// <by>Wandrey Mundin Ferreira</by> /// <date>03/04/2009</date> #if notused public override void Inutilizacao() { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; //Definir o serviço que será executado para a classe Servico = Servicos.InutilizarNumerosNFe; try { //Ler o XML para pegar parâmetros de envio LerXML oLer = new LerXML(); oLer.PedInut(NomeArquivoXML); if (this.vXmlNfeDadosMsgEhXML) //danasa 12-9-2009 { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servicos.InutilizarNumerosNFe, emp, oLer.oDadosPedInut.cUF, oLer.oDadosPedInut.tpAmb, oLer.oDadosPedInut.tpEmis); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oInutilizacao = wsProxy.CriarObjeto(NomeClasseWS(Servico, oLer.oDadosPedInut.cUF)); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS()); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, "cUF", oLer.oDadosPedInut.cUF.ToString()); wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLInut); //Criar objeto da classe de assinatura digita AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(oLer.oDadosPedInut.cUF)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oInutilizacao, NomeMetodoWS(Servico, oLer.oDadosPedInut.cUF), oCabecMsg, this, "-ped-inu", "-inu"); //Ler o retorno do webservice this.LerRetornoInut(); } else { oGerarXML.Inutilizacao(Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml", oLer.oDadosPedInut.tpAmb, oLer.oDadosPedInut.tpEmis, oLer.oDadosPedInut.cUF, oLer.oDadosPedInut.ano, oLer.oDadosPedInut.CNPJ, oLer.oDadosPedInut.mod, oLer.oDadosPedInut.serie, oLer.oDadosPedInut.nNFIni, oLer.oDadosPedInut.nNFFin, oLer.oDadosPedInut.xJust); } } catch (Exception ex) { string ExtRet = string.Empty; if (this.vXmlNfeDadosMsgEhXML) //Se for XML ExtRet = Propriedade.ExtEnvio.PedInu_XML; else //Se for TXT ExtRet = Propriedade.ExtEnvio.PedInu_TXT; try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.Inu_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 09/03/2010 } } finally { try { if (!this.vXmlNfeDadosMsgEhXML) //Se for o TXT para ser transformado em XML, vamos excluir o TXT depois de gerado o XML Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de inutilização, infelizmente não posso //fazer mais nada. Com certeza o uninfe sendo restabelecido novamente vai tentar enviar o mesmo //xml de inutilização para o SEFAZ. Este erro pode ocorrer por falha no HD, rede, Permissão de pastas, etc. Wandrey 23/03/2010 } } }
/// <summary> /// RecepcaoEvento /// </summary> public override void RecepcaoEvento() //<<<danasa 6-2011 { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; //Definir o serviço que será executado para a classe if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCCe_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCCe_TXT)) Servico = Servicos.EnviarCCe; else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvManifestacao_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvManifestacao_TXT)) Servico = Servicos.EnviarManifestacao; else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCancelamento_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCancelamento_TXT)) Servico = Servicos.EnviarEventoCancelamento; try { //Ler o XML para pegar parâmetros de envio LerXML oLer = new LerXML(); oLer.EnvEvento(emp, NomeArquivoXML); if (vXmlNfeDadosMsgEhXML) { int currentEvento = Convert.ToInt32(oLer.oDadosEnvEvento.eventos[0].tpEvento); foreach (Evento item in oLer.oDadosEnvEvento.eventos) if (currentEvento != Convert.ToInt32(item.tpEvento)) throw new Exception(string.Format("Não é possivel mesclar tipos de eventos dentro de um mesmo xml de eventos. O tipo de evento neste xml é {0}", currentEvento)); int cOrgao = oLer.oDadosEnvEvento.eventos[0].cOrgao; if (cOrgao == 90 || cOrgao == 91) //Amb.Nacional cOrgao = Convert.ToInt32(oLer.oDadosEnvEvento.eventos[0].chNFe.Substring(0, 2));//<<< 7/2012 //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS( Servico, emp, cOrgao, oLer.oDadosEnvEvento.eventos[0].tpAmb, 1); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oRecepcaoEvento; if (oLer.oDadosEnvEvento.eventos[0].cOrgao == 52) { oRecepcaoEvento = wsProxy.CriarObjeto("NfeRecepcaoEvento"); } else { oRecepcaoEvento = wsProxy.CriarObjeto("RecepcaoEvento"); } object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS()); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, "cUF", cOrgao.ToString()); switch (Servico) { case Servicos.EnviarCCe: wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLEnvCCe); break; case Servicos.EnviarEventoCancelamento: wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLEnvCancelamento); break; default: wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLEnvManifestacao); break; } //Criar objeto da classe de assinatura digital AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, cOrgao);//Convert.ToInt32(oLer.oDadosEnvEvento.eventos[0].cOrgao)); //Invocar o método que envia o XML para o SEFAZ string xmlExtEnvio = string.Empty; string xmlExtRetorno = string.Empty; switch (Servico) { case Servicos.EnviarCCe: xmlExtEnvio = Propriedade.ExtEnvio.EnvCCe_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retEnvCCe_XML.Replace(".xml", ""); break; case Servicos.EnviarEventoCancelamento: xmlExtEnvio = Propriedade.ExtEnvio.EnvCancelamento_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retCancelamento_XML.Replace(".xml", ""); break; default: xmlExtEnvio = Propriedade.ExtEnvio.EnvManifestacao_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retManifestacao_XML.Replace(".xml", ""); break; } oInvocarObj.Invocar(wsProxy, oRecepcaoEvento, "nfeRecepcaoEvento", oCabecMsg, this, xmlExtEnvio, xmlExtRetorno); //Ler o retorno if (Servico == Servicos.EnviarManifestacao) LerRetornoManifestacao(emp); else LerRetornoEvento(emp); } else { // Gerar o XML de eventos a partir do TXT gerado pelo ERP string xmlFileExt = string.Empty; string xmlFileExtTXT = string.Empty; switch (Servico) { case Servicos.EnviarCCe: xmlFileExt = Propriedade.ExtEnvio.EnvCCe_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvCCe_TXT; break; case Servicos.EnviarEventoCancelamento: xmlFileExt = Propriedade.ExtEnvio.EnvCancelamento_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvCancelamento_TXT; break; default: xmlFileExt = Propriedade.ExtEnvio.EnvManifestacao_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvManifestacao_TXT; break; } oGerarXML.EnvioEvento(Functions.ExtrairNomeArq(NomeArquivoXML, xmlFileExtTXT) + xmlFileExt, oLer.oDadosEnvEvento); } } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra string ExtRet = string.Empty; string ExtRetorno = string.Empty; switch (Servico) { case Servicos.EnviarCCe: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvCCe_XML : Propriedade.ExtEnvio.EnvCCe_TXT; ExtRetorno = Propriedade.ExtRetorno.retEnvCCe_ERR; break; case Servicos.EnviarEventoCancelamento: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvCancelamento_XML : Propriedade.ExtEnvio.EnvCancelamento_TXT; ExtRetorno = Propriedade.ExtRetorno.retCancelamento_ERR; break; default: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvManifestacao_XML : Propriedade.ExtEnvio.EnvManifestacao_TXT; ExtRetorno = Propriedade.ExtRetorno.retManifestacao_ERR; break; } if (ExtRetorno != string.Empty) GravarArqErroServico(NomeArquivoXML, ExtRet, ExtRetorno, 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 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de evento, 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 09/03/2010 } } }
/// <summary> /// Envia o XML do registro do DPEC para o SCE (Sistema de Contingência Eletronica) /// </summary> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 19/10/2010 /// </remarks> /// #if notused public override void RecepcaoDPEC() { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; //Definir o serviço que será executado para a classe Servico = Servicos.EnviarDPEC; try { //Ler o XML para pegar parâmetros de envio LerXML oLer = new LerXML(); oLer.EnvDPEC(emp, NomeArquivoXML); //danasa 21/10/2010 if (vXmlNfeDadosMsgEhXML) //danasa 12-9-2009 { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servicos.EnviarDPEC, emp, oLer.dadosEnvDPEC.cUF, oLer.dadosEnvDPEC.tpAmb, oLer.dadosEnvDPEC.tpEmis); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oRecepcaoDPEC = wsProxy.CriarObjeto("SCERecepcaoRFB"); object oCabecMsg = wsProxy.CriarObjeto("sceCabecMsg"); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg //oWSProxy.SetProp(oCabecMsg, "cUF", oLer.dadosEnvDPEC.cUF.ToString()); wsProxy.SetProp(oCabecMsg, "versaoDados", ConfiguracaoApp.VersaoXMLEnvDPEC); //Criar objeto da classe de assinatura digita AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(oLer.dadosEnvDPEC.cUF)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oRecepcaoDPEC, "sceRecepcaoDPEC", oCabecMsg, this); //Ler o retorno LerRetDPEC(); //Gravar o XML retornado pelo WebService do SEFAZ na pasta de retorno para o ERP //Tem que ser feito neste ponto, pois somente aqui terminamos todo o processo oGerarXML.XmlRetorno(Propriedade.ExtEnvio.EnvDPEC_XML, Propriedade.ExtRetorno.retDPEC_XML, vStrXmlRetorno); } else { // Gerar o XML de solicitacao de situacao do servico a partir do TXT gerado pelo ERP oGerarXML.EnvioDPEC(Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml", oLer.dadosEnvDPEC); } } catch (Exception ex) { var ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvDPEC_XML : Propriedade.ExtEnvio.EnvDPEC_TXT; try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.retDPEC_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 09/03/2010 } } 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 09/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); //Definir o serviço que será executado para a classe Servico = Servicos.NFSeRecepcionarLoteRps; try { 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)) { wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, oDadosEnvLoteRps.cMunicipio, oDadosEnvLoteRps.tpAmb, oDadosEnvLoteRps.tpEmis, padraoNFSe); envLoteRps = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); } 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(Empresas.Configuracoes[emp].UsuarioWS, Empresas.Configuracoes[emp].SenhaWS, oDadosEnvLoteRps.cMunicipio, Empresas.Configuracoes[emp].PastaXmlRetorno); if (ConfiguracaoApp.Proxy) ipm.Proxy = Proxy.DefinirProxy(ConfiguracaoApp.ProxyServidor, ConfiguracaoApp.ProxyUsuario, ConfiguracaoApp.ProxySenha, ConfiguracaoApp.ProxyPorta); ipm.EmitirNF(NomeArquivoXML, (TipoAmbiente)Empresas.Configuracoes[emp].AmbienteCodigo); break; case PadroesNFSe.GINFES: if (oDadosEnvLoteRps.cMunicipio == 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>"; else cabecMsg = "<ns2:cabecalho versao=\"3\" xmlns:ns2=\"http://www.ginfes.com.br/cabecalho_v03.xsd\"><versaoDados>3</versaoDados></ns2:cabecalho>"; break; case PadroesNFSe.BETHA: wsProxy = new WebServiceProxy(Empresas.Configuracoes[emp].X509Certificado); wsProxy.Betha = new Betha(); break; 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.WEBISS: cabecMsg = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; break; case PadroesNFSe.PAULISTANA: EncryptAssinatura(); 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 xmlns=\"http://iss.pontagrossa.pr.gov.br/Arquivos/nfse.xsd\" versao=\"1.00\"><versaoDados >1.00</versaoDados ></cabecalho>"; Servico = GetTipoServicoSincrono(Servico, NomeArquivoXML, PadroesNFSe.FINTEL); 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 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 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); AssinaturaDigital ass = new AssinaturaDigital(); ass.Assinar(NomeArquivoXML, emp, oDadosEnvLoteRps.cMunicipio); fiorilli.EmiteNF(NomeArquivoXML); break; #endregion 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 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 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 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 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 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 case PadroesNFSe.EQUIPLANO: cabecMsg = "1"; break; case PadroesNFSe.NATALENSE: 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 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 } if (IsUtilizaCompilacaoWs(padraoNFSe)) { //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, "-env-loterps", "-ret-loterps", padraoNFSe, Servico); /// /// grava o arquivo no FTP string filenameFTP = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.ExtEnvio.EnvLoteRps) + "\\" + Propriedade.ExtRetorno.RetLoteRps); 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.ExtEnvio.EnvLoteRps, Propriedade.ExtRetorno.RetLoteRps_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 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosEnvEvento = new DadosenvEvento(); //Ler o XML para pegar parâmetros de envio EnvEvento(emp, dadosEnvEvento);//, TpcnResources.chMDFe.ToString()); ValidaEvento(emp, dadosEnvEvento); //vai pegar o ambiente da Chave da Nfe autorizada p/ corrigir tpEmis int tpEmis = this.dadosEnvEvento.eventos[0].tpEmis; //Convert.ToInt32(this.dadosEnvEvento.eventos[0].chNFe.Substring(34, 1)); //Pegar o estado da chave, pois na cOrgao pode vir o estado 91 - Wandreuy 22/08/2012 int cOrgao = dadosEnvEvento.eventos[0].cOrgao; int ufParaWS = cOrgao; //Se o cOrgao for igual a 91 tenho que mudar a ufParaWS para que na hora de buscar o WSDL para conectar ao serviço, ele consiga encontrar. Wandrey 23/01/2013 if (cOrgao == 91) ufParaWS = Convert.ToInt32(dadosEnvEvento.eventos[0].chNFe.Substring(0, 2)); //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis); object oRecepcaoEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cOrgao, Servico)); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cOrgao.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLMDFeEvento); //Criar objeto da classe de assinatura digital AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, cOrgao); oInvocarObj.Invocar(wsProxy, oRecepcaoEvento, wsProxy.NomeMetodoWS[0],//NomeMetodoWS(Servico, ufParaWS), oCabecMsg, this, Propriedade.ExtEnvio.PedEve.Replace(".xml", ""), Propriedade.ExtRetorno.Eve.Replace(".xml", "")); //Ler o retorno LerRetornoEvento(emp); } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.ExtEnvio.PedEve, Propriedade.ExtRetorno.Eve_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 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de evento, 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 09/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { //Ler o XML para pegar parâmetros de envio EnvEvento(emp, dadosEnvEvento);//, NFe.Components.TpcnResources.chNFe.ToString()); string currentEvento = dadosEnvEvento.eventos[0].tpEvento; // mudei para aqui caso haja erro e qdo for gravar o arquivo de erro precisamos saber qual o servico switch (NFe.Components.EnumHelper.StringToEnum<NFe.ConvertTxt.tpEventos>(currentEvento)) { case ConvertTxt.tpEventos.tpEvCancelamentoNFe: Servico = Servicos.EventoCancelamento; break; case ConvertTxt.tpEventos.tpEvCCe: Servico = Servicos.EventoCCe; break; case ConvertTxt.tpEventos.tpEvEPEC: Servico = Servicos.EventoEPEC; break; default: Servico = Servicos.EventoManifestacaoDest; break; } ValidaEvento(emp, dadosEnvEvento); //Pegar o estado da chave, pois na cOrgao pode vir o estado 91 - Wandreuy 22/08/2012 int cOrgao = dadosEnvEvento.eventos[0].cOrgao; //vai pegar o ambiente da Chave da Nfe autorizada p/ corrigir tpEmis int tpEmis = this.dadosEnvEvento.eventos[0].tpEmis; //Convert.ToInt32(this.dadosEnvEvento.eventos[0].chNFe.Substring(34, 1)); int ufParaWS = cOrgao; //Se o cOrgao for igual a 91 tenho que mudar a ufParaWS para que na hora de buscar o WSDL para conectar ao serviço, ele consiga encontrar. Wandrey 23/01/2013 if (cOrgao == 91) ufParaWS = Convert.ToInt32(dadosEnvEvento.eventos[0].chNFe.Substring(0, 2)); switch (Servico) { case Servicos.EventoCancelamento: switch ((NFe.Components.TipoEmissao)tpEmis) { case NFe.Components.TipoEmissao.teSVCAN: case NFe.Components.TipoEmissao.teSVCRS: case NFe.Components.TipoEmissao.teSVCSP: case NFe.Components.TipoEmissao.teNormal: //Se a nota fiscal foi emitida em ambiente NORMAL, o cancelamento tem que ir para o ambiente normal ou gera uma rejeição. Wandrey 15/02/2013 break; default: //Os demais tipos de emissão tem que sempre ir para o ambiente NORMAL. Wandrey 22/02/2013 tpEmis = (int)NFe.Components.TipoEmissao.teNormal; break; } break; case Servicos.EventoCCe: //CCe só existe no ambiente Normal. Wandrey 22/04/2013 tpEmis = (int)NFe.Components.TipoEmissao.teNormal; break; } if (vXmlNfeDadosMsgEhXML) { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS( Servico, emp, ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis, string.Empty, dadosEnvEvento.eventos[0].mod); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oRecepcaoEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cOrgao, Servico)); string xmlExtEnvio = string.Empty; string xmlExtRetorno = string.Empty; wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cOrgao.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEvento); if (novaNomenclatura) { xmlExtEnvio = Propriedade.ExtEnvio.PedEve.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.Eve.Replace(".xml", ""); } else { switch (Servico) { case Servicos.EventoCCe: xmlExtEnvio = Propriedade.ExtEnvio.EnvCCe_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retEnvCCe_XML.Replace(".xml", ""); break; case Servicos.EventoCancelamento: xmlExtEnvio = Propriedade.ExtEnvio.EnvCancelamento_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retCancelamento_XML.Replace(".xml", ""); break; default: xmlExtEnvio = Propriedade.ExtEnvio.EnvManifestacao_XML.Replace(".xml", ""); xmlExtRetorno = Propriedade.ExtRetorno.retManifestacao_XML.Replace(".xml", ""); break; } } //Criar objeto da classe de assinatura digital AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, cOrgao); oInvocarObj.Invocar(wsProxy, oRecepcaoEvento, wsProxy.NomeMetodoWS[0], oCabecMsg, this, xmlExtEnvio, xmlExtRetorno); //Ler o retorno LerRetornoEvento(emp); } else { // Gerar o XML de eventos a partir do TXT gerado pelo ERP string xmlFileExt = string.Empty; string xmlFileExtTXT = string.Empty; if (novaNomenclatura) { xmlFileExt = Propriedade.ExtEnvio.PedEve; xmlFileExtTXT = Propriedade.ExtEnvio.PedEve_TXT; } else { switch (Servico) { case Servicos.EventoCCe: xmlFileExt = Propriedade.ExtEnvio.EnvCCe_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvCCe_TXT; break; case Servicos.EventoCancelamento: xmlFileExt = Propriedade.ExtEnvio.EnvCancelamento_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvCancelamento_TXT; break; default: xmlFileExt = Propriedade.ExtEnvio.EnvManifestacao_XML; xmlFileExtTXT = Propriedade.ExtEnvio.EnvManifestacao_TXT; break; } } string f = Functions.ExtrairNomeArq(NomeArquivoXML, xmlFileExtTXT) + xmlFileExt; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } oGerarXML.EnvioEvento(f, dadosEnvEvento); } } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra string ExtRet = string.Empty; string ExtRetorno = string.Empty; if (novaNomenclatura) { ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.PedEve : Propriedade.ExtEnvio.PedEve_TXT; ExtRetorno = Propriedade.ExtRetorno.Eve_ERR; } else { if (Servico == Servicos.Nulo) { // pode ter vindo de um txt e houve erro if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCCe_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCCe_TXT)) Servico = Servicos.EventoCCe; else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvManifestacao_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvManifestacao_TXT)) Servico = Servicos.EventoManifestacaoDest; else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCancelamento_XML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.ExtEnvio.EnvCancelamento_TXT)) Servico = Servicos.EventoCancelamento; } switch (Servico) { case Servicos.EventoCCe: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvCCe_XML : Propriedade.ExtEnvio.EnvCCe_TXT; ExtRetorno = Propriedade.ExtRetorno.retEnvCCe_ERR; break; case Servicos.EventoCancelamento: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvCancelamento_XML : Propriedade.ExtEnvio.EnvCancelamento_TXT; ExtRetorno = Propriedade.ExtRetorno.retCancelamento_ERR; break; case Servicos.EventoManifestacaoDest: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.ExtEnvio.EnvManifestacao_XML : Propriedade.ExtEnvio.EnvManifestacao_TXT; ExtRetorno = Propriedade.ExtRetorno.retManifestacao_ERR; break; default: throw new Exception("Nao pode identificar o tipo de serviço para o arquivo: " + NomeArquivoXML); } } if (ExtRetorno != string.Empty) { TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, ExtRetorno, 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 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de evento, 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 09/03/2010 } } }