Browse Source

mostra mensagen de WARNING para data de certificados expirados

pull/279/head
Heron 6 years ago
parent
commit
43bbc0e293
  1. 17
      pytrustnfe/certificado.py
  2. 108
      teste_carioca.py
  3. 2
      tests/test_certificado.py

17
pytrustnfe/certificado.py

@ -4,22 +4,24 @@
import tempfile
from OpenSSL import crypto
#import datetime
from datetime import datetime
#temp
import ssl
class Certificado(object):
def __init__(self, pfx, password):
self.pfx = pfx
self.password = password
pfx = crypto.load_pkcs12(pfx, password)
pfx = crypto.load_pkcs12(pfx, password).get_certificate()
cert_date = int(str(pfx.get_notAfter(),'UTF-8').strip('Z'))
cert = pfx.get_certificate()
cert_date = int(str(cert.get_notAfter(),'UTF-8').strip('Z'))
sha1_fingerprint = cert.digest("sha1")
now = datetime.now()
date = int(now.strftime("%Y%m%d%H%M%S"))
if cert_date < date:
'''
Exceto certificado de testes
'''
if cert_date < date or str(sha1_fingerprint,'UTF-8') == "DE:08:15:1E:DA:12:B3:5F:76:BF:5D:4E:56:C1:14:12:8A:85:B6:47":
print("WARNING: Certificado expirado")
def save_pfx(self):
@ -34,8 +36,7 @@ def extract_cert_and_key_from_pfx(pfx, password):
try:
pfx = crypto.load_pkcs12(pfx, password)
except:
print("ERROR: Falha ao ler certiticado. Verifique a senha")
exit()
print("WARING: Falha ao ler certiticado. Verifique a senha")
# PEM formatted private key
key = crypto.dump_privatekey(crypto.FILETYPE_PEM, pfx.get_privatekey())
# PEM formatted certificate

108
teste_carioca.py

@ -1,108 +0,0 @@
# -*- coding: utf-8 -*-
import logging
from datetime import datetime
from pytrustnfe.nfe import consulta_cadastro
#import pytrustnfe.nfe
from pytrustnfe.certificado import Certificado
from pytrustnfe.nfse.paulistana import cancelamento_nfe
from pytrustnfe.nfse.paulistana import envio_lote_rps
from pytrustnfe.nfse.carioca import gerar_nfse
logger = logging.getLogger(__name__)
dbg = 0
#certificado_path = open(b'/data/certs/23834691000124.pfx', 'rb').read()
certificado_path = open(b'/data/certs/expirado.pfx', 'rb').read()
certificado = Certificado(certificado_path, 'audaz$321')
if dbg>1 :print('type(certificado)')
if dbg>1 :print(type(certificado))
if dbg>9 :print(certificado.pfx)
if dbg>1 :print(certificado.password)
# Necessário criar um dicionário com os dados, validação dos dados deve
# ser feita pela aplicação que está utilizando a lib
#retorno = envio_lote_rps(certificado, nfse=nfse)
#retorno = gerar_nfse(certificado, nfse=rps)
#xml = { "rps" : {"rps" : { "numero" : "1" }}}
#retorno = gerar_nfse(certificado, nfse=xml)
rps = {
'ambiente': '2',
'rps': {
'ambiente': '2',
'numero': '1',
'serie': 'ABC',
'tipo_rps': '1',
'data_emissao': '2010-01-01T21:00:00',
'natureza_operacao': '1',
'optante_simples': '1',
'incentivador_cultural': '2',
'status': '1',
#'regime_tributacao': '',
#'numero_substituido': '',
'#serie_substituido': '',
'#tipo_substituido': '',
'valor_servico': '9.99',
'valor_deducao': '0',
'valor_pis': '0',
'valor_cofins': '0',
'valor_inss': '0',
'valor_ir': '0',
'valor_csll': '0',
'iss_retido': '0',
'valor_iss': '0',
'valor_iss_retido': '0',
'outras_retencoes': '0',
'base_calculo': '9.99',
'aliquota_issqn': '0.05',
'valor_liquido_nfse': '9.99',
'desconto_incondicionado': '',
'desconto_condicionado': '',
'codigo_servico': '0107',
'cnae_servico': '',
'codigo_tributacao_municipio': '010701',
'codigo_municipio': '3304557',
'descricao': 'Venda de servico',
'prestador': {
'cnpj': '123456789011213',
'inscricao_municipal': '123456',
},
'tomador': {
'tipo_cpfcnpj': '1',
'cpf_cnpj': '12345678923256',
'inscricao_municipal': '123456',
'razao_social': 'Trustcode',
'tipo_logradouro': '1',
'logradouro': 'Vinicius de Moraes, 42',
'numero': '42',
'complemento': '',
'bairro': 'Corrego',
'cidade': '4205407', # Código da cidade, de acordo com o IBGE
'uf': 'SC',
'cep': '88037240',
'tomador.telefone': '',
'tomador.email': ''
},
}
}
retorno = gerar_nfse(certificado, **rps)
# retorno é um dicionário { 'received_xml':'', 'sent_xml':'', 'object': object() }
if dbg>=9 :print(retorno['sent_xml'])
if dbg>=1 :print(retorno['received_xml'])
# retorno['object'] é um objeto python criado apartir do xml de resposta
if dbg>=9 :print(retorno['object'])
#print retorno['object'].Cabecalho.Sucesso
#print retorno['object'].ChaveNFeRPS.ChaveNFe.NumeroNFe
#print retorno['object'].ChaveNFeRPS.ChaveRPS.NumeroRPS

2
tests/test_certificado.py

@ -60,7 +60,7 @@ class test_assinatura(unittest.TestCase):
def test_save_pfx(self):
pfx_source = open(os.path.join(self.caminho, "teste.pfx"), "rb").read()
pfx = Certificado(pfx_source, "123")
pfx = Certificado(pfx_source, "123456")
path = pfx.save_pfx()
saved = open(path, "rb").read()
self.assertEqual(

Loading…
Cancel
Save