public static string GeraQrCode(this TNFe nfe, string cscId, string cscToken, string digest = null) { var builder = new StringBuilder(); builder.Append(ListaUrl.BuscaUrls(nfe.infNFe.ide.cUF, nfe.infNFe.ide.tpAmb).UrlNfceQrCode); var dataHex = ToHex(nfe.infNFe.ide.dhEmi ?? nfe.infNFe.ide.dhCont); if (digest == null) { digest = ToHex(nfe.Signature.SignedInfo.Reference.DigestValue); } var parametros = string.Format("chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF={5}&vICMS={6}&digVal={7}", nfe.infNFe.Id.Substring(3), nfe.infNFe.versao, (int)nfe.infNFe.ide.tpAmb, (nfe.infNFe.dest != null && nfe.infNFe.dest.Item.HasValue()) ? nfe.infNFe.dest.Item : String.Empty, dataHex, nfe.infNFe.total.ICMSTot.vNF, nfe.infNFe.total.ICMSTot.vICMS, digest); builder.Append(parametros); builder.AppendFormat("&cIdToken={0}", cscId); using (var sha = SHA1.Create()) { parametros += "&CSC=" + cscToken; builder.Append("&cHashQRCode=" + ToHex(sha.ComputeHash(Encoding.UTF8.GetBytes(parametros)))); } return(builder.ToString()); }
public TRetEnviNFe EnviaLote2(HiperNFe Notas, int NumLote) { XmlNode strRetorno = null; dynamic xmldoc = new XmlDocument(); ListaUrl listaURL = default(ListaUrl); listaURL = WsUrls.BuscaURL(Notas.Configuracao.CodUF, Notas.Configuracao.Ambiente); string nomeArquivoLote = _PastaLog + NumLote.ToString() + "-env-lot.xml"; string nomeArquivoRetLote = _PastaLog + NumLote.ToString() + "-rec.xml"; try { TEnviNFe LoteNFe = new TEnviNFe(); LoteNFe.idLote = NumLote.ToString(); LoteNFe.versao = Notas.Configuracao.Versao; // ERROR: Not supported in C#: ReDimStatement int indice = 0; LoteNFe.NFe = new TNFe[Notas.NotasFiscais.Count]; foreach (TNfeProc nota in Notas.NotasFiscais) { LoteNFe.NFe[indice] = nota.NFe; indice += 1; } LoteNFe.GeraLoteNFe(nomeArquivoLote); xmldoc.Load(nomeArquivoLote); //Carrega o arquivo XML Recepcao2.NfeRecepcao2 wsMsg = default(Recepcao2.NfeRecepcao2); Recepcao2.nfeCabecMsg cab = new Recepcao2.nfeCabecMsg(); //UF E VERSÃO DO CABEÇALHO cab.cUF = PegarCodigoUF(Notas.Configuracao.CodUF); cab.versaoDados = LoteNFe.versao; //CABEÇALHO USADA PARA ENVIO DE LOTE wsMsg = new Recepcao2.NfeRecepcao2(listaURL.UrlNfeRecepcao); wsMsg.nfeCabecMsgValue = cab; wsMsg.Timeout = 100000; wsMsg.ClientCertificates.Add(Notas.Certificado); wsMsg.SoapVersion = SoapProtocolVersion.Soap12; xmldoc.Save(nomeArquivoLote); //RETORNO DA SEFAZ strRetorno = wsMsg.nfeRecepcaoLote2(xmldoc); TRetEnviNFe retornoEnvio = new TRetEnviNFe(); XmlDocument retornoXML = new XmlDocument(); retornoXML.LoadXml(strRetorno.OuterXml); retornoXML.Save(nomeArquivoRetLote); retornoEnvio = TRetEnviNFe.LoadFromFile(nomeArquivoRetLote); return(retornoEnvio); } catch (Exception) { throw new ACBr.Net.NFe.Exceptions.EnviaLote2Exception("Falha ao enviar o lote de NFe."); } }