Sellar XML

This commit is contained in:
Mauricio Baeza 2021-04-30 17:19:04 -05:00
parent b12525e475
commit ce57ea169a
4 changed files with 14 additions and 6 deletions

View File

@ -1,4 +1,4 @@
# Generated by Django 3.2 on 2021-04-28 18:42
# Generated by Django 3.2 on 2021-04-30 22:04
import api.models
from django.db import migrations, models
@ -18,8 +18,8 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rfc', api.models.RFCField(max_length=13, unique=True, verbose_name='RFC')),
('token', models.CharField(max_length=100, verbose_name='Token')),
('key', models.TextField(blank=True, default='', verbose_name='Key')),
('cer', models.TextField(blank=True, default='', verbose_name='Cer')),
('key', models.BinaryField(blank=True, default=b'', verbose_name='Key')),
('cer', models.BinaryField(blank=True, default=b'', verbose_name='Cer')),
('serial_number', models.CharField(blank=True, default='', max_length=100, verbose_name='Fiel Serie')),
('date_from', models.DateTimeField(blank=True, null=True, verbose_name='Desde')),
('date_to', models.DateTimeField(blank=True, null=True, verbose_name='Hasta')),

View File

@ -47,8 +47,8 @@ class RFCField(models.CharField):
class Clients(models.Model):
rfc = RFCField('RFC', unique=True)
token = models.CharField('Token', max_length=100)
key = models.TextField('Key', default='', blank=True)
cer = models.TextField('Cer', default='', blank=True)
key = models.BinaryField('Key', default=b'', blank=True)
cer = models.BinaryField('Cer', default=b'', blank=True)
serial_number = models.CharField('Fiel Serie', default='', blank=True, max_length=100)
date_from = models.DateTimeField('Desde', null=True, blank=True)
date_to = models.DateTimeField('Hasta', null=True, blank=True)

View File

@ -49,7 +49,13 @@ class CFDI(object):
def stamp(self, cert, path_xslt):
xslt = open(path_xslt, 'rb')
transfor = ET.XSLT(ET.parse(xslt))
print(cert)
self._root.attrib['NoCertificado'] = cert.serial_number
self._root.attrib['Certificado'] = cert.cer_txt
cadena = str(transfor(self._root)).encode()
self._root.attrib['Sello'] = cert.sign(cadena)
xslt.close()
return
def _validate_data(self, data):

View File

@ -53,6 +53,7 @@ def validate_client(post, files):
msg = 'El certificado no corresponde al RFC'
return False, msg
data = {
'rfc': rfc,
'token': token_hex(32),
@ -92,6 +93,7 @@ def send_stamp(data):
msg = ''
emisor = data['emisor']
path_xslt = CURRENT_DIR / 'xslt/cadena.xslt'
cert = SATCertificate(emisor.cer, emisor.key)
cfdi = CFDI()