diff --git a/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs
index 9db372857..6a968802d 100644
--- a/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs
+++ b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs
@@ -33,18 +33,19 @@
-using System;
-using System.IO;
-using System.Reflection;
-using System.Threading.Tasks;
-using System.Xml;
using CTe.Classes;
using CTe.Classes.Servicos.DistribuicaoDFe;
using CTe.Servicos.Factory;
using CTe.Utils.DistribuicaoDFe;
-using CTe.Utils;
using CTe.Wsdl.DistribuicaoDFe;
using DFe.Utils;
+using Shared.DFe.Utils;
+using System;
+using System.IO;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Threading.Tasks;
+using System.Xml;
using Compressao = DFe.Utils.Compressao;
@@ -52,6 +53,20 @@ namespace CTe.Servicos.DistribuicaoDFe
{
public class ServicoCTeDistribuicaoDFe
{
+ public ServicoCTeDistribuicaoDFe()
+ {
+
+ }
+
+ private readonly ConfiguracaoServico _configuracaoServico;
+ private readonly X509Certificate2 _certificado;
+ public ServicoCTeDistribuicaoDFe(ConfiguracaoServico configuracaoServico, X509Certificate2 certificado = null)
+ {
+ _configuracaoServico = configuracaoServico;
+ _certificado = certificado ?? configuracaoServico.X509Certificate2;
+ }
+
+
///
/// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica.
///
@@ -63,7 +78,7 @@ public class ServicoCTeDistribuicaoDFe
/// Retorna um objeto da classe CTeDistDFeInteresse com os documentos de interesse do CNPJ/CPF pesquisado
public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", ConfiguracaoServico configuracaoServico = null)
{
- var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia;
+ var configServico = configuracaoServico ?? _configuracaoServico ?? ConfiguracaoServico.Instancia;
distDFeInt pedDistDFeInt;
XmlDocument dadosConsulta;
var ws = InicializaCTeDistDFeInteresse(documento, ultNSU, nSU, out pedDistDFeInt, out dadosConsulta, configServico);
@@ -82,7 +97,7 @@ public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento
{
for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++)
{
- string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe);
+ string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe).RemoverDeclaracaoXml();
string chCTe = string.Empty;
if (conteudo.StartsWith("(conteudo);
chCTe = procEventoNFeConteudo.eventoCTe.infEvento.chCTe;
}
+ else if (conteudo.StartsWith("(conteudo);
+ chCTe = retConteudo.protCTe.infProt.chCTe;
+ }
+ else
+ {
+
+ }
string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_');
if (chCTe == string.Empty)
@@ -111,7 +135,7 @@ public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento
public async Task CTeDistDFeInteresseAsync(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", ConfiguracaoServico configuracaoServico = null)
{
- var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia;
+ var configServico = configuracaoServico ?? _configuracaoServico ?? ConfiguracaoServico.Instancia;
distDFeInt pedDistDFeInt;
XmlDocument dadosConsulta;
var ws = InicializaCTeDistDFeInteresse(documento, ultNSU, nSU, out pedDistDFeInt, out dadosConsulta, configServico);
@@ -130,7 +154,7 @@ public async Task CTeDistDFeInteresseAsync(string ufAutor,
{
for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++)
{
- string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe);
+ string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe).RemoverDeclaracaoXml();
string chCTe = string.Empty;
if (conteudo.StartsWith(" CTeDistDFeInteresseAsync(string ufAutor,
var procEventoNFeConteudo = FuncoesXml.XmlStringParaClasse(conteudo);
chCTe = procEventoNFeConteudo.eventoCTe.infEvento.chCTe;
}
+ else if (conteudo.StartsWith("(conteudo);
+ chCTe = retConteudo.protCTe.infProt.chCTe;
+ }
string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_');
if (chCTe == string.Empty)
@@ -164,7 +193,7 @@ private CTeDistDFeInteresse InicializaCTeDistDFeInteresse(string documento, stri
#region Cria o objeto wdsl para consulta
- var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(configuracaoServico);
+ var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(configuracaoServico, _certificado);
#endregion
@@ -183,11 +212,11 @@ private CTeDistDFeInteresse InicializaCTeDistDFeInteresse(string documento, stri
pedDistDFeInt.CNPJ = documento;
- pedDistDFeInt.distNSU = new distNSU {ultNSU = ultNSU.PadLeft(15, '0')};
+ pedDistDFeInt.distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') };
if (!nSU.Equals("0"))
{
- pedDistDFeInt.consNSU = new consNSU {NSU = nSU.PadLeft(15, '0')};
+ pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') };
pedDistDFeInt.distNSU = null;
}
diff --git a/CTe.Servicos/Factory/WsdlFactory.cs b/CTe.Servicos/Factory/WsdlFactory.cs
index d8c142cc9..2d680671c 100644
--- a/CTe.Servicos/Factory/WsdlFactory.cs
+++ b/CTe.Servicos/Factory/WsdlFactory.cs
@@ -46,109 +46,110 @@
using CTe.Wsdl.ConsultaProtocolo.V4;
using CTe.Wsdl.Evento.V4;
using CTe.Wsdl.Recepcao.Sincrono;
+using System.Security.Cryptography.X509Certificates;
namespace CTe.Servicos.Factory
{
public class WsdlFactory
{
- public static CteStatusServico CriaWsdlCteStatusServico(ConfiguracaoServico configuracaoServico = null)
+ public static CteStatusServico CriaWsdlCteStatusServico(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteStatusServico;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteStatusServico(configuracaoWsdl);
}
- public static CteConsulta CriaWsdlConsultaProtocolo(ConfiguracaoServico configuracaoServico = null)
+ public static CteConsulta CriaWsdlConsultaProtocolo(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteConsulta;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteConsulta(configuracaoWsdl);
}
- public static CteConsultaV4 CriaWsdlConsultaProtocoloV4(ConfiguracaoServico configuracaoServico = null)
+ public static CteConsultaV4 CriaWsdlConsultaProtocoloV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteConsulta;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteConsultaV4(configuracaoWsdl);
}
- public static CteInutilizacao CriaWsdlCteInutilizacao(ConfiguracaoServico configuracaoServico = null)
+ public static CteInutilizacao CriaWsdlCteInutilizacao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteInutilizacao;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteInutilizacao(configuracaoWsdl);
}
- public static CteRetRecepcao CriaWsdlCteRetRecepcao(ConfiguracaoServico configuracaoServico = null)
+ public static CteRetRecepcao CriaWsdlCteRetRecepcao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRetRecepcao;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteRetRecepcao(configuracaoWsdl);
}
- public static CteRecepcao CriaWsdlCteRecepcao(ConfiguracaoServico configuracaoServico = null)
+ public static CteRecepcao CriaWsdlCteRecepcao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcao;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteRecepcao(configuracaoWsdl);
}
- public static CteRecepcaoSincronoV4 CriaWsdlCteRecepcaoSincronoV4(ConfiguracaoServico configuracaoServico = null)
+ public static CteRecepcaoSincronoV4 CriaWsdlCteRecepcaoSincronoV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoSinc;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteRecepcaoSincronoV4(configuracaoWsdl);
}
- public static CteRecepcaoEvento CriaWsdlCteEvento(ConfiguracaoServico configuracaoServico = null)
+ public static CteRecepcaoEvento CriaWsdlCteEvento(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoEvento;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteRecepcaoEvento(configuracaoWsdl);
}
- public static CteRecepcaoEventoV4 CriaWsdlCteEventoV4(ConfiguracaoServico configuracaoServico = null)
+ public static CteRecepcaoEventoV4 CriaWsdlCteEventoV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoEvento;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CteRecepcaoEventoV4(configuracaoWsdl);
}
- public static CTeDistDFeInteresse CriaWsdlCTeDistDFeInteresse(ConfiguracaoServico configuracaoServico = null)
+ public static CTeDistDFeInteresse CriaWsdlCTeDistDFeInteresse(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null)
{
var url = UrlHelper.ObterUrlServico(configuracaoServico).CTeDistribuicaoDFe;
- var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico);
+ var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado);
return new CTeDistDFeInteresse(configuracaoWsdl);
}
- private static WsdlConfiguracao CriaConfiguracao(string url, ConfiguracaoServico configuracaoServico = null)
+ private static WsdlConfiguracao CriaConfiguracao(string url, ConfiguracaoServico configuracaoServico, X509Certificate2 certificado)
{
var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia;
var codigoEstado = configServico.cUF.GetCodigoIbgeEmString();
- var certificadoDigital = configServico.X509Certificate2;
+ var certificadoDigital = certificado ?? configServico.X509Certificate2;
var versaoEmString = configServico.VersaoLayout.GetString();
var timeOut = configServico.TimeOut;
diff --git a/DFe.Utils/StringExtencoes.cs b/DFe.Utils/StringExtencoes.cs
index 3dc264aee..be85b97cb 100644
--- a/DFe.Utils/StringExtencoes.cs
+++ b/DFe.Utils/StringExtencoes.cs
@@ -1,4 +1,5 @@
-using System.Text.RegularExpressions;
+using System;
+using System.Text.RegularExpressions;
namespace Shared.DFe.Utils
{
@@ -24,5 +25,19 @@ public static string RemoverAcentos(this string valor)
return valor;
}
+
+ public static string RemoverDeclaracaoXml(this string xml)
+ {
+ if (string.IsNullOrEmpty(xml))
+ return xml;
+
+ var posIni = xml.IndexOf("", StringComparison.Ordinal);
+ if (posIni < 0)
+ return xml;
+
+ var posFinal = xml.IndexOf("?>", StringComparison.Ordinal);
+ return posFinal < 0 ? xml : xml.Remove(posIni, (posFinal + 2) - posIni);
+ }
+
}
}