def consulta_distribuicao_nfe(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_consulta_distribuicao_nfe(certificado, **kwargs) xml_send = kwargs["xml"] base_url = localizar_url( 'NFeDistribuicaoDFe', kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) session = Session() session.cert = (cert, key) session.verify = False transport = Transport(session=session) xml = etree.fromstring(xml_send) xml_um = etree.fromstring('<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/"><cUF>AN</cUF><versaoDados>1.00</versaoDados></nfeCabecMsg>') client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) with client.settings(raw_response=True): response = client.service[first_operation](nfeDadosMsg=xml, _soapheaders=[xml_um]) response, obj = sanitize_response(response.text) return { 'sent_xml': xml_send, 'received_xml': response, 'object': obj.Body.nfeDistDFeInteresseResponse.nfeDistDFeInteresseResult }
def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url(method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) session = Session() session.cert = (cert, key) session.verify = False transport = Transport(session=session) xml = etree.fromstring(xml_send) client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) with client.settings(raw_response=True): response = client.service[first_operation](xml) response, obj = sanitize_response(response.text) return { 'sent_xml': xml_send, 'received_xml': response, 'object': obj.Body.getchildren()[0] }
def consulta_distribuicao_nfe(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_consulta_distribuicao_nfe(certificado, **kwargs) xml_send = kwargs["xml"] base_url = localizar_url('NFeDistribuicaoDFe', kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) session = Session() session.cert = (cert, key) session.verify = False transport = Transport(session=session) xml = etree.fromstring(xml_send) xml_um = etree.fromstring( '<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeDistribuicaoDFe"><cUF>AN</cUF><versaoDados>1.00</versaoDados></nfeCabecMsg>' ) client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) first_operation = [ x for x in iter(client.wsdl.port_types[port].operations) if "Zip" not in x ][0] with client.settings(raw_response=True): response = client.service[first_operation](nfeDadosMsg=xml, _soapheaders=[xml_um]).text response, obj = sanitize_response(response.encode()) return { 'sent_xml': xml_send, 'received_xml': response.decode(), 'object': obj }
def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] url = localizar_url(method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) if method == 'RecepcaoEventoManifesto': url = 'https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx' # Não há mais necessidade de usar o cabeçalho SOAP # cabecalho = _build_header(method, **kwargs) send_raw = False if method == 'NFeDistribuicaoDFe': send_raw = True response, obj = executar_consulta(certificado, url, method, xml_send, send_raw=send_raw) return { 'sent_xml': xml_send, 'received_xml': response.decode(), 'object': obj }
def _send(certificado, method, sign, **kwargs): path = os.path.join(os.path.dirname(__file__), 'templates') xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs) modelo = xmlElem_send.find(".//{http://www.portalfiscal.inf.br/nfe}mod") modelo = modelo.text if modelo is not None else '55' if sign: # Caso for autorização temos que adicionar algumas tags tipo # cEan, cEANTrib porque o governo sempre complica e não segue padrão if method == 'NfeAutorizacao': xmlElem_send = _add_required_node(xmlElem_send) signer = Assinatura(certificado.pfx, certificado.password) if method == 'NfeAutorizacao': xml_send = signer.assina_xml(xmlElem_send, kwargs['NFes'][0]['infNFe']['Id']) elif method == 'RecepcaoEventoCancelamento': xml_send = signer.assina_xml(xmlElem_send, kwargs['eventos'][0]['Id']) if modelo == '65': xml_send = _add_qrCode(xml_send, **kwargs) else: xml_send = etree.tostring(xmlElem_send) url = localizar_url(method, kwargs['estado'], modelo, kwargs['ambiente']) cabecalho = _build_header(method, **kwargs) response, obj = executar_consulta(certificado, url, cabecalho, xml_send) return {'sent_xml': xml_send, 'received_xml': response, 'object': obj}
def _send_v310(certificado, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url( "NFeDistribuicaoDFe", kwargs["estado"], kwargs["modelo"], kwargs["ambiente"] ) cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) session = Session() session.cert = (cert, key) session.verify = False transport = Transport(session=session) xml = etree.fromstring(xml_send) xml_um = etree.fromstring( '<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/"><cUF>AN</cUF><versaoDados>1.00</versaoDados></nfeCabecMsg>' ) client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) with client.settings(raw_response=True): response = client.service[first_operation]( nfeDadosMsg=xml, _soapheaders=[xml_um] ) response, obj = sanitize_response(response.text) return { "sent_xml": xml_send, "received_xml": response, "object": obj.Body.nfeDistDFeInteresseResponse.nfeDistDFeInteresseResult, }
def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url( method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) session = Session() session.cert = (cert, key) session.verify = False transport = Transport(session=session) xml = etree.fromstring(xml_send) client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) namespaceNFe = xml.find(".//{http://www.portalfiscal.inf.br/nfe}NFe") if namespaceNFe is not None: namespaceNFe.set('xmlns', 'http://www.portalfiscal.inf.br/nfe') with client.settings(raw_response=True): response = client.service[first_operation](xml) response, obj = sanitize_response(response.text) return { 'sent_xml': xml_send, 'received_xml': response, 'object': obj.Body.getchildren()[0] }
def _send(certificado, method, sign, **kwargs): path = os.path.join(os.path.dirname(__file__), 'templates') xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs) modelo = xmlElem_send.find(".//{http://www.portalfiscal.inf.br/nfe}mod") modelo = modelo.text if modelo is not None else '55' if modelo == '65': pagamento = etree.Element('pag') tipo_pagamento = etree.Element('tPag') valor = etree.Element('vPag') valor_pago = kwargs['NFes'][0]['infNFe']['total']['vNF'] metodo_pagamento = kwargs['NFes'][0]['infNFe']['pagamento'] tipo_pagamento.text, valor.text = metodo_pagamento, valor_pago pagamento.append(tipo_pagamento) pagamento.append(valor) transp = xmlElem_send.find( ".//{http://www.portalfiscal.inf.br/nfe}transp") transp.addnext(pagamento) if sign: # Caso for autorização temos que adicionar algumas tags tipo # cEan, cEANTrib porque o governo sempre complica e não segue padrão if method == 'NfeAutorizacao': xmlElem_send = _add_required_node(xmlElem_send) signer = Assinatura(certificado.pfx, certificado.password) if method == 'NfeInutilizacao': xml_send = signer.assina_xml(xmlElem_send, kwargs['obj']['id']) if method == 'NfeAutorizacao': xml_send = signer.assina_xml(xmlElem_send, kwargs['NFes'][0]['infNFe']['Id']) if 'validate' in kwargs: erros = valida_nfe(xml_send) if erros: raise NFeValidationException('Erro ao validar NFe', erros=erros, sent_xml=xml_send) elif method == 'RecepcaoEventoCancelamento': xml_send = signer.assina_xml(xmlElem_send, kwargs['eventos'][0]['Id']) if method == 'RecepcaoEventoCarta': xml_send = signer.assina_xml(xmlElem_send, kwargs['Id']) if modelo == '65': xml_send = _add_qrCode(xml_send, **kwargs) else: xml_send = etree.tostring(xmlElem_send) url = localizar_url(method, kwargs['estado'], modelo, kwargs['ambiente']) cabecalho = _build_header(method, **kwargs) response, obj = executar_consulta(certificado, url, cabecalho, xml_send) return {'sent_xml': xml_send, 'received_xml': response, 'object': obj}
def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url( method, kwargs["estado"], kwargs["modelo"], kwargs["ambiente"] ) session = _get_session(certificado) patch = has_patch(kwargs["estado"], method) if patch: return patch(session, xml_send, kwargs["ambiente"]) transport = Transport(session=session) first_op, client = _get_client(base_url, transport) return _send_zeep(first_op, client, xml_send)
def _send(certificado, method, raise_for_status=False, **kwargs): xml_send = kwargs["xml"] base_url = localizar_url(method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) session = _get_session(certificado) requests.packages.urllib3.disable_warnings(InsecureRequestWarning) patch = has_patch(kwargs['estado'], method) if patch: return patch(session, xml_send, kwargs['ambiente']) transport = Transport(session=session) first_op, client = _get_client(base_url, transport) return _send_zeep(first_op, client, xml_send, raise_for_status=raise_for_status)
def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] url = localizar_url(method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) # Não há mais necessidade de usar o cabeçalho SOAP # cabecalho = _build_header(method, **kwargs) send_raw = False if method == 'NFeDistribuicaoDFe': send_raw = True response, obj = executar_consulta(certificado, url, method, xml_send, send_raw=send_raw) return { 'sent_xml': xml_send, 'received_xml': response.decode(), 'object': obj }
def test_localizar_url(self): url = localizar_url("NfeAutorizacao", "29", ambiente=1) self.assertEqual(url, url_ba) url = localizar_url("NfeAutorizacao", "35", ambiente=1) self.assertEqual(url, url_sp) url = localizar_url("NfeAutorizacao", "42", ambiente=1) self.assertEqual(url, url_sc) url = localizar_url("NfeAutorizacao", "43", ambiente=1) self.assertEqual(url, url_rs) url = localizar_url("NfeConsultaCadastro", "43", ambiente=2) self.assertEqual(url, url_cad_rs) url = localizar_url("NfeConsultaCadastro", "42", ambiente=2) self.assertEqual(url, url_cad_sc)
def test_localizar_url(self): url = localizar_url('NfeAutorizacao', '29', ambiente=1) self.assertEqual(url, url_ba) url = localizar_url('NfeAutorizacao', '35', ambiente=1) self.assertEqual(url, url_sp) url = localizar_url('NfeAutorizacao', '42', ambiente=1) self.assertEqual(url, url_sc) url = localizar_url('NfeAutorizacao', '43', ambiente=1) self.assertEqual(url, url_rs) url = localizar_url('NfeConsultaCadastro', '43', ambiente=2) self.assertEqual(url, url_cad_rs) url = localizar_url('NfeConsultaCadastro', '42', ambiente=2) self.assertEqual(url, url_cad_sc)
def _send(certificado, method, sign, **kwargs): path = os.path.join(os.path.dirname(__file__), 'templates') xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs) if sign: # Caso for autorização temos que adicionar algumas tags tipo # cEan, cEANTrib porque o governo sempre complica e não segue padrão if method == 'NfeAutorizacao': xmlElem_send = _add_required_node(xmlElem_send) signer = Assinatura(certificado.pfx, certificado.password) xml_send = signer.assina_xml(xmlElem_send, kwargs['NFes'][0]['infNFe']['Id']) else: xml_send = etree.tostring(xmlElem_send) url = localizar_url(method, kwargs['estado'], kwargs['ambiente']) cabecalho = _build_header(method, **kwargs) response, obj = executar_consulta(certificado, url, cabecalho, xml_send) return {'sent_xml': xml_send, 'received_xml': response, 'object': obj}