1. Home
  2. [Descarga Masiva SAT] Verificación

[Descarga Masiva SAT] Verificación

Está guía está dirigida para la generación del XML de la petición. En nuestro GitHub, puedes encontrar ejemplos para C# y PHP, donde cada uno tiene sus propios requisitos.

Requisitos

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

Si tomamos el XML que aparece en la guía que nos proporciona el SAT para el consumo de esté Web Service, tendríamos algo como el siguiente XML

Calcular datos necesarios

Id Solicitud: Id obtenido en el Web Service de solicitud. Por ejemplo: de7f98b6-d20f-44de-ab19-b312b489eec2

RFC solicitante: Nuestro RFC.

Certificado: Al igual que en CFDI 3.3, 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”.

Utilizando la FIEL de pruebas, el resultado sería: CN=A.C. 2 de pruebas(4096),O=Servicio de Administración Tributaria,OU=Administración de Seguridad de la Información,emailAddress=asisnet@pruebas.sat.gob.mx,street=Av. Hidalgo 77, Col. Guerrero,postalCode=06300,C=MX,ST=Distrito Federal,L=Coyoacán,x500UniqueIdentifier=SAT970701NN3,unstructuredName=Responsable: ACDMA

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: 286524172099382162235533054548081509963388106800

Así mismo tener en cuenta, que el dato puede ser incluido como Hexadecimal o Decimal. Puede variar de acuerdo al lenguaje.

DigestValue: Se debe calcular el SHA1 en formato binario del siguiente texto (obviamente los datos cambiarán según situación)

Cuando digo texto, es el nodo con el namespace, pero dicho nodo debe ir sin espacios entre nodos

Y los bytes que obtienes codearlos a base64.

Utilizando este nodo, el resultado tiene que ser: 2zavoO/4lAZSUSFVRBpLbiEcfKg=

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

Tener en consideración que el DigestValue anteriormente calculado aparece en dicho nodo.

Una vez hecha la digestión, el resultado en bytes lo codeamos en base64.

Utilizando la llave privada de la FIEL de pruebas “AUAC4601138F9”, el resultado tiene que ser: Ir4nciZnmdEiThsnqMWlVDl5ZHrDAao0pvvxoleZDgwhgoTifQ602JtKCiAqsUAPuSfYlnXgPH5mOU2cgY46f+jfspdjivgwZCeJA/lCWt83/v8wg78Xaz1vNRkmDOX0Iu0HsGUISFlVM8ycf5BdkOPQHqvHIQdkHjOnP/j9w48Kn+xXTbODk8F2syM3W87y1K8FatRIltCUZPS/AciTMnv/FjAeBe1w7HJy5iCJEnax1gGdkJo9VpBrU9w5JBzTbHritcHZm97nQ6exZ92sdQtWtvWRrcvIaEUM0iofU186w/I/PYhZbL91xEXon3OGh5+Ra7rkbgCJIbZ8Q1clXA==

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.

IdSolicitud: Este campo, irá en el nodo de des:solicitud.

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/o:Security/des:VerificaSolicitudDescarga/ des:solicitud/Signature/KeyInfo/X509Data/X509Certificate

Datos del Certificado: Es el texto que en el nodo s:Envelope/s:Body/o:Security/des:VerificaSolicitudDescarga/ des:solicitud/Signature/KeyInfo/X509Data/X509IssuerSerial/X509IssuerName

Número de Certificado: Es el texto que en el nodo s:Envelope/s:Body/o:Security/des:VerificaSolicitudDescarga/ des:solicitud/Signature/KeyInfo/X509Data/X509IssuerSerial/X509SerialNumber

DigestValue: Es el texto que en el nodo s:Envelope/s:Body/o:Security/des:VerificaSolicitudDescarga/des:solicitud/ Signature/SignedInfo/Reference/DigestValue

SignatureValue: Es el texto que va en el nodo s:Envelope/s:Body/o:Security/des:VerificaSolicitudDescarga/des:solicitud/ Signature/SignatureValue

Documento Final

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

Dicho ejemplo fue realizado con la FIEL del certificado de pruebas “AUAC4601138F9”, disponible para su descarga en este enlace.

Response exitoso

 

Response con error

 

Siguientes Pasos: 

Updated on enero 11, 2019

Was this article helpful?