Example #1
0
        /// <summary>
        ///     Adiciona e valida uma nota a ser enviada apartir de um arquivo XML.
        /// </summary>
        /// <param name="arquivoCaminhoXml"></param>
        public void AdicionarNota(String arquivoCaminhoXml)
        {
            //Carrega uma nota XML e passa para um objeto Nota
            var nota = new Nota(arquivoCaminhoXml);

            AdicionarNota(nota);
        }
Example #2
0
        /// <summary>
        ///     Adiciona e valida uma nota a ser enviada.
        /// </summary>
        /// <param name="nota"></param>
        public void AdicionarNota(Nota nota)
        {
            var bllAssinatura = new AssinaturaDeXml();
            var bllXml = new Xml();

            //Verifica se já passou o limite de notas por lote (regra do SEFAZ). 
            if (notaLista.Count >= 50)
            {
                throw new Exception("Limite máximo por lote é de 50 arquivos");
            }

            //Assina a nota
            try
            {
                bllAssinatura.AssinarNota(nota, NFeContexto.Certificado, "NFe");
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao assinar Nota: " + e.Message);
            }

            //Verifica se a nota está de acordo com o schema, se não estiver vai disparar um erro
            try
            {
                bllXml.ValidaSchema(nota.CaminhoFisico,
                    Util.ContentFolderSchemaValidacao + "\\" + NFeContexto.Versao.PastaXml + "\\" + arquivoSchema);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao validar Nota: " + e.Message);
            }

            //Adiciona para a lista do lote a serem enviadas
            notaLista.Add(nota);
        }
        private RetornoSimples EnviarEvento(StringBuilder eventoXml, String id, String arquivoEvento, String schema)
        {
            var documentXml = Assinar(eventoXml, id, schema);

            var xmlDoc = new XmlDocument();
            xmlDoc.Load(arquivoEvento);

            var conteudoXml = xmlDoc.OuterXml;


            var nota = new Nota(NFeContexto) {CaminhoFisico = arquivoEvento};

            var bllXml = new Xml();

            var xmlString = new StringBuilder();
            xmlString.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            xmlString.Append("<envEvento versao=\"1.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
            xmlString.Append("	<idLote>0131318</idLote>");
            xmlString.Append(conteudoXml);
            xmlString.Append("</envEvento>");

            var SW_2 = File.CreateText(arquivoEvento);
            SW_2.Write(xmlString.ToString());
            SW_2.Close();

            //Verifica se a nota está de acordo com o schema, se não estiver vai disparar um erro
            try
            {
                bllXml.ValidaSchema(arquivoEvento,
                    Util.ContentFolderSchemaValidacao + "\\" + NFeContexto.Versao.PastaXml + "\\" + schema);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao validar Nota: " + e.Message);
            }

            var recepcao = new RecepcaoEvento2.RecepcaoEvento();
            var cabecalho = new nfeCabecMsg();
            cabecalho.cUF = "35";
            cabecalho.versaoDados = "1.00";

            recepcao.nfeCabecMsgValue = cabecalho;
            recepcao.ClientCertificates.Add(NFeContexto.Certificado);

            var resposta = recepcao.nfeRecepcaoEvento(Xml.StringToXml(xmlString.ToString()));

            var status = resposta["retEvento"]["infEvento"]["xMotivo"].InnerText;
            var motivo = resposta["retEvento"]["infEvento"]["cStat"].InnerText;
            return new RetornoSimples(status, motivo);
        }
        private String Assinar(Nota nota, X509Certificate2 x509Cert, String TagAssinatura, String URI = "")
        {
            string xmlString;
            using (var srReader = File.OpenText(nota.CaminhoFisico))
            {
                xmlString = srReader.ReadToEnd();
            }

            // Create a new XML document.
            var doc = new XmlDocument();

            // Format the document to ignore white spaces.
            doc.PreserveWhitespace = false;
            doc.LoadXml(xmlString);

            XmlDocument xMLDoc;

            var reference = new Reference();
            if (!String.IsNullOrEmpty(nota.NotaId))
                reference.Uri = "#" + TagAssinatura + nota.NotaId;
            else if (!String.IsNullOrEmpty(URI))
                reference.Uri = URI;

            // Create a SignedXml object.
            var signedXml = new SignedXml(doc);

            // Add the key to the SignedXml document
            signedXml.SigningKey = x509Cert.PrivateKey;

            // Add an enveloped transformation to the reference.
            var env = new XmlDsigEnvelopedSignatureTransform();
            reference.AddTransform(env);

            var c14 = new XmlDsigC14NTransform();
            reference.AddTransform(c14);

            // Add the reference to the SignedXml object.
            signedXml.AddReference(reference);

            // Create a new KeyInfo object
            var keyInfo = new KeyInfo();

            // Load the certificate into a KeyInfoX509Data object
            // and add it to the KeyInfo object.
            keyInfo.AddClause(new KeyInfoX509Data(x509Cert));

            // Add the KeyInfo object to the SignedXml object.
            signedXml.KeyInfo = keyInfo;
            signedXml.ComputeSignature();

            // Get the XML representation of the signature and save
            // it to an XmlElement object.
            var xmlDigitalSignature = signedXml.GetXml();

            // Gravar o elemento no documento XML
            var assinaturaNodes = doc.GetElementsByTagName(TagAssinatura);
            foreach (XmlNode nodes in assinaturaNodes)
            {
                nodes.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
                break;
            }

            xMLDoc = new XmlDocument();
            xMLDoc.PreserveWhitespace = false;
            xMLDoc = doc;

            // Atualizar a string do XML já assinada
            var StringXMLAssinado = xMLDoc.OuterXml;

            //Atualiza a nota assinada
            nota.ConteudoXml = StringXMLAssinado;

            // Gravar o XML Assinado no HD
            var SignedFile = nota.CaminhoFisico;
            var SW_2 = File.CreateText(SignedFile);
            SW_2.Write(StringXMLAssinado);
            SW_2.Close();

            return SignedFile;
        }
 /// <summary>
 ///     Assina um arquivo Xml
 /// </summary>
 /// <param name="arquivoNome"></param>
 /// <param name="operacao"></param>
 /// <param name="x509Cert"></param>
 public String AssinarNota(Nota nota, X509Certificate2 x509Cert, String tagAssinatura, String uri = "")
 {
     //Abrir o arquivo XML a ser assinado e ler o seu conteúdo
     return Assinar(nota, x509Cert, tagAssinatura, uri);
 }
        private String Assinar(StringBuilder xmlStringBuilder, String id, String schema)
        {
            var bllXml = new Xml();
            var arquivoTemporario = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\temp.xml";
            var sw2 = File.CreateText(arquivoTemporario);
            sw2.Write(xmlStringBuilder.ToString());
            sw2.Close();

            var nota = new Nota(NFeContexto) {CaminhoFisico = arquivoTemporario};

            //Assina a nota
            var bllAssinatura = new AssinaturaDeXml();
            try
            {
                bllAssinatura.AssinarNota(nota, NFeContexto.Certificado, "evento", "#" + id);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao assinar Nota: " + e.Message);
            }

            return xmlStringBuilder.ToString();
        }