Browse Source

Comunicação Nfs-e ginfes cancelamento

pull/7/head
Junior Tada 10 years ago
parent
commit
c4748e1f19
  1. 20
      pynfe/processamento/assinatura.py
  2. 13
      pynfe/processamento/comunicacao.py

20
pynfe/processamento/assinatura.py

@ -77,6 +77,8 @@ class AssinaturaA1(Assinatura):
elif self.autorizador == 'betha': elif self.autorizador == 'betha':
xpath = './/ns1:InfDeclaracaoPrestacaoServico' xpath = './/ns1:InfDeclaracaoPrestacaoServico'
tag = 'InfDeclaracaoPrestacaoServico' tag = 'InfDeclaracaoPrestacaoServico'
else:
raise Exception('Autorizador não encontrado!')
xml = etree.fromstring(xml) xml = etree.fromstring(xml)
# define namespaces, pega do proprio xml # define namespaces, pega do proprio xml
@ -120,10 +122,20 @@ class AssinaturaA1(Assinatura):
except Exception as e: except Exception as e:
raise e raise e
def assinarCancelar(self, xml, tag='InfPedidoCancelamento', xpath='/CancelarNfseEnvio/ns1:Pedido',
namespaces={'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'}, retorna_string=True):
""" Default para assinar Betha """
def assinarCancelar(self, xml, retorna_string=True):
""" Método que assina o xml para cancelamento de NFS-e """
try: try:
if self.autorizador == 'ginfes':
xpath = 'CancelarNfseEnvio'
tag = 'CancelarNfseEnvio'
namespaces = {'ns1': 'http://www.ginfes.com.br/servico_cancelar_nfse_envio', 'ns2':'http://www.ginfes.com.br/tipos'}
elif self.autorizador == 'betha':
xpath = '/CancelarNfseEnvio/ns1:Pedido'
tag = 'InfPedidoCancelamento'
namespaces = {'ns1': 'http://www.betha.com.br/e-nota-contribuinte-ws'}
else:
raise Exception('Autorizador não encontrado!')
xml = etree.fromstring(xml) xml = etree.fromstring(xml)
# No raiz do XML de saida # No raiz do XML de saida
raiz = etree.Element('Signature', xmlns='http://www.w3.org/2000/09/xmldsig#') raiz = etree.Element('Signature', xmlns='http://www.w3.org/2000/09/xmldsig#')
@ -153,7 +165,7 @@ class AssinaturaA1(Assinatura):
# Escreve no arquivo depois de remover caracteres especiais e parse string # Escreve no arquivo depois de remover caracteres especiais e parse string
with open('nfse.xml', 'w') as arquivo: with open('nfse.xml', 'w') as arquivo:
arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False).replace('ns1:', '').replace(':ns1', '').replace('\n','')))
arquivo.write(remover_acentos(etree.tostring(xml, encoding="unicode", pretty_print=False).replace('\n','')))
subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'nfse.xml']) subprocess.call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'nfse.xml'])

13
pynfe/processamento/comunicacao.py

@ -440,14 +440,10 @@ class ComunicacaoNfse(Comunicacao):
elif autorizador.upper() == 'GINFES': elif autorizador.upper() == 'GINFES':
self._namespace = 'http://www.ginfes.com.br/cabecalho_v03.xsd' self._namespace = 'http://www.ginfes.com.br/cabecalho_v03.xsd'
self._versao = '3' self._versao = '3'
# xml
xml = '<?xml version="1.0" encoding="UTF-8"?>' + xml
# comunica via wsdl
return xml
#return self._post_https(url, xml, 'consulta')
return self._post_https(url, xml, 'cancelar')
# TODO outros autorizadres # TODO outros autorizadres
else: else:
raise Exception('Autorizador não suportado!')
raise Exception('Autorizador não encontrado!')
def _cabecalho(self, retorna_string=True): def _cabecalho(self, retorna_string=True):
@ -529,7 +525,10 @@ class ComunicacaoNfse(Comunicacao):
elif metodo == 'consultaFaixa': elif metodo == 'consultaFaixa':
return cliente.service.ConsultarNfseFaixa(cabecalho, xml) return cliente.service.ConsultarNfseFaixa(cabecalho, xml)
elif metodo == 'cancelar': elif metodo == 'cancelar':
return cliente.service.CancelarNfse(cabecalho, xml)
# versão 3
#return cliente.service.CancelarNfseV3(cabecalho, xml)
# versão 2
return cliente.service.CancelarNfse(xml)
# TODO outros metodos # TODO outros metodos
else: else:
pass pass

Loading…
Cancel
Save