public MensagemRetornoEventoCancelamento CancelarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, string chaveNFe, string protocoloAutorizacao, Modelo modeloNota, string justificativa) { try { var infEvento = new TEventoInfEvento(); infEvento.cOrgao = UfToTCOrgaoIBGEConversor.GetTCOrgaoIBGE(ufEmitente); infEvento.tpAmb = (XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.TAmb)(int) ambiente; infEvento.Item = cnpjEmitente; infEvento.ItemElementName = XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.ItemChoiceType.CNPJ; infEvento.chNFe = chaveNFe; infEvento.dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"); infEvento.tpEvento = TEventoInfEventoTpEvento.Item110111; infEvento.nSeqEvento = "1"; infEvento.verEvento = TEventoInfEventoVerEvento.Item100; infEvento.detEvento = new TEventoInfEventoDetEvento(); infEvento.detEvento.versao = TEventoInfEventoDetEventoVersao.Item100; infEvento.detEvento.descEvento = TEventoInfEventoDetEventoDescEvento.Cancelamento; infEvento.detEvento.nProt = protocoloAutorizacao; infEvento.detEvento.xJust = justificativa; infEvento.Id = "ID110111" + chaveNFe + "01"; var evento = new TEvento(); evento.versao = "1.00"; evento.infEvento = infEvento; var envioEvento = new TEnvEvento(); envioEvento.versao = "1.00"; envioEvento.idLote = "1"; envioEvento.evento = new TEvento[] { evento }; var xml = XmlUtil.Serialize(envioEvento, "http://www.portalfiscal.inf.br/nfe"); var certificado = _certificadoService.GetX509Certificate2(); XmlNode node = AssinaturaDigital.AssinarEvento(xml, "#" + infEvento.Id, certificado); //var resultadoValidacao = ValidadorXml.ValidarXml(node.OuterXml, "envEventoCancNFe_v1.00.xsd"); var servico = _serviceFactory.GetService(modeloNota, ambiente, Servico.CANCELAMENTO, codigoUf, certificado); var client = (NFeRecepcaoEvento4SoapClient)servico.SoapClient; var result = client.nfeRecepcaoEvento(node); var retorno = (TRetEnvEvento)XmlUtil.Deserialize <TRetEnvEvento>(result.OuterXml); if (retorno.cStat.Equals("128")) { var retEvento = retorno.retEvento; if (retEvento.Count() > 0) { var retInfEvento = retEvento[0].infEvento; if (retInfEvento.cStat.Equals("135")) { var procEvento = new Proc.TProcEvento(); TEnvEvento envEvento = (TEnvEvento)XmlUtil.Deserialize <TEnvEvento>(node.OuterXml); var eventoSerialized = XmlUtil.Serialize(envEvento.evento[0], ""); procEvento.evento = (Proc.TEvento)XmlUtil.Deserialize <Proc.TEvento>(eventoSerialized); var retEventoSerialized = XmlUtil.Serialize(retEvento[0], ""); procEvento.retEvento = (Proc.TRetEvento)XmlUtil.Deserialize <Proc.TRetEvento>(retEventoSerialized); procEvento.versao = "1.00"; var procSerialized = XmlUtil.Serialize(procEvento, "http://www.portalfiscal.inf.br/nfe"); return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.SUCESSO, DataEvento = retInfEvento.dhRegEvento, TipoEvento = retInfEvento.tpEvento, Mensagem = retInfEvento.xMotivo, Xml = procSerialized, IdEvento = infEvento.Id, MotivoCancelamento = justificativa, ProtocoloCancelamento = retInfEvento.nProt }); } else { return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = retInfEvento.xMotivo, }); } } } return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = "Erro desconhecido. Foi gerado um registro com o erro. Contate o suporte.", Xml = "" }); } catch (Exception e) { log.Error(e); string sDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "EmissorNFeDir"); if (!Directory.Exists(sDirectory)) { Directory.CreateDirectory(sDirectory); } using (FileStream stream = File.Create(Path.Combine(sDirectory, "cancelarNotaErro.txt"))) { using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine(e.ToString()); } } return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = "Erro ao tentar contactar SEFAZ. Verifique sua conexão.", Xml = "" }); } }