public bool ExecutarConsultaStatus(ConfiguracaoEntity config, Modelo modelo) { var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), _emissorService.GetEmissor().Endereco.UF); X509Certificate2 certificado = null; var certificadoEntity = _certificadoService.GetCertificado(); if (certificadoEntity == null) { return(false); } if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } return(NFeStatusServico.ExecutarConsultaStatus(codigoUf, ambiente, certificado, modelo)); }
static void Main(string[] args) { Console.Read(); HttpPost.send(); return; string salt = ""; string textNormal = "hola_"; string textEncrip = ""; salt = Guid.NewGuid().ToString(); textEncrip = RijndaelManagedEncryption.EncryptRijndael(textNormal, salt); textNormal = RijndaelManagedEncryption.DecryptRijndael(textEncrip, salt); Console.WriteLine("---------------------------------------"); Console.WriteLine("salt:" + salt); Console.WriteLine("textEncrip:" + textEncrip); Console.WriteLine("textNormal:" + textNormal); Console.WriteLine("---------------------------------------"); Console.WriteLine("Usando AESAlgorithm:"); textEncrip = AESAlgorithm.Encrypt(textNormal); //string otherTextEncript = AESAlgorithm.Encrypt("hola_"); Console.WriteLine("textNormal:" + textNormal); Console.WriteLine("textEncrip:" + textEncrip); Console.WriteLine("textDecrip:" + AESAlgorithm.Decrypt(textEncrip)); // Error padding code Base64 erroneo a proposito Console.WriteLine("textDecrip2:" + AESAlgorithm.Decrypt("pw7qE1E4o6/1QAKSPv8Jwg==")); Console.Read(); }
public void CryptDecrypt_Success() { // Act var encrypted = RijndaelManagedEncryption.EncryptRijndael(strTest); var decrypted = RijndaelManagedEncryption.DecryptRijndael(encrypted); // Assert if (decrypted == strTest) { Assert.True(true); } }
private static X509Certificate2 EscolherCertificado(CertificadoEntity certificadoEntity) { X509Certificate2 certificado; if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } return(certificado); }
private void EnviarCancelamentoNotaFiscal(NFCeModel notaFiscalModel) { X509Certificate2 certificado; var modeloNota = notaFiscalModel.Modelo.Contains("NFC-e") ? Modelo.Modelo65 : Modelo.Modelo55; var config = _configuracaoService.GetConfiguracao(); var emitente = _emissorService.GetEmissor(); var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF); var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var certificadoEntity = _certificadoService.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } UF = emitente.Endereco.UF; CodigoUF = codigoUF; Cnpj = emitente.CNPJ; Chave = notaFiscalModel.Chave; Protocolo = notaFiscalModel.Protocolo; ModeloNota = modeloNota; Certificado = certificado; Ambiente = ambiente; var app = Application.Current; var mainWindow = app.MainWindow; new CancelarNotaWindow() { Owner = mainWindow }.ShowDialog(); }
public X509Certificate2 GetX509Certificate2() { X509Certificate2 certificado; var certificadoEntity = GetCertificado(); if (certificadoEntity == null) { return(null); } if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } return(certificado); }
public int EmitirNotaContingencia(NotaFiscal notaFiscal, string cscId, string csc) { var qrCode = string.Empty; string newNodeXml; const string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; var digVal = string.Empty; var config = _configuracaoService.GetConfiguracao(); notaFiscal.Identificacao.Numero = _configuracaoService.ObterProximoNumeroNotaFiscal(notaFiscal.Identificacao.Modelo); notaFiscal.Identificacao.DataHoraEntradaContigencia = config.DataHoraEntradaContingencia; notaFiscal.Identificacao.JustificativaContigencia = config.JustificativaContingencia; notaFiscal.Identificacao.TipoEmissao = notaFiscal.Identificacao.Modelo == Modelo.Modelo65 ? TipoEmissao.ContigenciaNfce : TipoEmissao.FsDa; notaFiscal.CalcularChave(); X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); else certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); if (notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao) notaFiscal.Produtos[0].Descricao = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; var refUri = "#NFe" + notaFiscal.Identificacao.Chave; var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo65) { qrCode = QrCodeUtil.GerarQrCodeNFe(notaFiscal.Identificacao.Chave, notaFiscal.Destinatario, digVal, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.DataHoraEmissao, notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe.ToString("F", CultureInfo.InvariantCulture), notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms.ToString("F", CultureInfo.InvariantCulture), cscId, csc, notaFiscal.Identificacao.TipoEmissao); newNodeXml = node.InnerXml.Replace("<qrCode />", "<qrCode>" + qrCode + "</qrCode>"); } else { newNodeXml = node.InnerXml.Replace("<infNFeSupl><qrCode /></infNFeSupl>", ""); } var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; if (node == null) throw new ArgumentException("Xml inválido."); var lote = (TEnviNFe)XmlUtil.Deserialize<TEnviNFe>(node.OuterXml); var nfe = lote.NFe[0]; //salvar nota PreEnvio aqui notaFiscal.Identificacao.Status = Status.CONTINGENCIA; var idNotaCopiaSeguranca = _notaFiscalRepository.SalvarNotaFiscalPendente(notaFiscal, XmlUtil.GerarNfeProcXml(nfe, qrCode), notaFiscal.Identificacao.Ambiente); var notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalById(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.CONTINGENCIA; var nfeProcXml = XmlUtil.GerarNfeProcXml(nfe, qrCode); _notaFiscalRepository.Salvar(notaFiscalEntity, nfeProcXml); notaFiscal.QrCodeUrl = qrCode; return idNotaCopiaSeguranca; }
private MensagemRetornoTransmissaoNotasContingencia TransmitirLoteNotasFiscaisContingencia(List<string> nfeList, Modelo modelo) { var lote = new TEnviNFe { idLote = "999999", indSinc = TEnviNFeIndSinc.Item0, versao = "4.00", NFe = new TNFe[1] }; //qual a regra pra gerar o id? //apenas uma nota no lote lote.NFe[0] = new TNFe(); //Gera tag <NFe /> vazia para usar no replace var parametroXml = XmlUtil.Serialize(lote, "http://www.portalfiscal.inf.br/nfe"); parametroXml = parametroXml.Replace("<NFe />", XmlUtil.GerarXmlListaNFe(nfeList)) .Replace("<motDesICMS>1</motDesICMS>", string.Empty); var document = new XmlDocument(); document.LoadXml(parametroXml); var node = document.DocumentElement; var config = _configuracaoService.GetConfiguracao(); var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), _emissorService.GetEmissor().Endereco.UF); X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); else certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); try { var servico = _serviceFactory.GetService(modelo, ambiente, Servico.AUTORIZACAO, codigoUf, certificado); var client = (NFeAutorizacao4SoapClient)servico.SoapClient; var result = client.nfeAutorizacaoLote(node); var retorno = (TRetEnviNFe)XmlUtil.Deserialize<TRetEnviNFe>(result.OuterXml); return new MensagemRetornoTransmissaoNotasContingencia { RetEnviNFeInfRec = (TRetEnviNFeInfRec)retorno.Item, TipoMensagem = TipoMensagem.Sucesso }; } catch (Exception e) { log.Error(e); if (!_isFirstTimeResending) { _isFirstTimeResending = true; return TransmitirLoteNotasFiscaisContingencia(nfeList, modelo); } _isFirstTimeResending = false; return new MensagemRetornoTransmissaoNotasContingencia { TipoMensagem = TipoMensagem.ServicoIndisponivel }; } }
private List<RetornoNotaFiscal> ConsultarReciboLoteContingencia(string nRec, Modelo modelo) { var config = _configuracaoService.GetConfiguracao(); X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); else certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); var consultaRecibo = new TConsReciNFe { versao = "4.00", tpAmb = config.IsProducao ? XmlSchemas.NfeRetAutorizacao.Envio.TAmb.Item1 : XmlSchemas.NfeRetAutorizacao.Envio.TAmb.Item2, nRec = nRec }; var parametroXml = XmlUtil.Serialize(consultaRecibo, "http://www.portalfiscal.inf.br/nfe"); var node = new XmlDocument(); node.LoadXml(parametroXml); var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), _emissorService.GetEmissor().Endereco.UF); try { var servico = _serviceFactory.GetService(modelo, ambiente, Servico.RetAutorizacao, codigoUf, certificado); var client = (NFeRetAutorizacao4SoapClient)servico.SoapClient; var result = client.nfeRetAutorizacaoLote(node); var retorno = (TRetConsReciNFe)XmlUtil.Deserialize<TRetConsReciNFe>(result.OuterXml); return retorno.protNFe.Select(protNFe => new RetornoNotaFiscal { Chave = protNFe.infProt.chNFe, CodigoStatus = protNFe.infProt.cStat, DataAutorizacao = protNFe.infProt.dhRecbto, Motivo = protNFe.infProt.xMotivo, Protocolo = protNFe.infProt.nProt, Xml = XmlUtil.Serialize(protNFe, string.Empty) .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) .Replace("TProtNFe", "protNFe") .Replace("<infProt xmlns=\"http://www.portalfiscal.inf.br/nfe\">", "<infProt>") }) .ToList(); } catch (Exception e) { log.Error(e); if (!_isFirstTimeRecheckingRecipts) { _isFirstTimeRecheckingRecipts = true; return ConsultarReciboLoteContingencia(nRec, modelo); } _isFirstTimeRecheckingRecipts = false; return null; } }
private async Task<List<string>> TransmitirConsultarLoteContingenciaAsync(ConfiguracaoEntity config, List<string> notasNfCe, Modelo modelo) { var retornoTransmissao = TransmitirLoteNotasFiscaisContingencia(notasNfCe, modelo); switch (retornoTransmissao.TipoMensagem) { case TipoMensagem.ErroValidacao: return new List<string> { retornoTransmissao.Mensagem }; case TipoMensagem.ServicoIndisponivel: return new List<string> { MensagemErro }; } var tempoEspera = int.Parse(retornoTransmissao.RetEnviNFeInfRec.tMed) * 1000; var erros = new List<string>(); Thread.Sleep(tempoEspera); var resultadoConsulta = ConsultarReciboLoteContingencia(retornoTransmissao.RetEnviNFeInfRec.nRec, modelo); if (resultadoConsulta == null) return new List<string> { MensagemErro }; foreach (var resultado in resultadoConsulta) { var nota = _notaFiscalRepository.GetNotaFiscalByChave(resultado.Chave); if (resultado.CodigoStatus == "100") { nota.DataAutorizacao = DateTime.ParseExact(resultado.DataAutorizacao, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); nota.Protocolo = resultado.Protocolo; nota.Status = (int)Status.ENVIADA; var xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", resultado.Xml); _notaFiscalRepository.Salvar(nota, xml); } else { if (resultado.Motivo.Contains("Duplicidade")) { X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); var emitente = _emissorService.GetEmissor(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); else certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); var retornoConsulta = _nfeConsulta.ConsultarNotaFiscal ( nota.Chave, emitente.Endereco.CodigoUF, certificado, config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao, nota.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55 ); if (retornoConsulta.IsEnviada) { var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, string.Empty) .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) .Replace("TProtNFe", "protNFe"); protSerialized = Regex.Replace(protSerialized, "<infProt (.*?)>", "<infProt>"); nota.DataAutorizacao = retornoConsulta.DhAutorizacao; nota.Protocolo = retornoConsulta.Protocolo.infProt.nProt; nota.Status = (int)Status.ENVIADA; var xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", protSerialized); _notaFiscalRepository.Salvar(nota, xml); } else { erros.Add( $"Modelo: {nota.Modelo} Nota: {nota.Numero} Série: {nota.Serie} \nMotivo: {resultado.Motivo}"); //O que fazer com essas mensagens de erro? } } else { erros.Add( $"Modelo: {nota.Modelo} Nota: {nota.Numero} Série: {nota.Serie} \nMotivo: {resultado.Motivo}"); //O que fazer com essas mensagens de erro? } } } return erros; }
/// <summary> /// Gets the decrypted string value for a given encrypted string. /// </summary> /// <param name="value"></param> /// <returns></returns> public static string DecryptValue(string value) { return(RijndaelManagedEncryption.DecryptRijndael(value, _salt)); }
public bool IsNotaFiscalValida(NotaFiscal notaFiscal, string cscId, string csc) { string qrCode = ""; string refUri = "#NFe" + notaFiscal.Identificacao.Chave; string digVal = ""; string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; X509Certificate2 certificado; var certificadoEntity = new CertificadoRepository(new NFeContext()).GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty);; XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); TNFe nfe = null; string newNodeXml = string.Empty; try { var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo65) { qrCode = QrCodeUtil.GerarQrCodeNFe(notaFiscal.Identificacao.Chave, notaFiscal.Destinatario, digVal, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.DataHoraEmissao, notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe.ToString("F", CultureInfo.InvariantCulture), notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms.ToString("F", CultureInfo.InvariantCulture), cscId, csc, notaFiscal.Identificacao.TipoEmissao); newNodeXml = node.InnerXml.Replace("<qrCode />", "<qrCode>" + qrCode + "</qrCode>"); } else { newNodeXml = node.InnerXml; } var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; TEnviNFe lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; ValidadorXml.ValidarXml(node.OuterXml, "enviNFe_v4.00.xsd"); return(true); } catch (Exception) { return(false); } }
internal async Task <int> EnviarNotaContingencia(NotaFiscal notaFiscal, string cscId, string csc) { TNFe nfe = null; string qrCode = string.Empty; string newNodeXml = string.Empty; string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; string digVal = string.Empty; int idNotaCopiaSeguranca = 0; var config = ConfiguracaoService.GetConfiguracao(); notaFiscal.Identificacao.DataHoraEntradaContigencia = config.DataHoraEntradaContingencia; notaFiscal.Identificacao.JustificativaContigencia = config.JustificativaContingencia; notaFiscal.Identificacao.TipoEmissao = notaFiscal.Identificacao.Modelo == Modelo.Modelo65 ? TipoEmissao.ContigenciaNfce : TipoEmissao.FsDa; notaFiscal.CalcularChave(); X509Certificate2 certificado; var certificadoEntity = new CertificadoRepository(new NFeContext()).GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } if (notaFiscal.Identificacao.Ambiente == Domain.Services.Identificacao.Ambiente.Homologacao) { notaFiscal.Produtos[0].Descricao = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; } var refUri = "#NFe" + notaFiscal.Identificacao.Chave; var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo65) { qrCode = QrCodeUtil.GerarQrCodeNFe(notaFiscal.Identificacao.Chave, notaFiscal.Destinatario, digVal, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.DataHoraEmissao, notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe.ToString("F", CultureInfo.InvariantCulture), notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms.ToString("F", CultureInfo.InvariantCulture), cscId, csc, notaFiscal.Identificacao.TipoEmissao); newNodeXml = node.InnerXml.Replace("<qrCode />", "<qrCode>" + qrCode + "</qrCode>"); } else { newNodeXml = node.InnerXml.Replace("<infNFeSupl><qrCode /></infNFeSupl>", ""); } var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; TEnviNFe lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; //salvar nota PreEnvio aqui notaFiscal.Identificacao.Status = NFe.Repository.Status.CONTINGENCIA; var notaFiscalService = new NotaFiscalService(); idNotaCopiaSeguranca = await notaFiscalService.SalvarNotaFiscalPendenteAsync(notaFiscal, XmlUtil.GerarNfeProcXml(nfe, qrCode), notaFiscal.Identificacao.Ambiente); var notaFiscalEntity = await notaFiscalService.GetNotaFiscalByIdAsync(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.CONTINGENCIA; string nfeProcXml = XmlUtil.GerarNfeProcXml(nfe, qrCode); await notaFiscalService.SalvarAsync(notaFiscalEntity, nfeProcXml); notaFiscal.QrCodeUrl = qrCode; return(idNotaCopiaSeguranca); }
private List <RetornoNotaFiscal> ConsultarReciboLoteContingencia(string nRec, Modelo modelo) { var config = ConfiguracaoService.GetConfiguracao(); X509Certificate2 certificado = null; var certificadoEntity = CertificadoService.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } var consultaRecibo = new TConsReciNFe(); consultaRecibo.versao = "4.00"; consultaRecibo.tpAmb = config.IsProducao ? XmlSchemas.NfeRetAutorizacao.Envio.TAmb.Item1 : XmlSchemas.NfeRetAutorizacao.Envio.TAmb.Item2; consultaRecibo.nRec = nRec; string parametroXML = XmlUtil.Serialize(consultaRecibo, "http://www.portalfiscal.inf.br/nfe"); var node = new XmlDocument(); node.LoadXml(parametroXML); Ambiente ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), EmissorService.GetEmissor().Endereco.UF); try { var servico = ServiceFactory.GetService(modelo, ambiente, Factory.Servico.RetAutorizacao, codigoUF, certificado); var client = (NFeRetAutorizacao4.NFeRetAutorizacao4SoapClient)servico.SoapClient; var result = client.nfeRetAutorizacaoLote(node); TRetConsReciNFe retorno = (TRetConsReciNFe)XmlUtil.Deserialize <TRetConsReciNFe>(result.OuterXml); List <RetornoNotaFiscal> retornoConsultaList = new List <RetornoNotaFiscal>(); foreach (var protNFe in retorno.protNFe) { var retornoConsultaNota = new RetornoNotaFiscal(); retornoConsultaNota.Chave = protNFe.infProt.chNFe; retornoConsultaNota.CodigoStatus = protNFe.infProt.cStat; retornoConsultaNota.DataAutorizacao = protNFe.infProt.dhRecbto; retornoConsultaNota.Motivo = protNFe.infProt.xMotivo; retornoConsultaNota.Protocolo = protNFe.infProt.nProt; retornoConsultaNota.Xml = XmlUtil.Serialize(protNFe, string.Empty) .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) .Replace("TProtNFe", "protNFe") .Replace("<infProt xmlns=\"http://www.portalfiscal.inf.br/nfe\">", "<infProt>"); retornoConsultaList.Add(retornoConsultaNota); } return(retornoConsultaList); } catch (Exception) { if (!_isFirstTimeRecheckingRecipts) { _isFirstTimeRecheckingRecipts = true; return(ConsultarReciboLoteContingencia(nRec, modelo)); } else { _isFirstTimeRecheckingRecipts = false; return(null); } } }
protected void Page_Load(object sender, EventArgs e) { salt = Guid.NewGuid().ToString(); textEncrip = RijndaelManagedEncryption.EncryptRijndael(textNormal, salt); textNormal = RijndaelManagedEncryption.DecryptRijndael(textEncrip, salt); }
static void Main(string[] args) { try { GlobalApp.oLog = new LOGFiles(GlobalApp.FolderLog.Trim(), "TestConsole", "Program.cs", "Main", "TestConsole", AssemblyInfo.Company.Trim()); GlobalApp.DetailLog = new List <DetailLOG>(); GlobalApp.iCount = 1; GlobalApp.Numero = 0; GlobalApp.Mensaje = string.Empty; GlobalApp.FechaActual = DateTime.Now; _oTime0 = DateTime.Now; if (Directory.Exists(GlobalApp.FolderLog.Trim()) == false) { Directory.CreateDirectory(GlobalApp.FolderLog.Trim()); } // Carpeta de los archivos LOG de la aplicación. if (Directory.Exists(GlobalApp.FolderTemporal.Trim()) == false) { Directory.CreateDirectory(GlobalApp.FolderTemporal.Trim()); } // Carpeta de archivo de reportes finales. if (Directory.Exists(GlobalApp.FolderLayOut.Trim()) == false) { Directory.CreateDirectory(GlobalApp.FolderLayOut.Trim()); } // Carpeta de archivo de layout. Console.WriteLine("Consola de aplicación en .NET Core.\nVersión " + AssemblyInfo.Version.ToString()); Console.WriteLine("México " + DateTime.Now.Year.ToString() + ".\n"); Console.WriteLine("Fecha de inicio: " + _oTime0.ToString()); GlobalApp.DetailLog.Add(new DetailLOG() { Id = GlobalApp.iCount++, Fecha = DateTime.Now.ToString("yyyy'/'MM'/'dd' 'hh':'mm':'ss'.'fff' 'tt"), TipoEvento = TipoInformacion.Informacion, Numero = 0, Comentario = "Fecha de inicio: " + _oTime0.ToString() }); // Inicializamos las variables. InitVars(); Console.WriteLine("Fecha universal: {0}", Tool.ToDateUniversal(DateTime.Now)); var _ValoraCifrar = "Que_Chingue_A_Su_Mother_AMLO_Y_EL_AMERICA"; var _strNewGUID = Guid.NewGuid().ToString(); Console.WriteLine("Valor a cifrar: {0}. Valor cifrado: {1}.", _ValoraCifrar, RijndaelManagedEncryption.EncryptRijndael(_ValoraCifrar, _strNewGUID)); Console.WriteLine("Valor desencriptado: {0}.", RijndaelManagedEncryption.DecryptRijndael(RijndaelManagedEncryption.EncryptRijndael(_ValoraCifrar, _strNewGUID), _strNewGUID)); // Mapeo de DataTables. var priestsDataSet = DataSetGenerator.Priests(); DataNamesMapper <Person> mapper = new DataNamesMapper <Person>(); List <Person> persons = mapper.Map(priestsDataSet.Tables[0]).ToList(); var ranchersDataSet = DataSetGenerator.Ranchers(); persons.AddRange(mapper.Map(ranchersDataSet.Tables[0])); foreach (var person in persons) { Console.WriteLine("First Name: " + person.FirstName + ", Last Name: " + person.LastName + ", Date of Birth: " + person.DateOfBirth.ToShortDateString() + ", Job Title: " + person.JobTitle + ", Nickname: " + person.TakenName + ", Is American: " + person.IsAmerican); } // Cargando el archivo de configuración de la aplicación 'appsettings.json'. var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); // Leemos algunos de sus valores de la configuración,. string dbConn = configuration.GetSection("ConnectionStrings").GetSection("SQLServerConnectionBD").Value; string dbConn2 = configuration.GetSection("ConnectionStrings").GetSection("MariaDBConnectionBD").Value; // Limpiamos esta variable. configuration = null; Console.WriteLine("Cadena de conexión a Microsoft SQL Server: {0}", dbConn); Console.WriteLine("Cadena de conexión a MariaDB/MySQL Server: {0}", dbConn2); Console.WriteLine("Fecha universal: {0}", Tool.ToDateUniversal(DateTime.Now)); var strDato = "CapMax = ((DepositoConceptoJubilacionPension - CargosDomiciliados - CargosConceptoCreditos) * 0.4);nnCapMax=n((DepositoConceptoJubilacionPension - CargosDomiciliados - CargosConceptoCreditos) - CapMax) n> (NúmeroCasasComerciales < 2 ? 400 : 800)? CapMax : (NúmeroCasasComerciales < 2 ? 400 : 800);nnCapMax = CapMax > 0 ? CapMax : 0;tnnCapMax = NúmeroCasasComerciales >= 3 ? 0 : CapMax;"; Console.WriteLine("Dato anterior: {0}", strDato); strDato = Regex.Replace(strDato, Patrones.PatronAlphaLatino.Trim(), string.Empty); Console.WriteLine("Dato nuevo: {0}", strDato); var ArchivoReporteStr = string.Empty; // Uso de DBFactory. // El primer parametro es el nombre de la conexión a Base de Datos, según en el archivo AppSettings.json. // El segundo parametro es el tipo de conexión por plataforma de Base de Datos. Console.WriteLine("Haciendo una consulta SQL a Base de Datos (AWS Redshift via ODBC...)"); using (var oDb = new DBManager("AWSConnectionBD", DataBaseProviders.Odbc)) { // Carga de parametros. // var _oParam = new List<IDbDataParameter>(); // _oParam.Add(oDb.CreateParameter("@Id", valor1, System.Data.DBType.String)) // _oParam.Add(oDb.CreateParameter("@Id2", valor2, System.Data.DBType.String)) // var oDt = oDb.GetDataToDataTable("SQL_Command_Strng", System.Data.CommandType.Text, _oParam.ToArray()); var oDt = oDb.GetDataToDataTable("SELECT * FROM public.\"schema-convdatosgenerales-keops\" t1;", System.Data.CommandType.Text, null); Console.WriteLine("Consulta ejecutada correctamente. Total de registros: {0}.", oDt.Rows.Count); // Exportar un query de Base de Datos directo a archivo de texto plano. Console.WriteLine("Generando reporte de bases de datos..."); ArchivoReporteStr = Path.Combine(GlobalApp.FolderTemporal.Trim(), string.Format("{0}.txt", Guid.NewGuid().ToString())); oDb.ExportData(ArchivoReporteStr, "|", "SELECT * FROM public.\"schema-convdatosgenerales-keops\" t1;", System.Data.CommandType.Text, null); Console.WriteLine("El reporte se ha generado correctamente en {0}", ArchivoReporteStr.Trim()); } // Fin de la conexión de AWS Redshift via ODBC. Console.WriteLine("Haciendo una consulta SQL a Base de Datos (SQL Server Azure...)"); using (var oDb = new DBManager("SQLServerConnectionBD", DataBaseProviders.SQLServer)) { var oDt = oDb.GetDataToDataTable("SELECT * FROM products t1;", System.Data.CommandType.Text, null); Console.WriteLine("Consulta ejecutada correctamente. Total de registros: {0}.", oDt.Rows.Count); Console.WriteLine("Generando reporte de bases de datos..."); ArchivoReporteStr = Path.Combine(GlobalApp.FolderTemporal.Trim(), string.Format("{0}.csv", Guid.NewGuid().ToString())); oDb.ExportData(ArchivoReporteStr, ",", "SELECT * FROM products t1;", System.Data.CommandType.Text, null); Console.WriteLine("El reporte se ha generado correctamente en {0}", ArchivoReporteStr.Trim()); } // Fin de la conexión para SQL Server Azure. Console.WriteLine("Haciendo una consulta SQL a Base de Datos (MySQL Server/MariaDB Server...)"); using (var oDb = new DBManager("MariaDBConnectionBD", DataBaseProviders.MySQLServer)) { _oSb.Clear().AppendFormat("SHOW DATABASES;"); var s = oDb.GetDataToMapping <ListaBD>(_oSb.ToString(), System.Data.CommandType.Text, null); Console.WriteLine("Consulta ejecutada correctamente. Total de registros: {0}.", s.Count); // Recorremos la lista. Console.WriteLine("Leyendo la lista de Bases de Datos."); foreach (var u in s) { Console.WriteLine("{0}", u.Database.Trim()); } // Guardamos la lista de bases de datos en un archivo CSV. Console.WriteLine("Generando reporte de bases de datos..."); ArchivoReporteStr = Path.Combine(GlobalApp.FolderTemporal.Trim(), string.Format("{0}.dat", Guid.NewGuid().ToString())); oDb.ExportData(ArchivoReporteStr, "|", _oSb.ToString(), System.Data.CommandType.Text, null); Console.WriteLine("El reporte se ha generado correctamente en {0}", ArchivoReporteStr.Trim()); // Exportar directamente a Google Drive. Console.WriteLine("Generando reporte de bases de datos para Google Drive..."); var UrlSourceDrive = string.Empty; var IdKeyGoogleDrive = string.Empty; oDb.ExportDataToGoogleSheetsInFolderWithPermissions(ArchivoReporteStr.Replace(".dat", ".csv"), ",", "ClientId", "SecretId", GlobalApp.FolderPersonal.Trim(), "AplicacionGoogleAPI", "Identificador_Google_Drive", "*****@*****.**", GoogleDrivePermissions.Reader, GoogleDriveGroups.User, false, false, true, out UrlSourceDrive, out IdKeyGoogleDrive, _oSb.ToString(), System.Data.CommandType.Text, null); Console.WriteLine("Identificadores de Google Drive: {0} y {1}", UrlSourceDrive, IdKeyGoogleDrive); } // Fin de la conexión para MySQL Server/ MariaDB. _oSb = null; } catch (Exception oEx) { GlobalApp.Numero = 100; GlobalApp.Mensaje = string.Concat(((oEx.InnerException == null) ? oEx.Message.Trim() : oEx.InnerException.Message.ToString())); GlobalApp.DetailLog.Add(new DetailLOG() { Id = GlobalApp.iCount++, Fecha = DateTime.Now.ToString("yyyy'/'MM'/'dd' 'hh':'mm':'ss'.'fff' 'tt"), TipoEvento = TipoInformacion.ErrorProceso, Numero = GlobalApp.Numero, Comentario = GlobalApp.Mensaje }); Console.WriteLine("Ocurrieron errores al ejecutar este proceso: " + GlobalApp.Mensaje.Trim() + ". Seguimiento de pila: " + oEx.StackTrace.Trim()); } finally { // Limpiamos variables. _oTime1 = DateTime.Now; _oTimeTotal = new TimeSpan(_oTime1.Ticks - _oTime0.Ticks); DestroyVars(); // Obtengo la fecha de termino. GlobalApp.DetailLog.Add(new DetailLOG() { Id = GlobalApp.iCount++, Fecha = DateTime.Now.ToString("yyyy'/'MM'/'dd' 'hh':'mm':'ss'.'fff' 'tt"), TipoEvento = TipoInformacion.Informacion, Numero = 0, Comentario = "Fecha de termino: " + _oTime1.ToString() }); Console.WriteLine("Fecha de termino: " + _oTime1.ToString()); // Obtengo el tiempo transcurrido. GlobalApp.DetailLog.Add(new DetailLOG() { Id = GlobalApp.iCount++, Fecha = DateTime.Now.ToString("yyyy'/'MM'/'dd' 'hh':'mm':'ss'.'fff' 'tt"), TipoEvento = TipoInformacion.Informacion, Numero = 0, Comentario = "Tiempo transcurrido en ejecutarse este proceso: " + _oTimeTotal.ToString() }); Console.WriteLine("Tiempo transcurrido en ejecutarse este proceso: " + _oTimeTotal.ToString()); // Guardamos los mensajes en el log y limpiamos las variables. GlobalApp.oLog.ListEvents = GlobalApp.DetailLog; XMLSerializacion <LOGFiles> .WriteToXmlFile(Path.Combine(GlobalApp.FolderLog, string.Concat("LOGTestConsole_", DateTime.Now.ToString("yyyy''MM''dd''hh''mm''ss''fff"), ".xml")), GlobalApp.oLog, false); GlobalApp.DetailLog = null; GlobalApp.oLog = null; Console.WriteLine("Pulse cualquier tecla para salir..."); Console.ReadLine(); } }
public int EnviarNotaFiscal(NotaFiscal notaFiscal, string cscId, string csc) { if (notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao) { notaFiscal.Produtos[0].Descricao = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; } X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } if (!IsNotaFiscalValida(notaFiscal, cscId, csc, certificado)) { throw new ArgumentException("Nota fiscal inválida."); } try { var qrCode = ""; TNFe nfe = null; var newNodeXml = string.Empty; var idNotaCopiaSeguranca = 0; NotaFiscalEntity notaFiscalEntity = null; var refUri = "#NFe" + notaFiscal.Identificacao.Chave; var digVal = ""; var nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); try { var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); newNodeXml = PreencherQrCode(notaFiscal, cscId, csc, ref qrCode, digVal, node); var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; var lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; var configuração = _configuracaoRepository.GetConfiguracao(); if (configuração.IsContingencia) { return(_emiteNotaFiscalContingenciaService.EmitirNotaContingencia(notaFiscal, cscId, csc)); } NFeAutorizacao4Soap client = CriarClientWS(notaFiscal, certificado, codigoUf); idNotaCopiaSeguranca = SalvarNotaFiscalPréEnvio(notaFiscal, qrCode, nfe); TProtNFe protocolo = RetornarProtocoloParaLoteSomenteComUmaNotaFiscal(node, client); if (protocolo.infProt.cStat.Equals("100")) { notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalById(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.ENVIADA; notaFiscalEntity.DataAutorizacao = DateTime.ParseExact(protocolo.infProt.dhRecbto, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); notaFiscalEntity.Protocolo = protocolo.infProt.nProt; var xmlNFeProc = XmlUtil.GerarNfeProcXml(nfe, qrCode, protocolo); _notaFiscalRepository.Salvar(notaFiscalEntity, xmlNFeProc); } else { if (protocolo.infProt.xMotivo.Contains("Duplicidade")) { notaFiscalEntity = CorrigirNotaDuplicada(notaFiscal, qrCode, nFeNamespaceName, certificado, nfe, idNotaCopiaSeguranca); } else { //Nota continua com status pendente nesse caso XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); var mensagem = string.Concat( "O xml informado é inválido de acordo com o validar da SEFAZ. Nota Fiscal não enviada!", "\n", protocolo.infProt.xMotivo); throw new ArgumentException(mensagem); } } AtribuirValoresApósEnvioComSucesso(notaFiscal, qrCode, notaFiscalEntity); return(idNotaCopiaSeguranca); } catch (Exception e) { log.Error(e); if (e is WebException || e.InnerException is WebException) { throw new Exception("Serviço indisponível ou sem conexão com a internet.", e.InnerException); } try { notaFiscalEntity = VerificarSeNotaFoiEnviada(notaFiscal, qrCode, nfe, idNotaCopiaSeguranca, notaFiscalEntity, nFeNamespaceName, certificado); } catch (Exception retornoConsultaException) { log.Error(retornoConsultaException); XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); throw; } AtribuirValoresApósEnvioComSucesso(notaFiscal, qrCode, notaFiscalEntity); return(idNotaCopiaSeguranca); } } catch (Exception e) { log.Error(e); //Necessário para não tentar enviar a mesma nota como contingência. _configuracaoService.SalvarPróximoNúmeroSérie(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo55) { throw; } var message = e.InnerException != null ? e.InnerException.Message : e.Message; NotaEmitidaEmContingenciaEvent(message, notaFiscal.Identificacao.DataHoraEmissao); return(_emiteNotaFiscalContingenciaService.EmitirNotaContingencia(notaFiscal, cscId, csc)); } finally { _configuracaoService.SalvarPróximoNúmeroSérie(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente); } }