/// <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(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(); }
private XmlDocument MontarXml(long numeroLote) { //Cabeçalho do lote var xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xmlString += "<enviNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"" + NFeContexto.Versao.VersaoString + "\">"; xmlString += "<idLote>" + numeroLote.ToString("000000000000000") + "</idLote>"; if (NFeContexto.Versao == NFeVersao.VERSAO_3_1_0) { if (sincrono) { xmlString += "<indSinc>1</indSinc>"; } else { xmlString += "<indSinc>0</indSinc>"; } } //Adiciona as notas no lote for (var i = 0; i < notaLista.Count; i++) { //Converte o Xml de uma nota em texto var NotaString = notaLista[i].ConteudoXml; //Identifica somente o conteudo entre a tag <NFe> var inicioTag = NotaString.IndexOf("<NFe"); var fimTag = NotaString.Length - inicioTag; //Adiciona no arquivo de lote xmlString += NotaString.Substring(inicioTag, fimTag); } //Rodapé do lote xmlString += "</enviNFe>"; var bllXml = new Xml(); return Xml.StringToXml(xmlString); }