Ejemplo n.º 1
1
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
        }
Ejemplo n.º 2
0
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]
        }
Ejemplo n.º 3
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
        }
Ejemplo n.º 4
0
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
    }
Ejemplo n.º 5
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 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}
Ejemplo n.º 6
0
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,
        }
Ejemplo n.º 7
0
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]
        }
Ejemplo n.º 8
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}
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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
    }
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
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)
    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}