Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions cfdiclient/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@
from .autenticacion import Autenticacion
from .descargamasiva import DescargaMasiva
from .fiel import Fiel
from .solicitadescarga import SolicitaDescarga
from .solicitadescargaEmitidos import SolicitaDescargaEmitidos

from .validacioncfdi import Validacion
from .verificasolicituddescarga import VerificaSolicitudDescarga

__all__ = [
'Autenticacion',
'DescargaMasiva',
'Fiel',
'SolicitaDescarga',
'SolicitaDescargaEmitidos',
'SolicitaDescargaRecibidos',
'Validacion',
'VerificaSolicitudDescarga',
]

name = 'cfdiclient'

version = '1.5.9'
version = '1.6.0'
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
from .webservicerequest import WebServiceRequest


class SolicitaDescarga(WebServiceRequest):
class SolicitaDescargaEmitidos(WebServiceRequest):

xml_name = 'solicitadescarga.xml'
xml_name = 'solicitadescargaEmitidos.xml'
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescarga'
solicitud_xpath = 's:Body/des:SolicitaDescarga/des:solicitud'
result_xpath = 's:Body/SolicitaDescargaResponse/SolicitaDescargaResult'
soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescargaEmitidos'
solicitud_xpath = 's:Body/des:SolicitaDescargaEmitidos/des:solicitud'
result_xpath = 's:Body/SolicitaDescargaEmitidosResponse/SolicitaDescargaEmitidosResult'

def solicitar_descarga(
self, token, rfc_solicitante, fecha_inicial, fecha_final,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
<s:Envelope xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<s:Header/>
<s:Body>
<des:SolicitaDescarga>
<des:SolicitaDescargaEmitidos>
<des:solicitud>
<des:RfcReceptores>
<des:RfcReceptor/>
</des:RfcReceptores>
</des:solicitud>
</des:SolicitaDescarga>
</des:SolicitaDescargaEmitidos>
</s:Body>
</s:Envelope>
41 changes: 41 additions & 0 deletions cfdiclient/solicitadescargaRecibidos.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from .webservicerequest import WebServiceRequest


class SolicitaDescargaRecibidos(WebServiceRequest):

xml_name = 'solicitadescargaRecibidos.xml'
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescargaRecibidos'
solicitud_xpath = 's:Body/des:SolicitaDescargaRecibidos/des:solicitud'
result_xpath = 's:Body/SolicitaDescargaRecibidosResponse/SolicitaDescargaRecibidosResult'

def solicitar_descarga(
self, token, rfc_solicitante, fecha_inicial, fecha_final,
rfc_emisor=None, rfc_receptor=None, tipo_solicitud='CFDI',
tipo_comprobante=None, estado_comprobante=None,
rfc_a_cuenta_terceros=None, complemento=None, uuid=None
):

arguments = {
'RfcSolicitante': rfc_solicitante.upper(),
'FechaFinal': fecha_final.strftime(self.DATE_TIME_FORMAT),
'FechaInicial': fecha_inicial.strftime(self.DATE_TIME_FORMAT),
'TipoSolicitud': tipo_solicitud,
'TipoComprobante': tipo_comprobante,
'EstadoComprobante': estado_comprobante,
'RfcACuentaTerceros': rfc_a_cuenta_terceros,
'Complemento': complemento,
'UUID': uuid,
'RfcReceptor': rfc_receptor
}

element_response = self.request(token, arguments)

ret_val = {
'id_solicitud': element_response.get('IdSolicitud'),
'cod_estatus': element_response.get('CodEstatus'),
'mensaje': element_response.get('Mensaje')
}

return ret_val
11 changes: 11 additions & 0 deletions cfdiclient/solicitadescargaRecibidos.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<s:Envelope xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<s:Header/>
<s:Body>
<des:SolicitaDescargaRecibidos>
<des:solicitud>
</des:solicitud>
</des:SolicitaDescargaRecibidos>
</s:Body>
</s:Envelope>
2 changes: 1 addition & 1 deletion cfdiclient/webservicerequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def set_request_arguments(self, arguments: dict) -> etree.Element:
for i, rfc_receptor in enumerate(arguments[key]):
if i == 0:
self.set_element_text(
's:Body/des:SolicitaDescarga/des:solicitud/des:RfcReceptores/des:RfcReceptor',
's:Body/des:SolicitaDescargaEmitidos/des:solicitud/des:RfcReceptores/des:RfcReceptor',
rfc_receptor
)
# TODO: Agregar mas de un RFC
Expand Down
26 changes: 16 additions & 10 deletions ejemplo_completo.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from cfdiclient import Autenticacion
from cfdiclient import DescargaMasiva
from cfdiclient import Fiel
from cfdiclient import SolicitaDescarga
from cfdiclient import solicitadescargaEmitidos
from cfdiclient import solicitadescargaRecibidos
from cfdiclient import VerificaSolicitudDescarga
##
# Constantes de Loggin
Expand All @@ -20,8 +21,8 @@
cer_der = open(os.path.join(PATH, FIEL_CER), 'rb').read()
key_der = open(os.path.join(PATH, FIEL_KEY), 'rb').read()

FECHA_INICIAL = datetime.datetime(2024, 3, 1)
FECHA_FINAL = datetime.datetime(2024, 3, 30)
FECHA_INICIAL = datetime.datetime(2025, 6, 1)
FECHA_FINAL = datetime.datetime(2025, 6, 2)

fiel = Fiel(cer_der, key_der, FIEL_PAS)

Expand All @@ -31,17 +32,22 @@

print('TOKEN: ', token)

descarga = SolicitaDescarga(fiel)
#descarga = solicitadescargaEmitidos.SolicitaDescargaEmitidos(fiel)
descarga = solicitadescargaRecibidos.SolicitaDescargaRecibidos(fiel)

# EMITIDOS
# solicitud = descarga.solicitar_descarga(
# token, RFC, FECHA_INICIAL, FECHA_FINAL, rfc_emisor=RFC, tipo_solicitud='CFDI',
# )

# RECIBIDOS

# Emitidos
#solicitud = descarga.solicitar_descarga(
# token, RFC, FECHA_INICIAL, FECHA_FINAL, rfc_emisor=RFC,tipo_solicitud='CFDI',
#)

# Recibidos
solicitud = descarga.solicitar_descarga(
token, RFC, FECHA_INICIAL, FECHA_FINAL, rfc_receptor=RFC, tipo_solicitud='CFDI',
token, RFC, FECHA_INICIAL, FECHA_FINAL, rfc_receptor=RFC,tipo_solicitud='Metadata', estado_comprobante='Todos',
)


print('solicitar_descarga:', solicitud)

if solicitud['cod_estatus'] != '5000':
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name='cfdiclient',
version='1.5.9',
version='1.6.0',
author='Luis Iturrios',
author_email='luisiturrios1@gmail.com',
description='Cliente Python Web Service del SAT para la descarga masiva de CFDIs',
Expand Down
Loading