Descarga Masiva

Descarga CFDIs

import base64
from datetime import date
from satcfdi.models import Signer
from satcfdi.pacs.sat import SAT, TipoDescargaMasivaTerceros, EstadoSolicitud

# Load Fiel
signer = Signer.load(
    certificate=open('csd/xiqb891116qe4.cer', 'rb').read(),
    key=open('csd/xiqb891116qe4.key', 'rb').read(),
    password=open('csd/xiqb891116qe4.txt', 'r').read()
)

sat_service = SAT(
    signer=signer
)

# Facturas Recibidas
response = sat_service.recover_comprobante_request(
    fecha_inicial=date(2020, 1, 1),
    fecha_final=date(2020, 12, 1),
    rfc_receptor=sat_service.signer.rfc,
    tipo_solicitud=TipoDescargaMasivaTerceros.CFDI
)

# Almacenar el id_solicitud en algún lugar
id_solicitud = response['IdSolicitud']

# Revisar estado de descarga
response = sat_service.recover_comprobante_status(id_solicitud)

est = response["EstadoSolicitud"]
if est == EstadoSolicitud.TERMINADA:
    for id_paquete in response['IdsPaquetes']:
        response, paquete = sat_service.recover_comprobante_download(
            id_paquete=id_paquete
        )
        paquete = base64.b64decode(paquete)
        with open(f"{id_paquete}.zip", "wb") as f:
            f.write(paquete)
else:
    # volver a intentar más tarde
    pass

Si ya se tiene una solicitud

# Si ya se tiene un id_solicitud
for paquete_id, data in sat_service.recover_comprobante_iwait(
        id_solicitud='365e2a3d-6f99-4563-856e-28caddc7ad39',
):
    with open(f"{paquete_id}.zip", "wb") as f:
        f.write(data)

En una sola operacion

# En una solo operación se descargan todos los CFDI de un RFC receptor
# No se recomienda cuando el servicio tome mucho tiempo en responder
for paquete_id, data in sat_service.recover_comprobante_iwait(
        fecha_inicial=date(2020, 1, 1),
        fecha_final=date(2020, 12, 1),
        rfc_receptor=sat_service.signer.rfc,
        tipo_solicitud=TipoDescargaMasivaTerceros.CFDI
):
    with open(f"{paquete_id}.zip", "wb") as f:
        f.write(data)