Browse Source

Gerando a chave da nfe quando o método é de autorização

tags/0.1.5
Danimar 9 years ago
parent
commit
1dc6c5f738
  1. 29
      pytrustnfe/nfe/__init__.py
  2. 3
      pytrustnfe/nfe/assinatura.py
  3. 13
      pytrustnfe/nfe/comunicacao.py
  4. 4
      pytrustnfe/utils.py
  5. 2
      setup.py

29
pytrustnfe/nfe/__init__.py

@ -8,11 +8,30 @@ from .comunicacao import executar_consulta
from .assinatura import Assinatura from .assinatura import Assinatura
from pytrustnfe.xml import render_xml from pytrustnfe.xml import render_xml
from pytrustnfe.utils import CabecalhoSoap from pytrustnfe.utils import CabecalhoSoap
from pytrustnfe.utils import gerar_chave, ChaveNFe
from pytrustnfe.Servidores import localizar_url
def _build_header(**kwargs): def _build_header(**kwargs):
estado = kwargs['estado']
return CabecalhoSoap({'estado': estado, 'soap_action': ''})
vals = {'estado': kwargs['estado'], 'soap_action': ''}
return CabecalhoSoap(**vals)
def _generate_nfe_id(**kwargs):
for item in kwargs['NFes']:
vals = {
'cnpj': item['infNFe']['emit']['cnpj_cpf'],
'estado': item['infNFe']['ide']['cUF'],
'emissao': '%s%s' % (item['infNFe']['ide']['dhEmi'][2:4],
item['infNFe']['ide']['dhEmi'][5:7]),
'modelo': item['infNFe']['ide']['mod'],
'serie': item['infNFe']['ide']['serie'],
'numero': item['infNFe']['ide']['nNF'],
'tipo': item['infNFe']['ide']['tpEmis'],
'codigo': item['infNFe']['ide']['cNF'],
}
chave = ChaveNFe(**vals)
item['infNFe']['Id'] = gerar_chave(chave, 'NFe')
def _send(certificado, method, **kwargs): def _send(certificado, method, **kwargs):
@ -22,14 +41,16 @@ def _send(certificado, method, **kwargs):
pfx_path = certificado.save_pfx() pfx_path = certificado.save_pfx()
signer = Assinatura(pfx_path, certificado.password) signer = Assinatura(pfx_path, certificado.password)
xml_signed = signer.assina_xml(xml, '')
xml_signed = signer.assina_xml(xml, kwargs['NFes'][0]['infNFe']['Id'])
url = localizar_url(0, 'RS')
cabecalho = _build_header(**kwargs) cabecalho = _build_header(**kwargs)
return executar_consulta(certificado, cabecalho, xml_signed)
return executar_consulta(certificado, url, cabecalho, xml_signed)
def autorizar_nfe(certificado, **kwargs): # Assinar def autorizar_nfe(certificado, **kwargs): # Assinar
_generate_nfe_id(**kwargs)
_send(certificado, 'NfeAutorizacao', **kwargs) _send(certificado, 'NfeAutorizacao', **kwargs)

3
pytrustnfe/nfe/assinatura.py

@ -38,6 +38,7 @@ class Assinatura(object):
self._checar_certificado() self._checar_certificado()
self._inicializar_cripto() self._inicializar_cripto()
try: try:
xml = '<!DOCTYPE NFe [<!ATTLIST infNFe Id ID #IMPLIED>]>' + xml
doc_xml = libxml2.parseMemory( doc_xml = libxml2.parseMemory(
xml, len(xml)) xml, len(xml))
@ -47,7 +48,7 @@ class Assinatura(object):
doc_xml.getRootElement().addChild(signNode) doc_xml.getRootElement().addChild(signNode)
refNode = signNode.addReference(xmlsec.transformSha1Id(), refNode = signNode.addReference(xmlsec.transformSha1Id(),
None, reference, None)
None, '#' + str(reference), None)
refNode.addTransform(xmlsec.transformEnvelopedId()) refNode.addTransform(xmlsec.transformEnvelopedId())
refNode.addTransform(xmlsec.transformInclC14NId()) refNode.addTransform(xmlsec.transformInclC14NId())

13
pytrustnfe/nfe/comunicacao.py

@ -5,7 +5,7 @@
from uuid import uuid4 from uuid import uuid4
from pytrustnfe.client import HttpClient from pytrustnfe.client import HttpClient
from pytrustnfe.certificado import save_cert_key
from pytrustnfe.certificado import save_cert_key, extract_cert_and_key_from_pfx
from ..xml import sanitize_response from ..xml import sanitize_response
@ -15,12 +15,13 @@ soap_body_path = './soap:Envelope/soap:Body'
soap_fault_path = './soap:Envelope/soap:Body/soap:Fault' soap_fault_path = './soap:Envelope/soap:Body/soap:Fault'
def executar_consulta(cerficado, cabecalho, xmlEnviar):
cert_path, key_path = save_cert_key()
url = ''
web_service = ''
def executar_consulta(certificado, url, cabecalho, xmlEnviar):
cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password)
cert_path, key_path = save_cert_key(cert, key)
url = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx'
web_service = 'NfeAutorizacao/nfeAutorizacaoLote'
client = HttpClient(url, cert_path, key_path) client = HttpClient(url, cert_path, key_path)
xml_retorno = client.post_xml(web_service, xmlEnviar)
xml_retorno = client.post_soap(xmlEnviar, web_service)
return sanitize_response(xml_retorno) return sanitize_response(xml_retorno)

4
pytrustnfe/utils.py

@ -53,9 +53,9 @@ def gerar_chave(obj_chave, prefix=None):
assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe" assert isinstance(obj_chave, ChaveNFe), "Objeto deve ser do tipo ChaveNFe"
obj_chave.validar() obj_chave.validar()
chave_parcial = "%s%s%s%s%s%s%s%s" % (obj_chave.estado, obj_chave.emissao,
chave_parcial = "%s%s%s%s%s%09d%d%08d" % (obj_chave.estado, obj_chave.emissao,
obj_chave.cnpj, obj_chave.modelo, obj_chave.cnpj, obj_chave.modelo,
obj_chave.serie, obj_chave.numero,
obj_chave.serie.zfill(3), obj_chave.numero,
obj_chave.tipo, obj_chave.codigo) obj_chave.tipo, obj_chave.codigo)
soma = 0 soma = 0
contador = 2 contador = 2

2
setup.py

@ -18,7 +18,7 @@ setup(
'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Libraries :: Python Modules',
], ],
packages=find_packages(exclude=['*test*']), packages=find_packages(exclude=['*test*']),
package_data={'pytrustnfe': ['xml/*xml',
package_data={'pytrustnfe': ['nfe/templates/*xml',
'nfse/paulistana/templates/*xml']}, 'nfse/paulistana/templates/*xml']},
url='https://github.com/danimaribeiro/PyNfeTrust', url='https://github.com/danimaribeiro/PyNfeTrust',
license='LGPL-v2.1+', license='LGPL-v2.1+',

Loading…
Cancel
Save