From f44868b73ca0bd2bbda84adb30294eca45ea1cf2 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Thu, 8 Jun 2017 18:21:47 -0300 Subject: [PATCH] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20m=C3=A9todo=20de=20di?= =?UTF-8?q?stribui=C3=A7=C3=A3o=20de=20documentos=20fiscais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 31 ++----------------- pytrustnfe/client.py | 4 +-- pytrustnfe/nfe/__init__.py | 19 ++++++------ pytrustnfe/nfe/comunicacao.py | 7 +++-- .../nfe/templates/NFeDistribuicaoDFe.xml | 16 ++++++++++ 5 files changed, 36 insertions(+), 41 deletions(-) create mode 100644 pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index c7725061..97ff7322 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -21,7 +21,6 @@ WS_NFCE_QR_CODE = 'NfeQRCode' WS_NFCE_RET_AUTORIZACAO = 'NFeRetAutorizacao', WS_NFCE_CONSULTA_DESTINADAS = 'NfeConsultaDest', -WS_NFCE_DOWNLOAD = 'NfeDownloadNF', WS_NFE_CADASTRO = 'NfeConsultaCadastro' @@ -29,9 +28,7 @@ WS_DPEC_CONSULTA = 8 WS_NFE_RECEPCAO_EVENTO = 'RecepcaoEventoCarta' -WS_NFE_DOWNLOAD = 'NfeDownloadNF' -WS_NFE_CONSULTA_DESTINADAS = 'NfeConsultaDest' -WS_DFE_DISTRIBUICAO = 12 +WS_DFE_DISTRIBUICAO = 'NFeDistribuicaoDFe' NFE_AMBIENTE_PRODUCAO = 1 NFE_AMBIENTE_HOMOLOGACAO = 2 @@ -76,7 +73,7 @@ def localizar_url(servico, estado, mod='55', ambiente=2): sigla = SIGLA_ESTADO[estado] ws = ESTADO_WS[sigla] - if servico in (WS_NFE_CONSULTA_DESTINADAS, WS_NFE_DOWNLOAD): + if servico in (WS_DFE_DISTRIBUICAO): ws = AN if mod in ws: @@ -133,14 +130,6 @@ def localizar_qrcode(estado, ambiente=2): 'webservice': 'RecepcaoEvento', 'metodo': 'nfeRecepcaoEvento', }, - WS_NFE_DOWNLOAD: { - 'webservice': 'NfeDownloadNF', - 'metodo': 'nfeDownloadNF', - }, - WS_NFE_CONSULTA_DESTINADAS: { - 'webservice': 'NfeConsultaDest', - 'metodo': 'nfeConsultaNFDest', - }, WS_DFE_DISTRIBUICAO: { 'webservice': 'NFeDistribuicaoDFe', 'metodo': 'nfeDistDFeInteresse' @@ -181,7 +170,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFE_INUTILIZACAO: 'NfeInutilizacao2/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'NfeConsulta2/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'NfeStatusServico2/NfeStatusServico2.asmx', - WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.sefazvirtual.fazenda.gov.br', @@ -191,7 +179,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFE_INUTILIZACAO: 'NfeInutilizacao2/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'NfeConsulta2/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'NfeStatusServico2/NfeStatusServico2.asmx', - WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx', } } @@ -269,17 +256,13 @@ def localizar_qrcode(estado, ambiente=2): AN = { NFE_AMBIENTE_PRODUCAO: { - 'servidor': 'www.nfe.fazenda.gov.br', + 'servidor': 'www1.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', - WS_NFE_CONSULTA_DESTINADAS: 'NFeConsultaDest/NFeConsultaDest.asmx', - WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx', WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', - WS_NFE_CONSULTA_DESTINADAS: 'NFeConsultaDest/NFeConsultaDest.asmx', - WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx', WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', }, } @@ -522,8 +505,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFE_CONSULTA_DESTINADAS: 'ws/nfeConsultaDest/nfeConsultaDest.asmx', - WS_NFE_DOWNLOAD: 'ws/nfeDownloadNF/nfeDownloadNF.asmx', WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', @@ -535,8 +516,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFE_CONSULTA_DESTINADAS: 'ws/nfeConsultaDest/nfeConsultaDest.asmx', - WS_NFE_DOWNLOAD: 'ws/nfeDownloadNF/nfeDownloadNF.asmx', WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', @@ -550,8 +529,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', WS_NFCE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFCE_CONSULTA_DESTINADAS: 'ws/nfeConsultaDest/nfeConsultaDest.asmx', - WS_NFCE_DOWNLOAD: 'ws/nfeDownloadNF/nfeDownloadNF.asmx', WS_NFCE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', @@ -564,8 +541,6 @@ def localizar_qrcode(estado, ambiente=2): WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', WS_NFCE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFCE_CONSULTA_DESTINADAS: 'ws/nfeConsultaDest/nfeConsultaDest.asmx', - WS_NFCE_DOWNLOAD: 'ws/nfeDownloadNF/nfeDownloadNF.asmx', WS_NFCE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', diff --git a/pytrustnfe/client.py b/pytrustnfe/client.py index 595d38e0..bef7b9d1 100644 --- a/pytrustnfe/client.py +++ b/pytrustnfe/client.py @@ -42,8 +42,8 @@ def __init__(self, url, cert_path, key_path): def _headers(self, action): return { - u'Content-type': u'application/soap+xml; charset=utf-8; action="http://www.portalfiscal.inf.br/nfe/wsdl/%s"' % action, - u'Accept': u'application/soap+xml; charset=utf-8' + u'Content-type': u'text/xml; charset=utf-8; action="http://www.portalfiscal.inf.br/nfe/wsdl/%s"' % action, + u'Accept': u'application/soap+xml; charset=utf-8', } def post_soap(self, xml_soap, cabecalho): diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index 8546772d..f09b486f 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -24,8 +24,8 @@ def _build_header(method, **kwargs): 'NfeInutilizacao': ('NfeInutilizacao2', '3.10'), 'RecepcaoEventoCancelamento': ('RecepcaoEvento', '1.00'), 'RecepcaoEventoCarta': ('RecepcaoEvento', '1.00'), - 'NfeConsultaDest': ('NfeConsultaDest', '3.10'), - 'NfeDownloadNF': ('NfeDownloadNF', '3.10'), + 'NFeDistribuicaoDFe': ('NFeDistribuicaoDFe/nfeDistDFeInteresse', + '1.00'), } vals = {'estado': kwargs['estado'], 'soap_action': action[method][0], @@ -177,7 +177,12 @@ def _send(certificado, method, sign, **kwargs): kwargs['ambiente']) cabecalho = _build_header(method, **kwargs) - response, obj = executar_consulta(certificado, url, cabecalho, xml_send) + send_raw = False + if method == 'NFeDistribuicaoDFe': + send_raw = True + + response, obj = executar_consulta(certificado, url, cabecalho, xml_send, + send_raw=send_raw) return { 'sent_xml': xml_send, 'received_xml': response, @@ -226,9 +231,5 @@ def recepcao_evento_epec(certificado, **kwargs): # Assinar return _send(certificado, 'RecepcaoEventoEPEC', True, **kwargs) -def consulta_nfe_destinada(certificado, **kwargs): - return _send(certificado, 'NfeConsultaDest', False, **kwargs) - - -def download_nfe(certificado, **kwargs): - return _send(certificado, 'NfeDownloadNF', False, **kwargs) +def consulta_distribuicao_nfe(certificado, **kwargs): + return _send(certificado, 'NFeDistribuicaoDFe', False, **kwargs) diff --git a/pytrustnfe/nfe/comunicacao.py b/pytrustnfe/nfe/comunicacao.py index f15fe157..2e3f4d91 100644 --- a/pytrustnfe/nfe/comunicacao.py +++ b/pytrustnfe/nfe/comunicacao.py @@ -12,7 +12,7 @@ def _soap_xml(body, cabecalho): xml = '' xml += '' - xml += '' + xml += '' xml += '' + cabecalho.estado + '' + cabecalho.versao + '' xml += '' xml += body @@ -20,12 +20,15 @@ def _soap_xml(body, cabecalho): return xml.rstrip('\n') -def executar_consulta(certificado, url, cabecalho, xmlEnviar): +def executar_consulta(certificado, url, cabecalho, xmlEnviar, send_raw=False): cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) cert_path, key_path = save_cert_key(cert, key) client = HttpClient(url, cert_path, key_path) xml_enviar = _soap_xml(xmlEnviar, cabecalho) + if send_raw: + xml = '' + xmlEnviar.rstrip('\n') + xml_enviar = xml xml_retorno = client.post_soap(xml_enviar, cabecalho) return sanitize_response(xml_retorno) diff --git a/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml new file mode 100644 index 00000000..5ea15945 --- /dev/null +++ b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml @@ -0,0 +1,16 @@ + + + + + + {{ ambiente }} + {{ estado }} + {{ consulta.cnpj_cpf }} + + {{ consulta.ultimo_nsu }} + + + + + +