def descargar_paquete(self, pk): paquete = models.PaqueteDeDescarga.objects.get(pk=pk, activo=True) cer_der = paquete.solicitud_de_descarga.empresa.cer.read() key_der = paquete.solicitud_de_descarga.empresa.key.read() fiel = Fiel(cer_der, key_der, paquete.solicitud_de_descarga.empresa.contrasena) auth = Autenticacion(fiel) token = auth.obtener_token() descarga_masiva = DescargaMasiva(fiel) result = descarga_masiva.descargar_paquete( token, paquete.solicitud_de_descarga.empresa.rfc, paquete.id_paquete) paquete.cod_estatus = int(result['cod_estatus']) paquete.mensaje = result['mensaje'] if int(result['cod_estatus']) == 5000: zip_file = ContentFile(base64.b64decode(result['paquete_b64'])) paquete.paqueteb64.save('{}.zip'.format(paquete.id_paquete), zip_file) paquete.fecha_descarga = timezone.now() paquete.save() return True
def validateFIELFiles(directory): global rfcFromFile, rfc_emisor, rfc_receptor, rfc_solicitante, fiel, FIEL_CER, FIEL_KEY, FIEL_PAS numFiles = len(os.listdir(directory)) for file in os.listdir(directory): if file == "datos.txt": datostxt = open(directory + '/datos.txt', 'r') Lines = datostxt.readlines() count = 1 for line in Lines: if line != "\n": if count == 1: rfcFromFile = line.strip() rfc_emisor = rfcFromFile rfc_receptor = rfcFromFile rfc_solicitante = rfcFromFile count += 1 continue if count == 2: #Don't strip the line for password, we had a case of "CURP ", which space is needed FIEL_PAS = line break if file.endswith('.key'): FIEL_KEY = file continue if file.endswith('.cer'): FIEL_CER = file continue if FIEL_CER != '' and FIEL_KEY != '': cer_der = open(directory + '/' + FIEL_CER, 'rb').read() key_der = open(directory + '/' + FIEL_KEY, 'rb').read() fiel = Fiel(cer_der, key_der, FIEL_PAS) return numFiles
def verificar_solicitud_descarga(self, pk): solicitud = models.SolicitudDeDescarga.objects.get(pk=pk, activo=True) if solicitud.estado_solicitud and solicitud.estado_solicitud >= 3: return 'Solicitud en estado: {}'.format( solicitud.get_estado_solicitud_display()) cer_der = solicitud.empresa.cer.read() key_der = solicitud.empresa.key.read() fiel = Fiel(cer_der, key_der, solicitud.empresa.contrasena) auth = Autenticacion(fiel) token = auth.obtener_token() verificador = VerificaSolicitudDescarga(fiel) result = verificador.verificar_descarga(token, solicitud.empresa.rfc, str(solicitud.id_solicitud)) verificacion = models.VerificacionSolicitudDeDescarga() verificacion.solicitud_de_descarga = solicitud verificacion.fecha_verificacion = timezone.now() verificacion.cod_estatus = int(result['cod_estatus']) verificacion.mensaje = result['mensaje'] verificacion.cod_estatus_solicitud = int(result['codigo_estado_solicitud']) verificacion.estado_solicitud = int(result['estado_solicitud']) verificacion.numero_cfdis = int(result['numero_cfdis']) solicitud.cod_estatus = verificacion.cod_estatus_solicitud solicitud.estado_solicitud = verificacion.estado_solicitud solicitud.fecha_ultima_verificacion = verificacion.fecha_verificacion solicitud.numero_cfdis = verificacion.numero_cfdis if solicitud.estado_solicitud == 3: solicitud.fecha_resolucion = verificacion.fecha_verificacion for paq in result['paquetes']: paquete = models.PaqueteDeDescarga() paquete.solicitud_de_descarga = solicitud paquete.id_paquete = paq paquete.save() descargar_paquete.delay(paquete.pk) verificacion.save() solicitud.save() return True
# -*- coding: utf-8 -*- from cfdiclient import DescargaMasiva from cfdiclient import Fiel FIEL_KEY = 'Claveprivada_FIEL_XAXX010101000_20180918_134149.key' FIEL_CER = 'XAXX010101000.cer' FIEL_PAS = '******' cer_der = open(FIEL_CER, 'rb').read() key_der = open(FIEL_KEY, 'rb').read() fiel = Fiel(cer_der, key_der, FIEL_PAS) descarga = DescargaMasiva(fiel) token = 'eyJhbG' rfc_solicitante = 'XAXX010101000' id_paquete = '2d8bbdf1-c36d-4b51-a57c-c1744acdd89c_01' result = descarga.descargar_paquete(token, rfc_solicitante, id_paquete) print(result)
def post(self, request, empresa_pk): empresa = get_object_or_404(models.Empresa, pk=empresa_pk, user=self.request.user, activo=True) form = forms.SolicitudDeDescargaForm(request.POST) if form.is_valid(): try: fecha_inicial = form.cleaned_data['fecha_inicial'] fecha_final = form.cleaned_data['fecha_final'] tipo = form.cleaned_data['tipo'] tipo_solicitud = form.cleaned_data['tipo_solicitud'] fecha_inicial = datetime.combine(fecha_inicial, datetime.min.time()) fecha_final = datetime.combine(fecha_final, datetime.max.time()) rfc_emisor = None rfc_receptor = None if tipo == 'E': rfc_emisor = empresa.rfc elif tipo == 'R': rfc_receptor = empresa.rfc cer_der = empresa.cer.read() key_der = empresa.key.read() fiel = Fiel(cer_der, key_der, empresa.contrasena) auth = Autenticacion(fiel) token = auth.obtener_token() descarga = SolicitaDescarga(fiel) result = descarga.solicitar_descarga( token, empresa.rfc, fecha_inicial, fecha_final, rfc_emisor=rfc_emisor, rfc_receptor=rfc_receptor, tipo_solicitud=tipo_solicitud ) solicitud = models.SolicitudDeDescarga() solicitud.empresa = empresa solicitud.id_solicitud = result['id_solicitud'] solicitud.fecha_inicial = fecha_inicial solicitud.fecha_final = fecha_final solicitud.rfc_receptor = rfc_receptor solicitud.rfc_emisor = rfc_emisor solicitud.tipo_solicitud = tipo_solicitud solicitud.cod_estatus = int(result['cod_estatus']) solicitud.mensaje = result['mensaje'] solicitud.save() return redirect('descargadorweb:solicitud_de_descarga_detalle', empresa_pk=empresa.pk, pk=solicitud.pk) except Exception as e: form.add_error(None, str(e)) return render(request, self.template_name, {'empresa': empresa, 'form': form})