[Descarga Masiva SAT] Descarga

Es un servicio web que permite realizar la descarga de un paquete específico, que forme parte de una solicitud de descarga masiva realizada a través del servicio de solicitud descarga masiva.

La siguiente es una guía dirigida para la generación del XML de la petición a la operación de descarga.

💡 En nuestro GitHub, puedes encontrar ejemplos para C# y PHP, donde cada uno tiene sus propios requisitos (Versión 1.1)

📚 Requisitos

Para la autentificación es necesario contar con los siguientes requisitos:

  • Certificado (*.cer) de nuestra FIEL.
  • Llave privada (*.key) de nuestra FIEL.
  • Password de llave privada.

Para la guía y creación del XML, tomaremos de ejemplo el XML que aparece dentro de la guía que nos proporciona el SAT para el consumo de esté Web Service.

Ejemplo del SAT
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
    <soapenv:header>
    <soapenv:body>
        <des:peticiondescargamasivatercerosentrada>
            <!--Optional:-->
            <des:peticiondescarga idpaquete="4e80345d-917f-40bb-a98f-4a73939343c5_01" rfcsolicitante="AXT940727FP8">
                <!--Optional:-->
                <signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                    <signedinfo>
                        <canonicalizationmethod algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
                        <signaturemethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1">
                        <reference uri="">
                            <transforms>
                                <transform algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature">
                            </transform></transforms>
                            <digestmethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
                            <digestvalue>leZ4dK/Q/RNbckYkY7WOOnCjK5Q=</digestvalue>
                        </digestmethod></reference>
                    </signaturemethod></canonicalizationmethod></signedinfo>
                    <signaturevalue>BuuRjPmgk4Qwl2ER7vjL7+57WiqNZMRD12Hjfh65irEI1Cu8biQSqeH HiaZ7NnmB/LsjyGaHQmZMW50mfnDtNzowAdytB6FS0RNUNLoajAZAdii8bYHYoW0 BqrLaXSImwbZYaHgi4TlPch1OpXZHmUOqfS1qnEEsRXVBN2DvEh1RbAYupmQxBMW 75eo4HZZm/lRug44mb47Evm9428ejTzTnu6LDPEAZEmHV4jOwRzqmM4GgiW7aEpt qHOhdSxV+QzPSQ2/H5s8AZZ41LCK+3gSdCq3Kmf9S2H5R3BRS6VSam5J9xa0I2CvzJf/ REwrxHsc7Xk9uXwXWOofjeTI1Bw==</signaturevalue>
                    <keyinfo>
                        <x509data>
                            <x509issuerserial>
                                <x509issuername>OID.1.2.840.113549.1.9.2=Responsable: ACDMA, OID.2.5.4.45=SAT970701NN3, L=Coyoacán, S=Distrito Federal, C=MX, PostalCode=06300, STREET="Av. Hidalgo 77, Col. Guerrero", E=asisnet@pruebas.sat.gob.mx, OU=Administración de Seguridad de la Información, O=Servicio de Administración Tributaria, CN=A.C. 2 de pruebas(4096)</x509issuername>
                                <x509serialnumber>292233162870206001759766198425879490509036075057</x509serialnumber>
                            </x509issuerserial>
                            <x509certificate>MIIGiDCCBHCgAwIBAgIUMzAwMDEwMDAwMDAzMDAwMjkwODE wDQYJKoZIhvcNAQELBQAwggFmMSAwHgYDVQQDDBdBLkMuIDIgZGUgcHJ1ZWJh cyg0MDk2KTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuI FRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkY WQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QH BydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4 gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1U ECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMRUwEwYD VQQtEwxTQVQ5NzA3MDFOTjMxITAfBgkqhkiG9w0BCQIMElJlc3BvbnNhYmxlOiBBQ0 RNQTAeFw0xNzEwMjUxNDU5NDhaFw0yMTEwMjQxNDU5NDhaMIIBQTFEMEIGA1UE AxM7Q09SUE9SQVRJVk8gSU5NT0JJTElBUklPIERFIENPTlRST0wgWSBBU0VTT1JJQSB TIEEgQiBERSBDIFYxRDBCBgNVBCkTO0NPUlBPUkFUSVZPIElOTU9CSUxJQVJJTyBER SBDT05UUk9MIFkgQVNFU09SSUEgUyBBIEIgREUgQyBWMUQwQgYDVQQKEztDT1J QT1JBVElWTyBJTk1PQklMSUFSSU8gREUgQ09OVFJPTCBZIEFTRVNPUklBIFMgQSBCI ERFIEMgVjELMAkGA1UEBhMCTVgxGTAXBgkqhkiG9w0BCQEWCmFhQHNhdC5nb2Ix JTAjBgNVBC0THEFYVDk0MDcyN0ZQOCAvIFZBQUU3MzEwMjExMjExHjAcBgNVBAU TFSAvIFZBQUU3MzEwMjFIREZSR1IwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADC CAQoCggEBAKyJR9I+BClVEKhvf2VhoucqdbnwaKAolx3x1Ce3XeLBm8mj0z7cHiRr+u8 VUNZeMWMKNsJDJAzxQwqpjIzD7boCbxGoiNw3zEEGzkEugcCu7J4IfW7s0Bf1FWzeq wsOU6COAIfdtfa1a6nPs9GPiMO+XiuyBxPzotVhlmfcZX0Ly7GOkhLRJm5ezvSU4d7afBJ 6BZEb/hrFamnICgTyzXVNkRlQUEJ1pcDQNMz4wAoRIlmcvujYgr1VTMfkLXmsJVJNun/ ybojfQ1ALjCVBmCqQfw5uO1VMUYz0wO83FjEGWFK7/JdzPnTT21dpyR0z1HSGOYXHth wNjaF0uoUegUsCAwEAAaNPME0wDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCA9g wEQYJYIZIAYb4QgEBBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBg EFBQcDAjANBgkqhkiG9w0BAQsFAAOCAgEATnZwK/g+L90DjyeSCIw420VO8HkaxpB PqUOdZsuEo23Y//bBFXXtENsm/8djRpVM39L898+Ak4Re9Ln3pdd/RQ3AAUZtRZtaCJn xiGVOh/NyMCQLi1lH3P0ODEE7i5RBcld+9sR7LVapQ3DnxJ8/bKr4MlY+KrChU/GKjW7Kj He+CaIoALUJKy83sLekF1MPVZASf+Q3XXAtleWjQta6iBCW42MRheG/VWVxbB+w4HjN PeEcrvw/WDdamCZaEwe85ZJjhcjlZOPmt6U7Pf+rOVCWFAaIku6S+hSynvmNs2WViq C02zl2kc757nOyU6KEFOC0U2hnsUMXIjlR0VGrU526rNS8Wprv3fofcMDv/9z+igMc01x7 mNAMI8oVdfAvGrsuCoEaPUFqCBtNbVmqOVx6FQdajyf8vACMfwp3R+S3Wk3ITgOSds 5j9UAAABeXrsQ1DKFzjd87FdWpyucLpqfURIGHOoXb6cVoL1x4mQLpB1blaMokEO1Nxx aaEU1I2Latt+3hS+HMTNRzqy/6dqiBaTMxljMMWfr4PO6MCd4sz0ARnuEkYGCtW7NG9 Bdi0ISDw4DrKCOlq6tEPCxh91EurhNR+UYCpuFsubg2Hu26CTJZuE175E2Jp+GI6I8KrsY xKZMKIHL1CJgZSVExllmBzBGtjbxIkdqIH4307gs=</x509certificate>
                        </x509data>
                    </keyinfo>
                </signature>
            </des:peticiondescarga>
        </des:peticiondescargamasivatercerosentrada>
    </soapenv:body>
</soapenv:header></soapenv:envelope>

✍ Calcular datos necesarios

Id Paquete: Id obtenido en el Web Service de verificación. Por ejemplo: de7f98b6-d20f-44de-ab19-b312b489eec2_01

RFC solicitante: Nuestro RFC.

Certificado: Al igual que en CFDI 4.0, tomar los bytes del archivo .cer de la FIEL y hacer un encode utilizando base64.

Datos del Certificado: Obtener los datos del Certificado en el campo “Issuer” o “Emisor”.
Utilizando la FIEL de pruebas, el resultado sería:  OID.1.2.840.113549.1.9.2=responsable: ACDMA-SAT, OID.2.5.4.45=2.5.4.45, L=COYOACAN, S=CIUDAD DE MEXICO, C=MX, PostalCode=06370, STREET=3ra cerrada de caliz, E=oscar.martinez@sat.gob.mx, OU=SAT-IES Authority, O=SERVICIO DE ADMINISTRACION TRIBUTARIA, CN=AC UAT

NOTA: En algunos lenguajes podría verse un poco diferente.

Número de Certificado: Obtener el dato del Certificado en el campo “Serial number”.
Utilizando la FIEL de pruebas, el resultado sería:
 3330303031303030303030353030303033343137

DigestValue: Se debe calcular el SHA1 en formato binario del siguiente texto (obviamente los datos cambiarán según situación)
Por texto, nos referimos a el siguiente nodo con el namespace, pero dicho nodo debe ir sin espacios.

<des:peticiondescargamasivatercerosentrada xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx">
    <des:peticiondescarga idpaquete="de7f98b6-d20f-44de-ab19-b312b489eec2_01" rfcsolicitante="EWE1709045U0"></des:peticiondescarga>
</des:peticiondescargamasivatercerosentrada>

Y los bytes que obtienes codearlos a base64.Utilizando este nodo, el resultado sería el siguiente: YvM7o5EnABNQR8OvaWADUTEzE6g=

SignatureValue: Se debe calcular con un algoritmo de digestión SHA1 utilizando la llave privada de la FIEL y el siguiente texto:

<signedinfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <canonicalizationmethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></canonicalizationmethod>
    <signaturemethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></signaturemethod>
    <reference uri="#_0">
        <transforms>
            <transform algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></transform>
        </transforms>
        <digestmethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></digestmethod>
        <digestvalue>YvM7o5EnABNQR8OvaWADUTEzE6g=</digestvalue>
    </reference>
</signedinfo>

NOTA: Tener en consideración que el DigestValue anteriormente calculado aparece en dicho texto.

Una vez hecha la digestión, el resultado en bytes lo codeamos en base64. Utilizando la llave privada de la FIEL de pruebas “EWE1709045U0”, el resultado sería el siguiente: ddp1pwpOJYq8hnFYy5a50tul1horm3Z7MtL/WVvk8HNA8Sqp50TLfpvHtrgKKLzpARTvB7lU6G4rEDPx9/RQOjzti8r9XB4ju9/RgwStqUEW0/CpG5AJCIWRDYhXEa9Nxi+gM2uZLvHvrTyX0/Vu6sTMHHBQtt9XatSRIy7oZZ2lP4RvEWnz02GXW/hYtp09XrqxRV+RG33Yq91HD6JkplO6O/HztHLK/0utnaV0c+vN+W7q0ZY4eO85bd7k5+rdgbpjEP8pd5/ZyxxRg9dm6pCMAO2pjBai+55x/iBqlyr1HJOw7MPep/0pSZ31s6wY0EOete9K2r4cYAklEXX8gg==

👨‍💻 Llenado de campos

Una vez que tengamos los datos anteriormente calculados, procederíamos a ponerlos sobre la plantilla del XML que se debe enviar al SAT.

IdPaquete: Este campo, irá en el nodo de des:peticionDescarga.

Rfc Solicitante: Este dato también va en el nodo de des:solicitud.

Certificado: Es el texto que en el nodo s:Envelope/s:Body/des:PeticionDecargaMasivaTercerosEntrada/ des:peticionDescarga/Signature/KeyInfo/X509Data/X509Certificate

Datos del Certificado: Es el texto que en el nodo s:Envelope/s:Body/des:PeticionDecargaMasivaTercerosEntrada/ des:peticionDescarga/Signature/KeyInfo/X509Data/X509IssuerSerial/ X509IssuerName

Número de Certificado: Es el texto que en el nodo s:Envelope/s:Body/des:PeticionDecargaMasivaTercerosEntrada/ des:peticionDescarga/Descarga/Signature/KeyInfo/X509Data/X509IssuerSerial/ X509SerialNumber

DigestValue: Es el texto que en el nodo s:Envelope/s:Body/des:PeticionDecargaMasivaTercerosEntrada/ des:peticionDescarga/Signature/SignedInfo/Reference/DigestValue

SignatureValue: Es el texto que va en el nodo s:Envelope/s:Body/des:PeticionDecargaMasivaTercerosEntrada/ des:peticionDescarga/Signature/SignatureValue

📝 Documento Final

Después de hacer el cálculo y llenado de los datos, tendríamos el siguiente XML de ejemplo.

Ejemplo creado
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
    xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
    <s:Header/>
    <s:Body>
        <des:PeticionDescargaMasivaTercerosEntrada>
            <des:peticionDescarga IdPaquete="de7f98b6-d20f-44de-ab19-b312b489eec2_01" RfcSolicitante="EWE1709045U0">
                <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                    <SignedInfo>
                        <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                        <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                        <Reference URI="#_0">
                            <Transforms>
                                <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                            </Transforms>
                            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                            <DigestValue>YvM7o5EnABNQR8OvaWADUTEzE6g=</DigestValue>
                        </Reference>
                    </SignedInfo>
                    <SignatureValue>ddp1pwpOJYq8hnFYy5a50tul1horm3Z7MtL/WVvk8HNA8Sqp50TLfpvHtrgKKLzpARTvB7lU6G4rEDPx9/RQOjzti8r9XB4ju9/RgwStqUEW0/CpG5AJCIWRDYhXEa9Nxi+gM2uZLvHvrTyX0/Vu6sTMHHBQtt9XatSRIy7oZZ2lP4RvEWnz02GXW/hYtp09XrqxRV+RG33Yq91HD6JkplO6O/HztHLK/0utnaV0c+vN+W7q0ZY4eO85bd7k5+rdgbpjEP8pd5/ZyxxRg9dm6pCMAO2pjBai+55x/iBqlyr1HJOw7MPep/0pSZ31s6wY0EOete9K2r4cYAklEXX8gg==</SignatureValue>
                    <KeyInfo>
                        <X509Data>
                            <X509IssuerSerial>
                                <X509IssuerName>OID.1.2.840.113549.1.9.2=responsable: ACDMA-SAT, OID.2.5.4.45=2.5.4.45, L=COYOACAN, S=CIUDAD DE MEXICO, C=MX, PostalCode=06370, STREET=3ra cerrada de caliz, E=oscar.martinez@sat.gob.mx, OU=SAT-IES Authority, O=SERVICIO DE ADMINISTRACION TRIBUTARIA, CN=AC UAT</X509IssuerName>
                                <X509SerialNumber>3330303031303030303030353030303033343137</X509SerialNumber>
                            </X509IssuerSerial>
                            <X509Certificate>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</X509Certificate>
                        </X509Data>
                    </KeyInfo>
                </Signature>
            </des:peticionDescarga>
        </des:PeticionDescargaMasivaTercerosEntrada>
    </s:Body>
</s:Envelope>

Dicho ejemplo fue realizado con la FIEL del certificado de pruebas “EWE1709045U0”.

Response

Response Exitoso
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
	<s:Header>
		<h:respuesta CodEstatus="5000" Mensaje="Solicitud Aceptada" xmlns="http://DescargaMasivaTerceros.sat.gob.mx" xmlns:h="http://DescargaMasivaTerceros.sat.gob.mx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
	</s:Header>
	<s:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<RespuestaDescargaMasivaTercerosSalida xmlns="http://DescargaMasivaTerceros.sat.gob.mx">
			<Paquete>String Base64 muy largo con el paquete</Paquete>
		</RespuestaDescargaMasivaTercerosSalida>
	</s:Body>
</s:Envelope>
Response Error
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:respuesta CodEstatus="305" Mensaje="Certificado Inválido" xmlns:h="http://DescargaMasivaTerceros.sat.gob.mx" xmlns="http://DescargaMasivaTerceros.sat.gob.mx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <RespuestaDescargaMasivaTercerosSalida xmlns="http://DescargaMasivaTerceros.sat.gob.mx">
            <Paquete/>
        </RespuestaDescargaMasivaTercerosSalida>
    </s:Body>
</s:Envelope>

Guardar .Zip

Cuando ya tengamos el string base64 de nuestro paquete, simplemente tomamos y decodeamos el base64, esto nos dejará con bytes, por lo que simplemente los escribimos a un archivo con terminación (*.zip).

How useful was this post?

Click on a star to rate it!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Updated on septiembre 29, 2023

Related Articles