Manual API ACI DescargaSAT

Canal público

El presente documento contiene el manual para API ACI DescargaSAT, que es un servicio Web basado en una arquitectura REST.


Con este manual podrá conocer las operaciones más importantes relacionadas a la descarga de CFDI y su gestión, de igual forma se mencionan los datos requeridos para consumirlo, incluye ejemplos para su consumo por medio de los SDK provistos por SIFEI.

Compartir en redes sociales

Compartir enlace

Usar vinculo permanente para compartir en redes sociales

Compartir con un amigo

Por favor iniciar sesión para enviar esto document por correo!

Incrustar en tu sitio web

Seleccionar página de inicio

1. M ANUAL API ACI D ESCARGA SAT Página 1 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Manual API ACI DescargaSAT Marzo 2019

10. M ANUAL API ACI D ESCARGA SAT Página 10 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 7 . Ejemplo de colocación de token en cabecera . POST /api/v2/descargasatsifei/cfdi/download HTTP/1.1 Authorization : qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Type: application/json; charset=UTF - 8 Content - Length: 122 ....................................................... NOTA: Todas las peticiones deben llevar el token en esta cabecera, de lo contrario no será posible consumir el servicio. El token s e puede obtener desde la versión WEB de ACI DescargaSAT, para ello debe ir a la sección configuración y dar clic en el botón avanzado, tras ello se desplegar á la secci ó n que se m ue stra en la Figura 1 , posteriormente dé clic en el botón “Enviar Token por Email” y listo. Figura 1 . Activación de token 5. URL de producción La URL de producción es la siguiente: descargasat.sifei.com.mx , para consumir cada método se deberá de concatenar esta URL con la proporcionada en cada método, es decir, las URL presentadas en las secciones son relativas a esta URL base. Es necesario asegurar se de usar el protocolo HTTPS, es decir, la URL de producción base la cual es la siguiente :  https://descargasat.sifei.com.mx Por ejemplo , si la URL para consultar CFDI es “ /api/v2/descargasatsifei/DescargaProgramadas/query ” , entonces la URL absoluta es:  https://descargasat.sifei.com.mx /api/v2/descargasatsifei/DescargaProgramadas/query Es importante que la URL y el método HTTP coincidan , en caso contrario se devo lverá un error 404 , en el ejemplo anterior la petición debe ser POST (en su respectiva sección se indica el método). Así mismo existen métodos cuyos parámetros están incluidos en la URL, en la respectiva documentación de cada método se describe esta informacion . Nota: La UR L de producción viene incluida dentro los SDK , favor de referirse a la respectiva sección de cada método que viene incluida en este documento .

16. M ANUAL API ACI D ESCARGA SAT Página 16 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 2. DotNetZip A continuaci ón, en Tabla 17 se muestra la informacion técnica del SDK .NET : Tabla 17 . Ficha Técnica SDK .NET Versión mínima Net 2.0 + (se recomienda usar versiones superiores) Recursos ofrecidos Descripción DHF.Sifei.DescargaSAT.Ws.SDK.dll SDK que permite y facilita en consumo del API. Clase con ejemplo del uso del SDK Clase con ejemplos de todos los métodos ofrecidos por el SDK . Dependencias Adicionales Descrip ci ón Newtonsoft.Json Biblioteca para serializar y deserial izar las peticione s JSON . DotNetZip Biblioteca para la gestión de archivo s ZIP 7.3.1 Agregar DLL al proyecto. Para incluirla s e debe importar la DLL como una referencia en el proyecto .NET tal y como se muestra en la Figura 2 : Figura 2 . Agregando referencia Tras ello se desplegará el explorador, se debe sele ccionar l a DLL e importar tal y como se ejemplifica en la Figura 3 :

17. M ANUAL API ACI D ESCARGA SAT Página 17 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Figura 3 . Agregar DLL a proyecto Para establecer a producción el SDK solo se requiere establecer la URL por medio de su propiedad (BaseURL), la constante “ URL_BASE_PRODUCTION ” ya se incluye dentro de la propia definición de la clase DescargaSATSDK . 7.3.2 URL Producción SDK .NET En la siguiente Tabla 18 se muestra como establecer la URL de producción : Tabla 18 . L ínea para volver a producción SDK .NET . var sdk = new DescargaSATSDK (); sdk . Token = token ; //se setea la URL de produccion sdk . BaseURL = DescargaSATSDK . URL_BASE_PRODUCTION ; 8. Métodos Relacionados A Descargas 8.1 Crear una Descarga Para crear la primera descarga de CFDI se debe consumir la siguiente URL como se muestra en la siguiente Tabla 19 :

69. M ANUAL API ACI D ESCARGA SAT Página 69 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 13. Información de Contacto con SIFEI C ENTRO DE S OPORTE T ÉCNICO SIFEI Acceso a recursos de Soporte Técnico de los productos y servicios de SIFEI, Preguntas Frecuentes, Manuales de Usuario, Manuales Técnicos, Notas Técnicas, entre otros . Dirección electrónica Centro de Soporte Técnico SIFEI T ELÉFONOS DE C ONTACTO Orizaba, Ver. +52 (272) 726 6999 CDMX (55) 4624 0146 Puebla, Pue. (222) 620 0239 con 10 líneas A TENCIÓN A I NCIDENTES La atención a incidentes se realizará mediante una herramienta de gestión de incidentes y la comunicación se realizará mediante correo electrónico. Correo Electrónico helpdesk@ sifei.com.mx H ORARIO DE ATENCIÓN El horario de atención a clientes y de S oporte T écnico para para preguntas, dudas o problemas de la aplicación es: Lunes a viernes De 09:00 a 19:00 hrs. P ÁGINAS OFICIALES DE SIFEI Sitio web http://www.sifei.com.mx/ Facebook http://www.facebook.com/SIFEIMexico Twitter http://twitter.com/SIFEIMexico YouTube http://www.youtube.com/SIFEIMexico LinkedIn http://www.linkedin.com/company/SIFEIMexico U BICACIÓN DE O FICINA M ATRIZ Primera P rivada de O riente 17 No. 32 Col. Centro , Orizaba, Veracruz , México CP 94300 <Fin del Documento>

14. M ANUAL API ACI D ESCARGA SAT Página 14 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 7. SDK ACI DescargaSAT ofrece los SDK para el consumo del API el para los siguientes 3 lenguajes: 1. JAVA (.jar) 2. PHP (archivos .php) 3. C# (.dll) Estos SDK facilitan enormemente el consumo del API y ahorra n tiempo de desarrollo a las implementaciones . 7.1 SDK de JAVA Se requiere como mínimo Java 7, mientras que 8 es el ideal. Se incluye un JAR el cual debe ser importado en el proyecto, los pasos varían según el entorno de desarrollo. La Tab la 13 re presenta la ficha técnica del SDK JAVA. Tab la 13 . Ficha Técnica SDK JAVA . Versión mínima JAVA 7+ Recursos ofrecidos Descripción mx.com.sifei.descargasat.ws.sdk - 1.0 - SNAPSHOT - uber .jar Biblioteca java que es el SDK, debe ser importada en el proyecto para su uso. Clase con ejemplo del uso del SDK Clase con ejemplos de todos los métodos ofrecidos por el SDK 7.1.1 URL de producción SDK Java Para configurar a producción el SDK basta con establecer la URL por medio de su setter, la constante ya se incluye dentro de la propia definición de la clase DescargaSATSD K ver Tabla 14 : Tabla 14 . Ejemplo de URL de producción del SDK de JAVA . DescargaSATSDK retro = new DescargaSATSDK (); retro . setUrl ( DescargaSATSDK . BASE_PRODUCTION_URL ); retro . setToken (token); 7.2 SDK de PHP. Se requiere como mínimo PHP 5.6 . Se requiere tener habilitada la extensión CURL para ejecutar las peticiones. La Tabla 15 presenta la ficha técnica del SDK PHP.

7. M ANUAL API ACI D ESCARGA SAT Página 7 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Acrónimo Definición datos, en cualquier formato (XML, JSON, etc.) sin las abstracc iones adicionales de los protocolos basados en patrones de intercambio de mensajes, como por ejemplo SOAP . RESTFUL RESTful hace referencia a un servicio W eb que implementa la arquitectura REST SOAP S imple Object Access Protocol , es un protocolo estándar que define cómo dos objetos en diferentes procesos se comunica n por medio de intercambio de datos XML . Token Un token (token de seguridad, token de autenticación o token criptográfico) es una clave criptográfica que se le otorga a un usuario autorizado de un servicio para facilitar el proceso de autenticación . Endpoint E s un punto final de un canal comunicación representado por una URL de un servidor o servicio. Cada endoint se encarga de prov eer acceso y operaciones a recursos específicos, los cuales varían en función del método HTTP solicitado. 2. Requerimientos. Para consumir y hacer uso de todas las funcionalidades de l API DescargaSAT se debe contar con la EFIRMA del RFC asociado a los CFDI , la cual debe ser válida (vigente) ante el SAT. Así mismo , debe contar con el token de autenticación del RFC de los CFDI a obtener (ver apartado 4 ) , la cual es provis ta por medio del portal y enviada a tu correo . 3. Convenciones del API El formato para las peticiones como respuestas es JSON. Si bien este servicio está basado en REST, no se implementan los métodos HTTP : PUT , DELETE y PATCH con el fin de facilitar su implementación, es decir, todas las peticiones son hechas vía GET o POST. Así mismo para la documentación no se hace distinción entre endpoint y método de WS, ya que formalmente un endpoint puede tener varias operaciones según el método HTTP. 3.1 Response gen eral del API La respuesta JSON sigue la estructura general que muestra la Tabla 2 : Tabla 2 . Estructura de r espuesta JSON que ACI DescargaSAT ofrece. Código Tipo Definición Status string Indica el estado de la solicitud, sus valores posibles son: “ success ” , “ fail ” , “ error ” . Data Any Contiene el resultado de la operación . S i se trata de consultas, este campo contendrá el resultado de tu búsqueda. Para otro tipo de operaciones el v alor de este campo es opcional, para mayor detalle se debe referir a la respectiva sección Response de cada “método”. Code String Si bien a través del campo status podemos saber si una solicitud ejecutó la operación deseada, o bien si fue aceptada y validada, en el campo code se devuelve un código específico para cada tipo de operación, en general este campo contiene el código de err or cuando status es diferente a success.

5. M ANUAL API ACI D ESCARGA SAT Página 5 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 9.4.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 53 9.4.3 Ejemplo SDK de JAVA ................................ ................................ ................................ ................................ ................................ ..... 53 9.4.4 Ejemplo SDK de PHP ................................ ................................ ................................ ................................ ................................ ....... 55 9.4.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 56 9.5 Existe CFDI en CFDI resguardos ................................ ................................ ................................ ................................ ............................. 57 9.5.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 57 9.5.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 58 9.5.3 Ejemplo SDK de JAV A ................................ ................................ ................................ ................................ ................................ ..... 58 9.5.4 Ejemplo SDK de PHP ................................ ................................ ................................ ................................ ................................ ....... 59 9.5.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 60 10. Métodos relacionados a la EFIRMA ................................ ................................ ................................ ................................ ...................... 61 10.1 Subir EFIRMA ................................ ................................ ................................ ................................ ................................ ............................ 61 10.1.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 61 10.1.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 62 10.1.3 Ejemplo con SDK de JAVA ................................ ................................ ................................ ................................ ............................ 63 10.1.4 E jemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 64 10.1.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 65 11. Tipos de datos ................................ ................................ ................................ ................................ ................................ ............................... 66 11.1.1 Tipo CFDI. ................................ ................................ ................................ ................................ ................................ ............................. 66 12. Código de error ................................ ................................ ................................ ................................ ................................ ............................ 67 13. Información de Contacto con SIFEI ................................ ................................ ................................ ................................ ...................... 69

2. M ANUAL API ACI D ESCARGA SAT Página 2 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Control de Versiones Nombre No. Versión Modificaciones Fecha Daniel Jesús Hernandez Francisco 1.0 Creación de documento y contenido 27 - 02 - 2019 Control de Revisiones Nombre No. Versión Modificaciones Fecha Gloria Minerva González Hernández 1.0 Observaciones de redacción y ortografía. 05/03/2019 Control de Autorizaciones Nombre No. Versión Modificaciones Fecha

15. M ANUAL API ACI D ESCARGA SAT Página 15 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 15 . Ficha Técn ica SDK PHP Versión mínima PHP 5.6 o superior(compatible con PHP 7.0 , 7.1 +) Recursos ofrecidos Descripción Archivos PHP SDK que permite y facilita e l consumo del API. Clase con ejemplo del uso del SDK (./Test/App.php) Clase con ejemplos de todos los métodos ofrecidos por el SDK . Clase loader Archivo loader que debe ser incluido en los punto s de ejecución principal para facilitar la importación de clases PHP basado en el espacio de nombre (Namespace) . Dependencias Adicionales Descripción N/A N/A 7.2.1 URL Producción SDK PHP Para establecer a producción el SDK basta con establecer la URL por medio de su setter, la constante ya se incluye dentro de la propia definición de la clase DescargaSATSDK (ver Tabla 16 ). Tabla 16 . Estableciendo a producción SDK de PHP $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); $sdk - > setURL ( DescargaSATSDK :: $BASE_PRODUCTION_URL ); 7.3 SDK .NET Es importante entender que el SDK hace u s o interno de la clase HttpWebRequest propia de .NET, por tanto, se debe n esperar todas las excepciones devueltas por este método. La versión mínima requerida es .Net 2.0 por lo que es altamente compatible, aun así , se aconseja utilizar versiones superiores. Se incluye la DLL:  DHF.Sifei.DescargaSAT.Ws.SDK.dll Esta DLL contiene el código necesario para consumir el API de ACI DescargaSAT y debe ser agregada como referencia. Adicionalmente se necesita n 2 dependencias que puede n instalarse mediante el administrador de paquetes NuGet: 1. Newtonsoft.Json

8. M ANUAL API ACI D ESCARGA SAT Página 8 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Código Tipo Definición Message String Cuando exista un error en tu petición, junto con CODE, este campo contendrá el error verbal, es decir, una desc ripción del error . La Tabla 3 presenta la e structura genérica de respuesta. Tabla 3 . Ejemplo de respuesta. { "status" : "success" , "data" : "" , "message" : "" , "code" : "" } Con el objetivo de facilitar la deserialización de las respuestas JSON — sobre todo en l enguajes tipados como JAVA o C# — , todos los campos son obligatorios en la s respuestas que ofrece la WEB API ACI DescargaSAT, de modo que se pueda implementar fácilmente el deserializador de preferencia, para el caso de JAVA se recomienda GSON o Jackson. 3.2 Parámetros Los parámetros cuando sean peticiones de tipo GET serán vía URL PATH ( ver Tabla 4 ), para POST puede ser vía URL cuando se trate de un UUID en caso contrario serán por body . Cuando se env íe un body , los parámetros siempre deberán estar en formato JSON (ver la respectiva documentación de cada ENDPOINT (método) para mayor información). Tabla 4 . Parámetros vía URL PATH . Código Tipo Descripción {parametro} string Cuando una URL incluya al final de su PATH corchetes o @ , significar á que requiere ser sustituido por el valor necesario (ver documentación especifica del método) , esto siginifica que las URL deben cumplir con el patrón señalado dentro de cada método, en caso de no cumplir (MATCH) con la expresión entonces no se considera c omo un método y se arroja rá un error 404 . Nota: si no se coloca un valor en el URL PATH, será arrojado un error método no encontrado (404), debido a que el método en cuestión esperar á una URL con el formato indicado. 3.2.1 Consideraciones especiales para métodos que incluyen parámetros en el URL PATH. Es importante no omitir valores donde se incluye n parámetros en el PATH de la URL, ya que aun si esta correct a la URL ( URLBASE + URL_RELATIVA ) si falta el parámetro entonces

41. M ANUAL API ACI D ESCARGA SAT Página 41 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } } Console . ReadLine (); 9.2 Descargar CFDI por UUID. 9.2.1 Request Para este servicio será necesario colocar el UUID del CFDI solicitado en la URL tal y como se muestra en Tabla 59 . Tabla 59 URL para la descarga de un CFDI por su UUID . URL METODO Descripción /api/v2/descargasatsifei/cfdi/query @ uuid_cfdi @GET Permite descargar un CFDI por su UUID. URL parámetros (deben sustituirse al final de la URL) Parámetro Tipo Descripción @ uuid_cfdi string UUID del CFDI A continuación se incluye un ejemplo de solicitud para la descarga de un CFDI por su UUID (ver Tabla 60 ) : Tabla 60 Ejemplo de petición GET /api/v2/descargasatsifei/cfdi/download/ E23DF780 - 96DC - 4AF3 - 80AF - XXXXXXXXXXX HTTP/1.1 Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip 9.2.2 Response En esta respuesta data es un string el cual contiene el XML codificado en base 64 (por lo cual debe ser decodificado), ver Tabla 61 . Tabla 61 Data de respuesta de de descarga de XML por uuid. Campo Tipo Descripción Data string XML codificado en base64 En la Tabla 62 se muestra un ejemplo de respuesta, se ha omitido el valor real de data para su fácil representación : Tabla 62 E jemplo respuesta de desc arga de XML, data contiene una cadena codificada en base64. {

6. M ANUAL API ACI D ESCARGA SAT Página 6 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 1. Generalidades 1.1 Introducción API ACI DescargaSAT es un servic io Web basado en una arquitectura RES T que tiene como objetivo proveer las operac iones más importantes relacionadas a la descarga de CFDI y su gestión. Este documento describe el servicio así como los d atos requeridos para consumirlo, además inclu ye ejemplos para su consumo por medio de los SDK provistos por Sifei . 1.2 Propósito Proporcionar a los programadores e integradores de software una guía precisa para el consumo de servicios de ACI Desc argaSAT. 1.3 Alcance Este manual Técnico está dirigido a desarrolladores e ingenieros en software que requieran consumir los servicios de ACI DescargaSAT . El documento se limita a proporcionar la descripción sobre cada endpoint del API ACI DescargaSAT incluyendo la solicitud y respuesta ; para su uso es necesario contar con los conocimientos técnicos requeridos. Para mayor información se recomienda leer el manual de Usuario de ACI DescargaSAT. 1.4 Requerimientos Mínimos Cliente HTTP Token Valido Estar registrado en ACI Descarga SAT 1.5 Términos y Definiciones Tabla 1 . Términos y definiciones Acrónimo Definición CFDI Comprobante Fiscal Digital por Internet NDA Non - Disclosure Agreement ̧ documento de Acuerdo de No Divulgación PAC Proveedor Autorizado de Certificación PCCFDI Proveedor de Certificación de Comprobantes Fiscales Digitales por Internet (antes PAC) PCECFDI Proveedor de Certificación de Expedición de Comprobantes Fiscales Digitales por Internet, que aplica a los contrib uyentes que expiden CFDI al ser Adquirientes de Bienes y Servicios, y Sector Primario (simplificado “Sector Primario”) SAT Servicio de Administración Tributaria SIFEI Solución Integral de Facturación Electrónica e Informática SIFEI S. A. de C. V. SLA Service Level Agreement , Acuerdo de Niveles de Servicios JSON Acrónimo de JavaScript Object Notation , es un formato de texto ligero para el intercambio de datos REST La Transferencia de Estado Representacional (en inglés Representational State Transfer ) o REST es un estilo de arquitectura de software para describir cualquier interfaz entre sistemas que utilice directamente HTTP para obtener datos o indicar la ejecución de operaciones sobre los

11. M ANUAL API ACI D ESCARGA SAT Página 11 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 6. CURL Se puede n consumir todos los servicios vía CURL, para ello se debe agregar la bandera de cabecera “ - H” segui do del valor “Authorization: token ” , esto es obligatorio ya que para consumir los métodos se espera un token v á lido el cual es tomado dentro de esa cabecera , la Tabla 8 incluye un ejemplo de consumo: Tabla 8 . Ejemplo de consumo con CURL ( método de consultar CFDI por UUID ) . Comando curl: curl - H "Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 " https://descargasat.sifei.com.mx/api/v2/descargasatsifei/cfdi/query/E23DF780 - 96DC - 4AF3 - ZZZZ - XXXXXXXXXXX - X GET Petición: GET /api/v2/descargasatsifei/cfdi/query/dsadsa HTTP/1.1 Host: descargasat.sifei.com.mx:443 User - Agent: curl/7.58.0 Accept: */* Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Si se desea consumir un servicio POST que espere un JSON con la bandera “ – d “ seguido del JSON , además de la cabecera ‘ Content - Type ’, a continuación se ejemplifica como consumir el método para consultar las descargas ( Tabla 9 ) : Tabla 9 . Ejemplo consumiendo servicio que recibe un JSON . Comando curl: curl - H "Authorization: qpJHAYQLsdas89e1MI3j213 01230912j3121" - H 'Content - Type: application/json' - d '{"estadoDescarga":"*"}' https://descargasat.sifei.com.mx/api/v2/descargasatsifei/DescargaProgramadas / query - X POST Petición: POST /api/v2/descargasatsifei/DescargaProgramadas/query HTTP/1.1 Host: descargasat.sifei.com.mx:443 User - Agent: curl/7.58.0 Accept: */* Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Type: application/json Content - Length: 22 {"estadoDescarga":"*"} Nota: si se ejecuta este comando desde una terminal Windows, se debe n escapar las comillas ya que este sistema operativo no soporta comillas simples tal y como se muestra en la Tabla 10 .

9. M ANUAL API ACI D ESCARGA SAT Página 9 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx ( URLBASE + URL_RELATIVA + PARAMETRO ) el server devolverá una respuesta de método no encontrado, ejemplo: El método para consultar un CFDI por su UUID es de tipo GET y requiere un parámetro en su PATH , tal y como se muestra en la Tabla 5 . La url se comforma URL_ABSOLUTA +PARAMETRO_UUID para mayor detalle ver Obtener información CFDI Por UUID . Tabla 5 . Ejemplo de método con parámetro en su URL PATH. ( URLBASE + URL_RELATIVA + PARAMETRO ) https://descargasat.sifei.com.mx /api/v2/descargasatsifei/cfdi/query/ E23DF780 - 96DC - 4AF3 - 80AF - XXXXXXXXXXX { "status" : "error" , "data" : null , "message" : "Error de autenticaci \ u00f3 n, falta header Authorization" , "code" : "1003" } Si llega a omitir el parámetro, la URL no cumpliría con el patrón (pattern) correspondiente al método. Por tanto, no se encontraría el método y una respuesta como la mostrada en la Tabla 6 : Tabla 6 . Caso cuando se omite un parámetro el el PATH de la URL. ( URLBASE + URL_RELATIVA ) https://descargasat.sifei.com.mx /api/v2/descargasatsifei/cfdi/query/ { "status" : "error" , "code" : 404 , "data" : null , "message" : "Metodo - Endpoint no encontrado. Asegurate de que el path y metodo HTTP sean correctos." } 4. Autenticación Para el consum o de todos los endpoint de ACI DescargaSAT es necesario que cuente con un token valido , el cual va en la cabecera HTTP tal y como se muestra en la siguiente Tabla 7 . Este token va en la cabecera Authorization .

68. M ANUAL API ACI D ESCARGA SAT Página 68 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Código Descripción 2110 Archivo inv á lido RAR 2120 Zip inv á lido 2200 N ú mero de CFDI máximo excedido 2201 CFDI no encontrado 2202 El CFDI no tiene XML 2203 CFDI no descargable (por ejemplo solo se tenga el meta) 2205 CFDI bloqueado (cuando no se ha descontado el CFDI de paquete se mantendrá resguardado pero no podrás consultarlo hasta obtener un nuevo paquete) 2300 Petición incompleta , falta uno o más ca mpos 2301 Error en formato o tipo de uno o más campos 2204 No hay que descargar 2300 No tienes EFirma 230 1 Error al subir EFirma (certificado inv á lido, formato inv á lido, contraseña no corresponde), certificado expirado, 2302 Certificado no corresponde al RFC. 2304 EFirma Revocada o Caduca. Cuando se usa tu Efirma y el SAT deniega la operación por certificado Revocado o Caduco. 2305 EFirma Inválida. Cuando se usa tu Efirma y el SAT deniega la operación por EFirma inv á lida.

53. M ANUAL API ACI D ESCARGA SAT Página 53 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 76 . Ejemplo de petición . { "emitidoRecibido" : - 1 , " efectoCFDI " : " I " , "fechaFinal" : "2019 - 04 - 01 03:08:24" , "fechaInicial" : "2018 - 12 - 01 03:08:24" } 9.4.2 Response La respuesta contiene en el campo data el archivo ZIP codificado en base 64 , ver Tabla 77 : Tabla 77 . Estructura de respuesta . Campo Tipo Descripción Data string Zip codificado en base 64, el cual contiene los XML . A continuación se muestra un ejemplo de respuesta en la Tabla 78 : Tabla 78 . Ejemplo respuesta , donde data en una cadena en base64 del archivo ZIP con los XML. { "status" : "success" , "data" : "zipEnBase64" , "message" : "" , "code" : "" } En caso de que una petición no genere una descarga, se d evolverá la siguiente respuesta que se presenta en la Tabla 79 : Tabla 79 . Ejemplo respuesta en caso de error . { "status" : "fail" , "data" : null , "message" : "No hay CFDIS para esta descarga " , "code" : "2204" } 9.4.3 Ejemplo SDK de JAVA El ejemplo para la descarga de CFDI utilizando el SDK de java se encuentra en la siguiente Tabla 80 :

32. M ANUAL API ACI D ESCARGA SAT Página 32 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 44 . Parametros de consumo . Parámetro Tipo Requerido Descripción estadoDescarga string SI Estado de la descarga Programada , La siguiente Tabla 45 incluye un ejemplo de la solicitud al servicio de consulta. Tabla 45 Ejemplo de petición POST /api/v2/descargasatsifei/DescargaProgramadas/query HTTP/1.1 Authorization : qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Type: application/json; charset=UTF - 8 Content - Length: 31 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip User - Agent: okhttp/3.12.0 {"estadoDescarga":"COMPLETADO"} 8.4.2 Response Data Response es un arreglo ( colección) que contiene en cada uno de sus elementos la siguiente estructura (ver Tabla 46 ) . Tabla 46 . Data es una colección de tipo DadaDescargaProgramada. Data campos Tipo Descripción Data Array de tipo DataDescargaP rogramada Arreglo de tipo DataDescargaProgramada . 8.4.3 Tipo de dato DataDescargaProgramada Este tipo de dato se compone de las propiedades listadas en la Tabla 47 . Tabla 47 . D escri pción d el tipo de dato devuelto por data . Data campos Tipo Descripción uuid string UUID de la descarga. fechaInicial datetime Fecha Inicial de la descarga fechaFinal datetime Fecha final de la descarga tipoDescarga Integer(enum) Enum con valores 1=CFDI, se deja abierto a que otros valores enteros se incluyan en el dominio.

67. M ANUAL API ACI D ESCARGA SAT Página 67 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Data campos Descripción efecto string Efecto del CFDI (catalogo): I= Ingreso. E=Egreso, T= Traslado, P= Pago, N=Nomina. disponibleXML boolean Indica si se descontó de Paquete, en caso de true, se podrá descargar el XML, en caso de false indica que o no se ha descargado el XML o que no se ha descontado de tu paquete, es decir, el CFDI está bloqueado, se deberá conseguir un nuevo paquete y desbloquear el CFDI. disponibleMETA boolean Indica si se descontó del paquete, en caso de true se podrá consultar. 12. Código de error A continuación en la Tabla 99 se listan los códigos de error que el A PI devuelve . Tabla 99 C odigos de error y su respectiva descripcion del API . Código Descripción 400 Bad Request 402 Payment Required 404 Not Found 500 Error Interno, intenta más tarde 501 No implemented 1001 TOKEN invalido, no existe o ha expirado 1003 Error de autenticación, falta header Authorization 1004 Token vacío 2000 Archivo inv á lido, no está correctamente codificado 2001 El archivo sobrepasa el limite 2100 Error genérico, operación inválida. 2101 Descarga Repetida. 2102 Descarga no pudo Reactivarse (por ejemplo: estado no es apto para ser reactivado, debe ser ERROR, BLOQUEADA, INCOMPLETA ) .

61. M ANUAL API ACI D ESCARGA SAT Página 61 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Console . WriteLine ( string . Format ( "El CFDI con uuid :{0} esta resguardo en ACI DescargaSAT" , cfdiUUID )); //si se sabe que esta resguardado entonces se puede consultar la informacion de ese CFDI o descarlo con los otros metodos: } else { Console . WriteLine ( string . Format ( "El CFDI con uuid :{0} No esta resguardo en ACI DescargaSAT" , cfdiUUID )); } } else { //checar los errrores a nivel de api(ojo para otros errores como timeout, son excepciones ): Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } } 10. Métodos relacionados a la EFIRMA 10.1 Subir EFIRMA Por medio de este método es posible subir la EFIRMA (la cual es necesaria para descargar los CFDI) a ACI DescargaSAT. 10.1.1 Request En la Tabla 90 se muestra la URL de descarga de CFDI . Tabla 90 . URL para la descarga de CFDI . URL METODO Descripción /api/v2/descargasatsifei/certificado @ POST Este método permite subir la eFirma correspondiente al RFC de la cuenta. Datos a enviar en la petición se describe en la Tabla 91 :

37. M ANUAL API ACI D ESCARGA SAT Página 37 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 9.1.1 Request Para el método de obtención de CFDI por UUID se debe consumir en la forma descripta por la Tabla 52 . Tabla 52 URL para obtener la info rmación de un CFDI por medio de su UUID . URL METODO Descripción /api/v2/descargasatsifei/cfdi/query @ uuid_cfdi @GET Permite consultar un CFDI por su UUID. URL parámetros (deben sustituirse al final de la URL) Parámetro Tipo Descripción @ uuid_cfdi string UUID del CFDI A continuación en la Tabla 53 se lista un ejemplo de solicitud al servicio, donde se muestra el método, url y el UUID . Tabla 53 . Ejemplo de petición para consulta de CFDI por UUID . GET /api/v2/descargasatsifei/cfdi/query/ E23DF780 - 96DC - 4AF3 - 80AF - XXXXXXXXXXX HTTP/1.1 Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip User - Agent: okhttp/3.12.0 9.1.2 Response En esta respuesta ( Tabla 54 ) data es un arreglo de tipo “CFDI” (ver Tipo CFDI. Tabla 54 . Descripción de data el cual es un arreglo de tipo CFDI. Campo Tipo Descripción Data Array de tipo CFDI Array de tipo CFDI . En el ejemplo de la Tabla 55 se muestra que “ data ” un arreglo (coleción) compuesto por elementos de tipo CFDI ( ver referencia: Tipo CFDI. Tabla 55 . Ejemplo respuesta para obtener un CFDI { "status" : "success" , "data" : { "uuid" : "XXXXXXXX - 96DC - XXXX - 80AF - XXXXXXX" , "rfcEmisor" : "AAA010101AAA" , "rfcReceptor" : "AAA010101AAA" ,

58. M ANUAL API ACI D ESCARGA SAT Página 58 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 83 . URL para la verificación de CFDI resguardado. URL METODO Descripción /api/v2/descargasatsifei/cfdi/exist/ @ uuid_cfdi @ GET Este método permite comprobar si existe el CFDI en ACI DescargaSAT. URL parámetros (deben sustituirse al final de la URL) Parámetro Tipo Descripción @ uuid_cfdi string UUID del CFDI A continuación se muestra un ejemplo de una petición en la Tabla 84 : Tabla 84 . Ejemplo de petición . GET /api/v2/descargasatsifei/cfdi/exist/ 1EE48BE4 - 203B - 4452 - 8CCC - XXXXXXXXXX HTTP/1.1 Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip User - Agent: okhttp/3.12.0 9.5.2 Response En este caso la respuesta en su campo data indica si CFDI está resguardado . Tabla 85 . Descripción de data de response . Campo Tipo Descripción Data bool Indica si existe o no en ACI DescargaSAT . Tabla 86 E jemplo respuesta { "status" : "success" , "data" : true , "message" : "" , "code" : "" } 9.5.3 Ejemplo SDK de JAVA El ejemplo para la verficicacion de existencia de CFDI en ACI DescargaSAT utilizando el SDK de Java en la Tabla 87 : Tabla 87 . Ejemplo de consumo con el SDK de JAVA para la verificación de existencia de CFDI . DescargaSATSDK sdk = new DescargaSATSDK (); sdk . setLog ( true );

28. M ANUAL API ACI D ESCARGA SAT Página 28 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx else { //otro tipo de error: Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } } Console . Write ( wsResponse ); Console . ReadLine (); 8.3 Reactivar Descarga por UUID Es posible que una descarga falle, cuando esto ocurre el estado de la descarga cambiar á a ERROR , así mismo si se llega a terminar el folio de l paquete, las descargas que aún no han sido procesadas adquirirán un estado de bloqueada, por lo que este método p ermitirá reactivar esta descarga para volver a intentar Descargar tus CFDI. 8.3.1 Request En la Tabla 36 se muestra la informacion del método para reactivar descargas por UUID : Tabla 36 . URL para la reactivación de una descarga . URL M É TODO Descripción /api/v2/descargasatsifei/DescargaPr ogramada/ {uuid} @ POST Permite reactivar una Descarga con estado de ERROR, BLOQUEADA, INCOMPLETA . Si la descarga no tiene uno de estos estados, se devolverá un status fail y además de un código de error “2102”, ver Código de error En caso de no existir la descarga se devolver un not found(404). URL parámetros (deben sustituirse al final de la URL) Parámetro Tipo Descripción @ uuid string UUID de la descarga En la Tabla 37 se muestra en ejemplo de la petición : Tabla 37 Ejemplo de petición POST /api/v2/descargasatsifei/DescargaProgramada/ 20150101.00.00.00 - 2015010123.59.59C HTTP/1.1 Author ization: qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Length: 0 Host: descargasat.sifei.com.mx

52. M ANUAL API ACI D ESCARGA SAT Página 52 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Console . WriteLine ( cfdi . RfcReceptor ); } } } else { //error: Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } Console . ReadLine (); 9.4 Descarga de CFDI por consulta. Este endpoint permite descargar los CFDI resg uardados por un rango de fecha , estos son devueltos en un ZIP codificado en base64 en el campo data. 9.4.1 Reques t El método y URL que forman la petición para la descarga se describe en la siguiente Tabla 74 : Tabla 74 . URL para la descarga de CFDI . URL METODO Descripción /api/v2/descargasatsifei/cfdi/downl oad @ POST Este método permite descargar todos los CFDI que cumplan con el criterio de búsqueda . Asi mismo los d atos a enviar en la petición se describen el la siguiente Tabla 75 : Tabla 75 . Campos esperandos por el servicio . Data campos tipo Descripción fechaInicial Datetime requerido Fecha Inicial (inicio del rango) fechaFinal datetime requerido Fecha final (fin del rango) emitidoRecibido int requerido Indica si es recibido , emitido efectoCFDI string opcional Clave de efecto de CFDI: I,E,N,P,T Ejemplo JSON de petición en la siguiente Tabla 76 :

18. M ANUAL API ACI D ESCARGA SAT Página 18 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 19 . URL para la creación de descarga . URL M É TODO Descripción /api/v2/descargasatsifei/DescargaProgramad a POST Permite crear una descarga(programar una descarga) ACI DescargaSAT divide a nivel interno las descargas por días, es decir, si se envía una solicitud de un año se crearan 365 descargas. Por esta misma razón este método devuelve el arreglo de UUID de descargas creadas que deben ser verificadas por medio del método de consulta de descarga. Otro punto que se debe considerar es que ACI Descarga SAT evita las descargas duplicadas, por lo que si se intenta crear una descarga que colisione parcialmente con otra previa se devolverá un arreglo con los UUID de las ya existentes. Si la colisión es total es decir, fecha inicial y final son idénticas, este método devolverá un error. 8.1.1 Request A continuación en la Tabla 20 se listan los campos esperado por el servicio: Tabla 20 . Campos esperados en el servicio para crear una Descarga. Parámetro Tipo Requerido Descripción FechaInicial date t ime SI Fecha inicial FechaFinal date t ime SI Fecha Final TipoDeDescarga enum SI Tipo: Para este momento es solo CFDI Ejemplo de petición ( Tabla 21 ) : Tabla 21 . Ejemplo de petición { "FechaInicial" : "2019 - 02 - 28 10:55:35" , "FechaFinal" : "2019 - 03 - 01 10:55:35" , "TipoDeDescarga" : "CFDI" } Nota: A pesar de que se incluye el tiempo (horas minutos y segundos, estos no son tomados en cuenta debido a que ACI D escargaSAT tomar á ese rango de fecha y genera rá descargas con días completos. 8.1.2 Response La respuesta de esto método se ve en la Tabla 22 . Tabla 22 . Estructura de respuesta. Campo Tipo Requerido Descripción status enum SI Estatus de la petición data object SI Objeto de respuesta. Ver ejemplo de response message string No Tipo: Para este momento es solo CFDI

12. M ANUAL API ACI D ESCARGA SAT Página 12 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 10 . I nvocación incorrecta de CURL desde terminal Windows, usando comillas simples tanto para la cabecera CONTENT_TYPE como para el JSON . Comando CURL sin escap ar las comillas , CURL no interpretara la cadena JSON e ignorara el content - type, cambiándolo a x - www - form - urlencoded y por tanto no será procesado por el API : curl - H "Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121" - H 'Content - Type: application/json' - d '{"estadoDescarga":"*"}' https://descargasat.sifei.com. mx/api/v2/descargasatsifei/DescargaProgramadas /query - X POST Petición errónea debido a que no se escaparon las comillas : POST /api/v2/descargasatsifei/DescargaProgramadas/query HTTP/1.1 Host: descargasat.sifei.com.mx:443 User - Agent: curl/7.55.1 Accept: */* Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Length: 20 Content - Type: application/x - www - form - urlencoded '{estadoDescarga:*}' Forma correcta desde Windows , ver Tabla 11 : Tabla 11 Correcta invocación de CURL desde terminal Windows. Comando CURL escapado y usando comillas en vez de comillas simples en Windows. curl - H "Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121" - H "Content - Type: application/json" - d "{ \ "estadoDescarga \ ": \ "* \ "}" https://descargasat.sifei.com.mx/api/v2/descargasatsifei/DescargaProgramadas /query Petición correcta POST /api/v2/descargasatsifei/DescargaProgramadas/query HTTP/1.1 Host: descargasat.sifei.com.mx:443 User - Agent: curl/7.55.1 Accept: */* Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Length: 20 Content - Type: application/x - www - form - urlencoded '{estadoDescarga:*}'

3. M ANUAL API ACI D ESCARGA SAT Página 3 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Contenido 1. Generalidades ................................ ................................ ................................ ................................ ................................ ................................ .......... 6 1.1 Introducción ................................ ................................ ................................ ................................ ................................ ................................ ...... 6 1.2 Propósito ................................ ................................ ................................ ................................ ................................ ................................ ............ 6 1.3 Alcance ................................ ................................ ................................ ................................ ................................ ................................ ................ 6 1.4 Requerimientos Mínimos ................................ ................................ ................................ ................................ ................................ ............. 6 1.5 Términos y Definiciones ................................ ................................ ................................ ................................ ................................ ............... 6 2. Requerimientos. ................................ ................................ ................................ ................................ ................................ ................................ ...... 7 3. Convenciones del API ................................ ................................ ................................ ................................ ................................ .......................... 7 3.1 Response gen eral del API ................................ ................................ ................................ ................................ ................................ ............ 7 3.2 Parámetros ................................ ................................ ................................ ................................ ................................ ................................ ......... 8 3.2.1 Consideraciones especiales para métodos que incluyen parámetros en el URL PATH. ................................ ........ 8 4. Autenticación ................................ ................................ ................................ ................................ ................................ ................................ ........... 9 5. URL de producción ................................ ................................ ................................ ................................ ................................ ............................. 10 6. CURL ................................ ................................ ................................ ................................ ................................ ................................ ......................... 11 6.1.1 Ejemplo genérico de consumo en Python ................................ ................................ ................................ ............................. 13 7. SDK ................................ ................................ ................................ ................................ ................................ ................................ ............................ 14 7.1 SDK de JAVA ................................ ................................ ................................ ................................ ................................ ................................ .. 14 7.1.1 URL de producción SDK Java ................................ ................................ ................................ ................................ ....................... 14 7.2 SDK de PHP. ................................ ................................ ................................ ................................ ................................ ................................ .... 14 7.2.1 URL Producción SDK PHP ................................ ................................ ................................ ................................ .............................. 15 7.3 SDK .NET ................................ ................................ ................................ ................................ ................................ ................................ .......... 15 7.3.1 Agregar DLL al proyecto. ................................ ................................ ................................ ................................ ............................... 16 7.3.2 URL Producción SDK .NET ................................ ................................ ................................ ................................ ............................. 17 8. Métod os Relacionados A Descargas ................................ ................................ ................................ ................................ .......................... 17 8.1 Crear una Descarga ................................ ................................ ................................ ................................ ................................ ..................... 17 8.1.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 18 8.1.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 18 8.1.3 Ejemplo con SDK de JAVA ................................ ................................ ................................ ................................ ............................ 20 8.1.4 Ejemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 21 8.1.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 22 8.2 Cons ultar Descarga Por UUID ................................ ................................ ................................ ................................ ................................ . 23 8.2.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 23 8.2.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 24 8.2.3 Ejemplo SDK JAVA ................................ ................................ ................................ ................................ ................................ ............ 25 8.2.4 Ejemplo co n SDK de PHP ................................ ................................ ................................ ................................ .............................. 26

4. M ANUAL API ACI D ESCARGA SAT Página 4 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 8.2.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 27 8.3 Reactivar Descarga por UUID ................................ ................................ ................................ ................................ ................................ .. 28 8.3.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 28 8.3.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 29 8.3.3 Ejemplo SDK de JAVA ................................ ................................ ................................ ................................ ................................ ..... 29 8.3.4 Ejemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 30 8.3.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 31 8.4 Obte ner descargas diarias ................................ ................................ ................................ ................................ ................................ ........ 31 8.4.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 31 8.4.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 32 8.4.3 Tipo de dato DataDescargaProgramada ................................ ................................ ................................ ................................ 32 8.4.4 Ejemplo SDK de JAVA ................................ ................................ ................................ ................................ ................................ ..... 33 8.4.5 Ejemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 34 8.4.6 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 35 9. Métodos relacionados CFDI. ................................ ................................ ................................ ................................ ................................ .......... 36 9.1 Obte ner información CFDI Por UUID ................................ ................................ ................................ ................................ ................. 36 9.1.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 37 9.1.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 37 9.1.3 Ejemplo SDK de JAVA ................................ ................................ ................................ ................................ ................................ ..... 38 9.1.4 Ejempl o con SDK de PHP ................................ ................................ ................................ ................................ .............................. 38 9.1.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 39 9.2 Descargar CFDI por UUID. ................................ ................................ ................................ ................................ ................................ ........ 41 9.2.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 41 9.2.2 Response ................................ ................................ ................................ ................................ ................................ .............................. 41 9.2.3 Ejemplo SDK de JAVA ................................ ................................ ................................ ................................ ................................ ..... 42 9.2.4 Ejemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 42 9.2.5 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 43 9.3 Consultar CFDI ................................ ................................ ................................ ................................ ................................ ............................... 44 9.3.1 Request. ................................ ................................ ................................ ................................ ................................ ................................ 44 9.3.2 Request ................................ ................................ ................................ ................................ ................................ ................................ . 45 9.3.3 Response ................................ ................................ ................................ ................................ ................................ .............................. 45 9.3.4 Ejemplo SDK de JAV A ................................ ................................ ................................ ................................ ................................ ..... 48 9.3.5 Ejemplo con SDK de PHP ................................ ................................ ................................ ................................ .............................. 49 9.3.6 Ejemplo con SDK de .NET ................................ ................................ ................................ ................................ .............................. 51 9.4 Descarga de CFDI por consulta. ................................ ................................ ................................ ................................ ............................. 52 9.4.1 Request ................................ ................................ ................................ ................................ ................................ ................................ . 52

13. M ANUAL API ACI D ESCARGA SAT Página 13 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 6.1.1 Ejemplo genérico de consumo en Python La Tabla 12 presenta un e jemplo de consumo de API desde Python, apartir de este ejemplo se puede consumir todos los métodos. Tabla 12 Ejemplo genérico de consumo del API desde pyth on . import requests #Ejemplo de consumo. # URL url = https://descargasat.sifei.com.mx /api/v2/descargasatsifei/DescargaProgramadas/query' # cabecera donde va el token headers ={ 'Authorization' : 'qpJHAYQLsdas89e1MI3j21301230912j3121' } # el body JSON, para este caso es el body de pide consultar descargas. payload = { 'estadoDescarga' : '*' } # todos los estados de descarga response = requests.post(url, headers =headers, json =payload) #se compara si todo fue a nivel HTTP: if response.status_code== 200 : print ( "Peticion correcta" ) #se deserializa a un diccionario body=response.json() #ahora a nivel de API se comprueba el estado de la peticion. if body[ 'status' ]== 'success' : # success entonces data tendra la informacion deseada. print (body[ 'data' ]) else : print ( "Error durante la operacion, obteniendo informacion del error:" ) #si no es success, con code y message se puede averiguar el porque print (body[ 'status' ]) print (body[ 'message' ]) print (body[ 'code' ]) else : print ( "Error al realizar peticion,codigo HTTP(no confundir con el del API): " ) print (response.status_code)

24. M ANUAL API ACI D ESCARGA SAT Página 24 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 29 . Petici ó n consultar descarga GET /api/v2/descargasatsifei/DescargaProgramada/ 20181016.00.00.00 - 2018101623.59.59 HTTP/1.1 Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip User - Agent: okhttp/3.12.0 8.2.2 Response En este caso data es de tipo DescargaProgramadaDetalle, tal y como se muestra en la Tabla 30 : Tabla 30 . Indicando el tipo de dato del atributo data . Data campos Tipo Descripción Data DescargaProgr amadaDetalle Objeto de tipo Descarga detalle. 8.2.2.1 Tipo DescargaProgramadaDetalle El tipo DescargaProgramadaDetalle esta compuesto por lo campos listados que se muestran en la Tabla 31 : Tabla 31 . D escri pción de los campos del detalle de la descargaProgramada . Data campos Tipo Descripción uuid Object Objeto de tipo Descarga detalle. fechaInicial datetime Fecha inicial de la descarga fechaFinal datetime Fecha final de la descarga fechaOrigenProgramacion datetime Fecha que se creó la descarga cfdiDescargados int Numero de CFDI descargados ultimaEjecucion datetime Fecha en que se ejecutó. metodoDescarga int Indica si fue por portal u oficial. numeroCfdiEmitidos Int Numero de CFDI Emitidos numeroCfdiRecibidos int Numero de CFDI Recibidos tipoDeDescarga int Tipo descarga E n la Tabla 32 se muestra un ejemplo de respuesta a la petición. Tabla 32 .E jemplo de respuesta { "status" : "success" , "data" : { "uuid" : "20181016.00.00.00 - 2018101623.59.59" , "fechaInicial" : "2018 - 10 - 16 00:00:00" ,

19. M ANUAL API ACI D ESCARGA SAT Página 19 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Campo Tipo Requerido Descripción code int NO Data Response En Tabla 23 se muestra los campo s que inclu y e data : Tabla 23 . Estructuta tipo data. Campo Tipo Descripción resultado string Descripción de la operación. errores A rray [string] Arreglo de errores repetidos A rray [string] Arreglo de UUID ya existentes (ACI DescargaSAT evita la duplicidad de descargas) exitosos A rray [string] UUID creados. En la Tabla 24 se presenta un ejemplo de visualiza ción de la respuesta al crear una descarga : Tabla 24 Ejemplo del response { "status" : "success" , "data" :{ "resultado" : "Se program \ u00f3 la descarga en d \ u00ed as de CFDI'S, numero de dias programados 3,numero de repetidos 0" , "errores" :[ ], "exitosos" :[ "20190228.00.00.00 - 2019022823.59.59C" , "20190301.00.00.00 - 2019030123.59.59C" , "20190228.10.41.15 - 201903 0110.41.15C" ], "repetidos" :[ ], "diasTotalesDeDescarga" : 2 , "totalDiasNuevosProgramados" : 2 , "diasyaprogramados" : 0 , "tipoDescargaName" : "CFDI'S" }, "message" : "" , "code" : "" }

45. M ANUAL API ACI D ESCARGA SAT Página 45 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Data campos Tipo Requerido Descripción fechaFinal datetime opcional Fecha final (fin del rango) rfcEmisor string opcional RFC del receptor del CFDI rfcReceptor string opcional RFC del emisor del CFDI uuidCFDI string opcional UUID espec í fico, si se usa este campo se ignoran los demás efectoCFDI string opcional Clave efecto limit int requerido Limit (número máximo de resultados) offset int requerido Desplazamiento de resultados (número de resultados que serán “saltados”, ejemplo: Si se tiene 100 resultados y solo que quieren obtener los últimos 10(del 91 al 100) entonces el offset seria valor 91 y limit 10. 9.3.2 Request En seguida e n la Tabla 68 se incluye un ejemplo de la petición : Tabla 68 . Ejemplo de petición para la consulta de CFDI. { "fechaFinal" : null , "fechaInicial" : "2017 - 12 - 01 02:15:35" , "rfcEmisor" : "AAA010101AAA" , "rfcReceptor" : null , "uuidCFDI" : null , "efectoCFDI" : "I" , "limit" : 3 , "offset" : 0 } 9.3.3 Response El response incluye 2 campos especiales : 1) count que es el length del arreglo y 2) total, que es el número total de registros que entran en la consulta , la descripción de estos campos esta en la Tabla 69 : Tabla 69 . Descripción de data para servicio de Consulta de CFDI . Campo Tipo Descripción total string Total de resultados encontrados. count int Cantidad de resultados devu eltos en petición. Este valor es el número de elementos devueltos y contenidos en el parámetro CFDI

66. M ANUAL API ACI D ESCARGA SAT Página 66 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Console . WriteLine ( "Valido hasta: " + infoCer . ValidTo ); } else { //checar los errrores a nivel de api(ojo para otros errores como timeout, son excepciones ): Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } Console . ReadLine (); 11. Tipos de datos Cada método del API expone un tipo de dato que esta descrito en su propia sección, sin embargo, existen tipos de datos que se utilizan en más de un método . E n este apartado se describen cada uno de estos datos. 11.1.1 Tipo CFDI. Este es el tipo devuelto por el WS para representar un CFDI, donde todos los SDK tienen una clase que modela este objeto . En la Tabla 98 se describen los campos del CFDI : Tabla 98 . Descripción de Campos CFDI . Data campos Descripción uuid string UUID del CFDI rfcEmisor string RFC Emisor del RFC rfcReceptor string RFC Receptor del RFC tipoDescarga string Tipo de descarga (CFDI,META) fechaDescarga datetime Fecha que se descargó el CFDI. total int Total del CFDI. fechaEmision datetime Fecha de emisión del CFDI. pacquecertifico string RFC del PAC que certifico. fechaCertificacion datetime Fecha de certificación de CFDI. solicitadaMetodo string Método por el cual se descargó el CFDI. estado string Estado del CFDI: 0 = Cancelado, 1 = vigente. Este campo tiene el valor al momento en que se obtuvo el CFDI. Por lo cual no deberá ser 100% fiable.

31. M ANUAL API ACI D ESCARGA SAT Página 31 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; print_r ( $e ); } 8.3.5 Ejemplo con SDK de .NET La siguiente Tabla 42 incluye un ejemplo de consumo utilizando el SDK de .Net para la reactivación de una descarga por medio de su UUID : Tabla 42 . Ejemplo con el SDK de .Net para la reactivación de descarga por UUID var sdk = new DescargaSATSDK (); sdk . Token = token ; WsResponseMaster < string > wsResponse = sdk . ReactivarDescarga ( descargaUUID ); if ( wsResponse . IsStatusSuccess ()) { //data en este caso solo es un string con el mensaje de exito, mientras estatus sea success significa que se reactivo Console . WriteLine ( wsResponse . Data ); } else { Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } Console . ReadLine (); 8.4 Obtener descargas diarias 8.4.1 Request La URL relativa y el método se describen en la Tabla 43 y los par á m e tros en formato JSON que espera recibir el método se descr i be en la Tabla 44 . Tabla 43 . URL para la obtención de descargas diarias . URL METODO Descripción /api/v2/descargasatsifei/DescargaPr ogramadas/query @ POST Permite consultar los UUID de todas las descargas que son diarias (con tiempo en 00:00:00 y 23:59:59).

29. M ANUAL API ACI D ESCARGA SAT Página 29 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 8.3.2 Response En esta respuesta el tipo de dato de data es string, tal y como se muestra en la Tabla 38 : Tabla 38 . Tipo de dato de data en la respuesta del método de reactivación. Data campos Tipo Descripción Data string En caso exitoso. Mensaje descriptivo de la reactivación de la descarga. A continuación en la Tabla 39 se muestra un ejemplo de respuesta de m é todo de reactivacion de descarga por UUID. Tabla 39 . Ejemplo respuesta m é todo de reactivacion de descarga por UUID. { "status" : "success" , "data" : "Se reactivo la descarga programada con UUID:20150101.00.00.00 - 2015010123.59.59C" , "message" : "" , "code" : "" } Nota: se recomienda consumir el servicio de consulta de descarga si se quiere corroborar los cambios de estado. 8.3.3 Ejemplo SDK de JAVA La Tabla 40 incluye un ejemplo de consumo utilizando el SDK de Java. Tabla 40 . Ejemplo de consumo con el SDK de JAVA para la r eactivación de descarga por UUID . DescargaSATSDK sdk = new DescargaSATSDK (); //habilitar log para testing: sdk . setLog ( true ); sdk . setToken (token); try { //se consume el ws pasando el UUID de la descarga a reactivar Response < WsResponseMaster < String >> response = sdk . ReactivarDescarga ( "20150101.00.00.00 - 2015010123.59.59C" ); if ( response . isSuccessful ()) { WsResponseMaster < String > body = response . body (); if ( body . isStatusSuccess ()) { //en este caso es un mensaje de confirmacion String data = body . getData (); //haz lo que necesites hacer ... } else { System . err . println ( response . body (). getMessage ()); }

62. M ANUAL API ACI D ESCARGA SAT Página 62 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 91 . P arametros JSON a enviar en el m é todo Subir EFIRMA . Data campos tipo Descripción key string requerido Llave codificada en base64 pass string requerido Contraseña de la Efirma cert string requerido EFIRMA codificada en base64 Ejemplo de la petición para subir la Efirma se muestra en la Tabla 92 Tabla 92 . Ejemplo de petición ( se han omitido los valores ) . POST /api/v 2 /descargasatsifei/certificado HTTP/ 1.1 Authorization: qpJHAYQLsdas89e1MI3j21301230912j3121 Content - Type: application/json; charset=UTF - 8 Content - Length: 4146 Host: descargasat.sifei.com.mx Connection: Keep - Alive Accept - Encoding: gzip User - Agent: okhttp/ 3.12 . 0 { "cert" : "" , "key" : "" , "pass" : "" } 10.1.2 Response Para este método cuando el “status” es ”success” data contiene un objeto JSON con los campos descritos en la Tabla 93 . Tabla 93 . Descripción de data para servicio de subir EFIRMA . Campo Tipo Descripción rfc string RFC que contiene la EFIRMA . noSerie string Número de serie de la EFIRMA validFrom Datetime Fecha de inicio de vigencia incluida en la EFIRMA validTo Datetime Fecha de expiración incluida en la EFIRMA En la Tabla 94 se muestra un e jemplo de respuesta cuando status contiene el valor “success” (recordar que con cualquier otro valor e n “status” “data” será null) Tabla 94 . Ejemplo de respuesta cuando status contiene el valor “success” . { "status" : "success" , "data" : { "rfc" : "AAAAAAAAAAA" , "noSerie" : "00005255152515" , "validFrom" : "2016 - 05 - 01 18:16:23" ,

33. M ANUAL API ACI D ESCARGA SAT Página 33 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Data campos Tipo Descripción estado string Estado de la descarga, tipo string, valores posibles: “ COMPLETADO ” , “ ERROR ” , “ESPERANDO” “EN PROCESO” , “ INCOMPLETA ” , “ BLOQU E ADA ” . Para más información sobre cada estado favor de referirse al Manual de Usuario de ACI DescargaSAT ya que son los mismos estados. A continuación se muestra un ejemplo de respuesta que devuelve el servicio (ver Tabla 48 ), como se puede observar, data es un arreglo el cual incluye elementos cuyas propiedades corresponden a la superior Tabla 47 . Tabla 48 . Ejemplo respuesta para la obtencion de descargas diarias { "status" : "success" , "data" : [ { "uuid" : "20180120.00.00.00 - 2018012023.59.59" , "fechaInicial" : "2018 - 01 - 20 00:00:00" , "fechaFinal" : "2018 - 01 - 20 23:59:59" , "tipoDescarga" : 1 , "estado" : "COMPLETADO" }, { "uuid" : "20180122.00.00.00 - 2018012223.59.59" , "fechaInicial" : "2018 - 01 - 22 00:00:00" , "fechaFinal" : "2018 - 01 - 22 23:59:59" , "tipoDescarga" : 1 , "estado" : "COMPLETADO" } ], "message" : "" , "code" : "" } 8.4.4 Ejemplo SDK de JAVA La Tabla 49 incluye un ejemplo del uso del SDK de Java para el método de consulta de descargas. Tabla 49 . Ejemplo de consumo con el SDK de JAVA . DescargaSATSDK retro = new DescargaSATSDK ();

23. M ANUAL API ACI D ESCARGA SAT Página 23 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } //descargas diarias ya existentes: foreach ( var uuidYaExistente in data . Repetidos ) { Console . WriteLine ( "Ya existe una descarga con el uuid:{0}, por lo que no se volvera a descargar" ); } //lista de errores (si es que hubo) foreach ( var error in data . Errores ) { Console . WriteLine ( "Error :{0}" , error ); } } else { //puede deberse a: /** * Que el rango de la descarga ya existe(descarga duplicada) * Para mas detalle ver tabla de errores. * */ Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } Console . ReadLine (); 8.2 Consultar Descarga Por UUID Este método no necesita un body , el parámetro es el UUID de la Descarga y forma parte de la URL. 8.2.1 Request A continuación se muestra la información de la solicitud a enviar en la Tabla 28 : Tabla 28 . URL para la consulta de una descarga URL M É TODO Descripción /api/v2/descargasatsifei/DescargaProgramad a/{ uuid } @GET Permite obtener el detalle de una descarga, esto incluye el estado, fechas, y uuid entre más . URL parámetros (deben sustituirse al final de la URL) Parámetro Tipo Descripción @ uuid string UUID de la descarga Se presenta un e jemplo de petición para la consultar una descarga en la Tabla 29 :

44. M ANUAL API ACI D ESCARGA SAT Página 44 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx //data contiene el xml en base64 var xml = wsResponse . Data ; //se decodifica el XML para obtener los bytes y escribir: byte [] xmlBytes = Convert . FromBase64String ( xml ); //a manera de ejemplificacion se muestra el ejemplo para escribirlo: try { using ( var fs = new FileStream ( Path . Combine ( @"F: \ salidaTest \ " , cfdiUUID + ".xml" ), FileMode . Create , FileAccess . Write )) { fs . Write ( xmlBytes , 0 , xmlBytes . Length ); } } catch ( Exception e ) { Console . WriteLine ( e . Message ); } } else { if ( wsResponse . isNotFound ()) { //no se encontro el XML } else { //otro errror: } } 9.3 Consultar CFDI El método Consultar CFDI permite obtener un resumen de todos los CFDI que cumplan un criterio de búsqueda. 9.3.1 Request . La solicitud debe cumplir con la estru c tura de la Tabla 66 : Tabla 66 URL para la consulta (búsqueda) de CFDI. URL METODO Descripción /api/v2/descargasatsifei/cfdi/query @ POST Este método permite descargar todos los CFDI que cumplan con el filtrado indicado. A continuación en la Tabla 67 se describen los campos a enviar en la petición para la consulta de CFDI. Tabla 67 Descripci ó n de los campos a enviar en la peticion Data campos Tipo Requerido Descripción fechaInicial Datetime opcional Fecha Inicial (inicio del rango)

42. M ANUAL API ACI D ESCARGA SAT Página 42 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx "status" : "success" , "data" : "xmlcodificadoenbase64" , "message" : "" , "code" : "" } De esta respuesta el atributo data contiene el XML co dificado en base64. 9.2.3 Ejemplo SDK de JAVA A continuación se incluye un ejemplo utilizando el SDK de java para descargar el XML (ver Tabla 63 ) : Tabla 63 . Ejemplo de consumo con el SDK de JAVA . DescargaSATSDK retro = new DescargaSATSDK (); retro . setLog ( true ); retro . setToken (token); try { Response < WsResponseMaster < String >> response = retro . descargarCFDI (uuidCFDI); if ( response . isSuccessful ()){ WsResponseMaster < String > body = response . body (); if ( body . isStatusSuccess ()) { //todo bien, hago lo que necesite con el CFDI String XMLB64 = body . getData (); //escribir a archivo, enviar por correo, insertar en BD, etc } } else { //error de conexion, propias de la peticion } } catch ( Exception e ) { e . printStackTrace (); } 9.2.4 Ejemplo con SDK de PHP A continuación se incluye un ejemplo utilizando el SDK de PHP para descargar el XML (ver Tabla 64 ) : Tabla 64 . Ejemplo de consumo con el SDK de PHP . $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > DescargarCFDIPorUUID ( self :: $CFDIUUID ); if ( $response - > isSuccessful ()) { $body = $response - > getBody ();

36. M ANUAL API ACI D ESCARGA SAT Página 36 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 51 . Ejemplo con el SDK de .Net para la obtención de descargas . var sdk = new DescargaSATSDK (); sdk . Token = token ; var parameters = new ParametersDescargasDiarias (); //se puede filtrar por estado de la descarga. parameters . estadoDescarga = ESTADO . COMPLETADO ; WsResponseMaster < List < DataDescargaProgramada >> wsResponse = sdk . ConsultarLasDescargasDiarias ( parameters ); if ( wsResponse . IsStatusSuccess ()) { //obtenermos el array de descargas: List < DataDescargaProgramada > lst = wsResponse . Data ; foreach ( var descarga in lst ) { Console . WriteLine ( descarga . Uuid ); Console . WriteLine ( descarga . FechaInicial ); Console . WriteLine ( descarga . FechaFinal ); Console . WriteLine ( descarga . Estado ); Console . WriteLine ( descarga . TipoDescarga ); if ( descarga . isEstadoCompletado ()) { //lo que necesites... } } } else { Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } Console . ReadLine (); 9. Métodos relacionados CFDI. Una ve z que se han descargado los CFDI a la bóveda de CFDI de ACI DescargaSAT , se podrán realizar una serie de operaciones sobre ellos. A continuación se listan las operaciones de gestión y consulta de CFDI. 9.1 Obtener información CFDI Por UUID Permite consultar la información de un CFDI por su UUID .

55. M ANUAL API ACI D ESCARGA SAT Página 55 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx outputStream . close (); } else { System . err . println ( result . getMessage ()); } } else { System . out . println ( "error" ); } } catch ( IOException e ) { e . printStackTrace (); } catch ( Exception e ) { e . printStackTrace (); } 9.4.4 Ejemplo SDK de PHP El ejemplo para la descarga de CFDI utilizando el SDK de java se encuentra en la siguiente Tabla 81 : Tabla 81 . Ejemplo de cons umo con el SDK de PHP . $sdk = new DescargaSATSDK (); #token $sdk - > setToken ( self :: $token ); #se crea el objeto de consulta: $params = new ParametersDownloadCFDI (); #fecha inical es requerida $params - > setFechaInicial ( new DateTime ( "2018 - 01 - 01" )); #fecha final es requerida en este metodo.formato valido de fecha(EL SDK se encarga de enviar la fecha en el formato correcto) $params - > setFechaFinal ( new DateTime ( "2019 - 01 - 03" )); #indicamos que sean emitidos por nuestro rfc $params - > setOrigenEmitidos (); #Indica el numero maximo de resultados a devolver #optionalmenete le pondemos indicar que sean de tipo nomina $params - > setEfectoCFDI ( "N" ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > DescargarCFDIConsulta ( $params ); if ( $response - > isSuccessful ()) { $body = $response - > getBody (); #si es succes entonces todo fue bien.

21. M ANUAL API ACI D ESCARGA SAT Página 21 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } } catch ( Exception e ) { e . printStackTrace (); } 8.1.4 Ejemplo con SDK de PHP Ejemplo de uso de SDK de PHP en Tabla 26 : Tabla 26 . Ejemplo de consumo con el SDK de PHP para la creación de una descarga $descarga = new DescargaProgramadaRequest (); #notar que no es necesario indicar el tiempo. $descarga - > setFechaInicial ( new \ DateTime ( "2018 - 12 - 01" )); $descarga - > setFechaFinal ( new \ DateTime ( "2018 - 12 - 07" )); $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { $response = $sdk - > ProgramarDescarga ( $descarga ); if ( $response - > isSuccessful ()){ $body = $response - > getBody (); if ( $body - > isStatusSuccess ()){ //en este caso data es un arreglo compuestos de 4 propieadades o elementos $data = $body - > getData (); #mensaje - descripcion de la operacion (string) echo $data - > resultado ; exitosos: arreglo de uuid creados, estos pueden guardarse para su posterior *verificacion(consumir el servicio de consula detalle para saber si su estado ya esta en completado) */ print_r ( $data - > exitosos ); #repetidos: arreglo de uuid de descargas pre viamente realizadas print_r ( $data - > repetidos ); #diasTotalesDeDescarga: cantidad de dias entre la fecha inicial y final echo "diasTotalesDeDescarga:" . $data - > diasTotalesDeDescarga . " \ n " ; #totalDiasNuevosProgramados: cantidad de dias nuevos(efectivamente añadidos) echo "totalDiasNuevosProgramados:" . $data - > totalDiasNuevosProgramados . " \ n " ; #diasyaprogramados : cantidad de dias ya programados

63. M ANUAL API ACI D ESCARGA SAT Página 63 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx "validTo" : "2021 - 05 - 01 18:17:03" }, "message" : "" , "code" : "" } 10.1.3 Ejemplo con SDK de JAVA El ejemplo para subir la EFirma a ACI DescargaSAT utilizando el SDK de Java se muestra en la Tabla 95 : Tabla 95 . Ejemplo de subir eFirma con SDK de JAVA . //Objeto de tipo SubirEfirma que espera el servicio, los 3 campos son obligatorios ParameterSubirEFirma params = new ParameterSubirEFirma (); //se establece la fecha inicial //se lee el certificado y se convierte a base64 params . cert = Utils . readFileAndGetBase64 (CERT_PATH); //se lee el key y se convierte a base64 params . key = Utils . readFileAndGetBase64 (KEY_PATH); //se establece el pass del key params . pass =KEY_PASS; //se inicializa el SDK DescargaSATSDK sdk = new DescargaSATSDK (); //se establece el token que es necesario para consumir sdk . setToken (token); try { //ahora se consume el servicio Response < WsResponseMaster < DataEFirmaResponse >> response = sdk . SubirEfirma (params); //con el metodo isSuccessful se verficiar si la peticion http fue correcta if ( response . isSuccessful ()) { //si a nivel http fue correcto, entonces se deserializa el body: WsResponseMaster < DataEFirmaResponse > body = response . body (); //en el body verificamos que con isStatusSuccess que la OPERACION fue correcta. if ( body . isStatusSuccess ()) { //si status es success en el body entonces operar con data DataEFirmaResponse data = body . getData (); System . out . println ( data . getNoSerie ()); System . out . println ( data . getRfc ()); System . out . println ( data . getValidFrom ()); System . out . println ( data . getValidTo ());

38. M ANUAL API ACI D ESCARGA SAT Página 38 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx "fechaDescarga" : "2019 - 02 - 19 17:12:14" , "total" : "$568.40" , "fechaEmision" : "2019 - 01 - 02 19:33:15" , "pacquecertifico" : "AAA010101AAA" , "fechaCertificacion" : "2019 - 01 - 02 19:47:04" , "solicitadaMetodo" : "DESC" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false }, "message" : "" , "code" : "" } 9.1.3 Ejemplo SDK de JAVA La Tabla 56 ejemplifica el consumo del servicio mediante el SDK de Java. Tabla 56 . Ejemplo de consumo con el SDK de JAVA para la obtención de información de CFDI por UUID DescargaSATSDK sdk = new DescargaSATSDK (); sdk . setLog ( true ); sdk . setToken (token); try { Response < WsResponseMaster < CFDIModelAPI >> response = sdk . ObtenerCFDIPorUUID ( "XXXXX - 96DC - 4AF3 - 80AF - XXXXX" ); if ( response . isSuccessful ()){ //deserializa body WsResponseMaster < CFDIModelAPI > body = response . body (); if ( body . isStatusSuccess ()) { //todo bien, hago lo que necesite con el CFDI CFDIModelAPI cfdiInfo = body . getData (); System . out . println ( cfdiInfo . uuid ); } } else { //error de conexion, porpias de la peticion } } catch ( Exception e ) { e . printStackTrace (); } 9.1.4 Ejemplo con SDK de PHP La Tabla 57 ejemplifica el consumo del servicio mediante el SDK de PHP para consulta de CFDI por UUID.

59. M ANUAL API ACI D ESCARGA SAT Página 59 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx sdk . setToken (token); try { //se le pasa el UUID que se desea verificar si existe en ACI DescargaSAT Response < WsResponseMaster < Boolean >> response = sdk . ExisteCFDI (uuidCFDI); //verficiamos si la peticion fue recibida: if ( response . isSuccessful ()) { //deserializamos el JSON y obtenemos el body WsResponseMaster < Boolean > body = response . body (); //a nivel de API se verifica que todo fue bien if ( body . isStatusSuccess ()) { //para este servicio data es un booleano, true indica que esta resguardo,false indica que no lo esta. if ( body . getData () == true ) { System . out . println ( "Existe el cfdi" ); } else { System . out . println ( "No existe el CFDI" ); } } else { System . err . println ( body . getMessage ()); } } else { //algo fue mal en la peticion System . err . println ( "Error http code:" + response . code ()); //obtenemos el body del error ResponseBody dc = response . errorBody (); InputStream inputStream = dc . byteStream (); //tomamos el input stream y lo escribimos a un String String body = convert (inputStream, Charset . forName ( "utf - 8" )); System . err . println (body); } } catch ( Exception e ) { // TODO Auto - generated catch block e . printStackTrace (); } 9.5.4 Ejemplo SDK de PHP El ejemplo para la verficicacion de existencia de CFDI en ACI DescargaSAT utilizando el SDK de Java en la Tabla 88 : Tabla 88 . Ejemplo de consumo con el SDK de PHP para la verificación de existencia de CFDI . $sdk = new DescargaSATSDK (); //establecemos el token

26. M ANUAL API ACI D ESCARGA SAT Página 26 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } 8.2.4 Ejemplo con SDK de PHP En la Tabla 34 se ejemplifica el consumo del servicio mediante el uso del SDK de PHP : Tabla 34 . Ejemplo de consumo con el SDK de PHP para la consulta de una descarga por UUID . $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > ConsultarDescarga ( self :: $descargaUUID ); if ( $response - > isSuccessful ()){ $body = $response - > getBody (); #si es succes entonces se encontro y se puede obtener por getData if ( $body - > isStatusSuccess ()){ $data = $body - > getData (); print_r ( $data ); } else { #error if ( $body - > isCodeNoEncontrado ()){ echo "No existe la descarga con el UUID" ; echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } } } else { #imprimomos el error inesperado del servidor. echo $response - > getRawBody (); } } catch ( Exception $e ){ #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de o currir. echo "Exception: \ n " ; print_r ( $e ); }

48. M ANUAL API ACI D ESCARGA SAT Página 48 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx ] }, "message" : "" , "code" : "" } 9.3.4 Ejemplo SDK de JAVA Ejemplo de búsqueda de CFDi utilizando SDK de Java en Tabla 71 . Tabla 71 . Ejemplo de consumo con el SDK de JAVA para la búsqueda de CFDI resguardados . DescargaSATSDK sdk = new DescargaSATSDK (); sdk . setLog ( true ); //token sdk . setToken (token); try { //se instancia el objeto que permite establecer el criterio de busqueda ParametersCFDIQuery params = new ParametersCFDIQuery (); //efecto es el mismo que de clave TipoCFDI: params . setEfectoCFDI ( "I" ); //si se quiere filtrar por RFC EMISOR params . setRfcEmisor (rfcEmisor); //numero de resultados que deseamos obtener(como maximo) params . setLimit ( 3 ); // Calendar fechaInicial = Calendar . getInstance (); fechaInicial . add ( Calendar . MONTH , - 15 ); //fecha inicial de busqueda. params . setFechaInicial ( fechaInicial . getTime ()); //se setea el objeto query y se consume el ws Response < WsResponseMaster < DataResponseCFDIConsulta >> response = sdk . ConsultarCFDIDatos (params); if ( response . isSuccessful ()) { // everything is ok WsResponseMaster < DataResponseCFDIConsulta > body = response . body (); //checamos el estaus if ( body . isStatusSuccess ()) { //obtenemos el data DataResponseCFDIConsulta data = body . getData (); //este objeto alberga varios campos, el de mayor interes es la lista de CFDI que consultamos //asi que se extrae via getter y se recorre: List < CFDIModelAPI > lstCFDI = data . getCfdi (); for ( CFDIModelAPI cfdi : lstCFDI){ System . out . println ( cfdi . uuid );

49. M ANUAL API ACI D ESCARGA SAT Página 49 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } //otros campos: //total de cfdi existentes que cumplen el criterio: System . out . println ( data . getTotal ()); //cantidad de cfdi devuelvtos en la peticion(delimitado por el limit de la peticion) System . out . println ( data . getCount ()); } else { System . err . println ( response . body (). getMessage ()); } } else { // si algo fue mal en la respuesta y deseas ver lo que devuelve el server en la peticion: System . err . println ( "Error http code:" + response . code ()); //obtenemos el body ResponseBody dc = response . errorBody (); //se obtiene el stream stream y se convierte a String InputStream inputStream = dc . byteStream (); String body = convert (inputStream, Charset . forName ( "utf - 8" )); //imprimmos el error: System . err . println (body); } } catch ( Exception e ) { e . printStackTrace (); } 9.3.5 Ejemplo con SDK de PHP Ejemplo de búsqueda de CFDi utilizando SDK de PHP en Tabla 72 : Tabla 72 . Ejemplo de consumo con el SDK de PHP para la búsqueda de CFDI res guardados . $sdk = new DescargaSATSDK (); #token $sdk - > setToken ( self :: $token ); #se crea el objeto de consulta: $params = new ParametersCFDIQuery (); #formato valido de fecha(EL SDK se encarga de enviar la fecha en el formato correcto) $params - > setFechaFinal ( new DateTime ( "2019 - 01 - 01" )); $params - > setRfcReceptor ( $rfcReceptor ); #Indica el numero maximo de resultados a devolver $params - > setLimit ( 5 );

39. M ANUAL API ACI D ESCARGA SAT Página 39 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 57 . Ejemplo de consumo con el SDK de PHP para la obtención de informaci ón de CFDI por UUID . $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > ObtenerCFDIPorUUID ( self :: $CFDIUUID ); if ( $response - > isSuccessful ()){ $body = $response - > getBody (); #si es succes entonces todo fue bien. if ( $body - > isStatusSuccess ()){ #en este caso data es la info de un CFDI $data = $body - > getData (); print_r ( $data ); } else { #error if ( $body - > isCodeNoEncontrado ()){ echo "No existe CFDI con el UUID " ; echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ){ #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; print_r ( $e ); } 9.1.5 Ejemplo con SDK de .NET La Tabla 58 ejemplifica el consumo del servicio mediante el SDK de PHP para consulta de CFDI por UUID.

35. M ANUAL API ACI D ESCARGA SAT Página 35 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx $body = $response - > getBody (); #si es succes entonces todo fue bien. if ( $body - > isStatusSuccess ()) { /* *data en este caso data puede ser null si no hay descargas(en caso de ser nueva) o contiene un array con *los datos basicos de las descargas */ $data = $body - > getData (); if ( null == $data ) { #aun no hay descargas } else { #print_r($data); foreach ( $data as $descarga ) { echo "uuid { $descarga - > uuid } \ n " ; if ( $descarga - > isEstadoCompletado ()) { echo "Completado \ n " ; } } } } else { #error //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ) { #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; print_r ( $e ); } 8.4.6 Ejemplo con SDK de .NET La Tabla 51 incluye un ejemplo del uso del SDK en .NET para el método de consulta de descargas.

57. M ANUAL API ACI D ESCARGA SAT Página 57 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx parameters . FechaInicial = new DateTime ( 2018 , 01 , 01 ); //requerido parameters . FechaFinal = new DateTime ( 2018 , 02 , 01 ); //requerido try { //se establecen los paramtros , en este caso data sera un string que contiene el archivo zip en b64 WsResponseMaster < string > wsResponse = sdk . DescargarCFDIConsulta ( parameters ); if ( wsResponse . IsStatusSuccess ()) { //verifica el campos status sea success string zipXML = wsResponse . Data ; //se decodifica para obtener los bytes. byte [] zipBytes = Convert . FromBase64String ( zipXML ); //haz lo que se necesite. por ejemplo extraer a un dir. el el SDK se incluye la clase Utils: int numeroXmlExtraidos = Utils . ExtraerArchivosZipAFolder ( zipBytes , @"F: \ salidaTest" ); Console . WriteLine ( string . Format ( "Se han extraido {0} xmls" , numeroXmlExtraidos )); } else { Console . WriteLine ( string . Format ( "Codigo de error:{0}" , wsResponse . Code )); Console . WriteLine ( string . Format ( "Mensaje de error:{0}" , wsResponse . Message )); } } catch ( System . Net . WebException e ) { Console . WriteLine ( e ); } catch ( Exception e ) { Console . WriteLine ( e ); } Console . ReadLine (); 9.5 Existe CFDI en CFDI resguardos Este método recibe un UUID de CFDI e indica si está o no resguardado en ACI DescargaSAT. 9.5.1 Request EL método y URL para la verficiacion de CFDI en ACI DescargaSAT se describen en la Tabla 83 :

20. M ANUAL API ACI D ESCARGA SAT Página 20 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 8.1.3 Ejemplo con SDK de JAVA A continuación se muestra el ejemplo de código en la Tabla 25 : Tabla 25 . Ejemplo con SDK de JAVA para la creación de una descarga //objeto tipo de scarga que espera el WS. DescargaProgramadaRequest descargaProgramadaRequest = new DescargaProgramadaRequest (); //se establece la fecha inicial descargaProgramadaRequest . setFechaInicial ( new Date ()); Date datefinal = new Date (); Calendar cd = Calendar . getInstance (); cd . add ( Calendar . DATE , 1 ); datefinal = cd . getTime (); //se establece la fecha final descargaProgramadaRequest . setFechaFinal (datefinal); descargaProgramadaRequest . setTipodeDescargaDescarga ( TipoDescarga . CFDI ); //estebl es el tipo //se inicializa el SDK DescargaSATSDK sdk = new DescargaSATSDK (); //se establece el token que es necesario para consumir sdk . setToken (token); try { //ahora se consume el servicio Response < WsResponseMaster < DataResponseDescargaProgramada >> response = sdk . ProgramarDescarga (descargaProgramadaRequest); //con el metodo isSuccessful se verficiar si la peticion http fue correcta if ( response . isSuccessful ()) { //si a nivel http fue correcto, entonces se deserializa el body: WsResponseMaster < DataResponseDescargaProgramada > body = response . body (); //en el body verificamos que con isStatusSuccess que la OPERACION fue correcta. if ( body . isStatusSuccess ()) { //si status es success en el body entonces operar con data DataResponseDescargaProgramada data = body . getData (); } else { //algo fue mal un codigo de error System . err . println ( "Codigo:" + body . getCode ()); System . err . println ( "Error:" + body . getMessage ()); //... haz lo que necesites } } else { //codigo diferente de 200 a 300.

34. M ANUAL API ACI D ESCARGA SAT Página 34 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx retro . setToken (token); try { ParametersDescargasDiarias para = new ParametersDescargasDiarias (); //para.estadoDescarga=DataDescargaProgramada.ESTADO_COMPLETADO; Response < WsResponseMaster < List < DataDescargaProgramada >>> response = retro . obtenerDescargasDiarias (para); if ( response . isSuccessful ()) { //deserailizacion de body WsResponseMaster < List < DataDescargaProgramada >> body = response . body (); //verificacion de estado if ( body . isStatusSuccess ()) { List < DataDescargaProgramada > lst = body . getData (); //se recorre la coleccion de descargas for ( DataDescargaProgramada d : lst) { System . out . println ( d . getUuid ()); System . out . println ( d . getTipoDescarga ()); } } else { System . err . println ( body . getCode ()+ body . getMessage ()); } } } catch ( IOException e ) { e . printStackTrace (); } 8.4.5 Ejemplo con SDK de PHP La Tabla 50 incluye un ejemplo del uso del SDK de PHP para el método de consulta de descargas. Tabla 50 . Ejemplo de consumo con el SDK de PHP . $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { #le asignamos un uuid de la descarga a consultar. $parameterDescargaDiarias =[ 'estadoDescarga' => DescargaProgramada ::ESTADO_ALL ]; $response = $sdk - > ConsultarLasDescargasDiarias ( $parameterDescargaDiarias ); if ( $response - > isSuccessful ()) {

25. M ANUAL API ACI D ESCARGA SAT Página 25 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx "fechaFinal" : "2018 - 10 - 16 23:59:59" , "estado" : "EN PROCESO" , "fechaOrigenProgramacion" : "2018 - 10 - 30 19:03:05" , "cfdiDescargados" : null , "ultimaEjecucion" : "2018 - 10 - 30 07:10:27" , "metodoDescarga" : 2 , "metodoDescargaString" : "Oficial" , "tipoDeDescarga" : 1 }, "message" : "" , "code" : "" } 8.2.3 Ejemplo SDK JAVA Ejemplo de consumo mediante SDK de Java se muestra en la Tabla 33 : Tabla 33 . Ejemplo de consumo con el SDK de JAVA para la consulta de una descarga por UUID //instanciacion de SKD y asigancion de token DescargaSATSDK sdk = new DescargaSATSDK (); sdk . setToken (token); try { //invocando - consumiendo servicio Response < WsResponseMaster < DataDescargaProgramadaDetail >> response = sdk . obtenerDetalleDescarga ( "20181016.00.00.00 - 2018101623.59.59" ); //se verifica la operacion,si es correcta con body() se deserializa la respuesta: if ( response . isSuccessful () ) { WsResponseMaster < DataDescargaProgramadaDetail > des = response . body (); //verificamos el estado de la operacion y si es success hacemos lo que necesite if ( des . isStatusSuccess ()) { System . out . println ( "ok" ); DataDescargaProgramadaDetail detalle = des . getData (); System . out . println ( detalle . getEstado ()); //estado de la descarga. } else { System . err . println ( des . getMessage ()); } } } catch ( IOException e ) { e . printStackTrace (); } catch ( Exception e ) { e . printStackTrace ();

46. M ANUAL API ACI D ESCARGA SAT Página 46 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Campo Tipo Descripción cfdi A rray de tipo Tipo CFDI. Arreglo de CFDI. Ver referencia: Tipo CFDI. En el ejemplo de la Tabla 70 se muestra como data se compone de los 3 campos, total, count y cfdi, donde este último es una colección. Tabla 70 . Ejemplo respuesta Consulta de CFDI { "status" : "suc cess" , "data" : { "total" : "180" , "count" : 5 , "cfdi" : [ { "uuid" : " X - E67F - 48E6 - ADEF - XXXX " , "rfcEmisor" : " AAAAAA " , "rfcReceptor" : " AAAAAAAA " , "fechaDescarga" : "2018 - 10 - 01 16:37:29" , "total" : "276.23" , "fechaEmision" : "2017 - 12 - 30 12:06:06" , "pacquecertifico" : " AAA010101AAA " , "fechaCertificacion" : "2017 - 12 - 30 12:04:47" , "solicitadaMetodo" : "BOTH" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false }, { "uuid" : "7702B849 - 25F0 - 441D - AC93 - XXXXXXXXX " , "rfcEmisor" : " AAA010101AAA " , "rfcReceptor" : " AAA010101AAA " , "fechaDescarga" : "2018 - 10 - 01 16:37:28" , "total" : "276.23" , "fechaEmision" : "2017 - 12 - 30 12:04:50" , "pacquecertifico" : " AAA010101AAA " , "fechaCertificacion" : "2017 - 12 - 30 12:03:31" , "solicitadaMetodo" : "BOTH" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false },

60. M ANUAL API ACI D ESCARGA SAT Página 60 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx $sdk - > setToken ( self :: $token ); //le pasamos el UUID y ejecutamos el consumo del WS $response = $sdk - > ExisteCFDI ( self :: $CFDIUUID ); //verificamos si la operacion HTTP fue correcta if ( $response - > isSuccessful ()) { //con get Body se mapea la respuesta a un objeto WsResponse $body = $response - > getBody (); //se verifica asi a nivel de API todo fue correcto if ( $body - > isStatusSuccess ()) { //en esta operacion Data es un boleeano. $existe = $body - > getData (); if ( $existe === true ) { echo "Existe CFDI" ; } else if ( $existe === false ) { echo "no existe" ; } else { echo "otra opcion" ; } } else { //consumo invalido echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } } else { echo $response - > getRawBody (); } 9.5.5 Ejemplo con SDK de .NET El ejemplo para la verficicacion de existencia de CFDI en ACI DescargaSAT utilizando el SDK de Java en la siguiente Tabla 89 : Tabla 89 . E jemplo de verificación de existencia de CFDI con SDK .NET var sdk = new DescargaSATSDK (); //se establece el token sdk . Token = token ; //se establece el UUID del CFDI. WsResponseMaster < bool > wsResponse = sdk . ExisteCFDI ( cfdiUUID ); if ( wsResponse . IsStatusSuccess ()) { //para este "metodo", data es un booleano que indica true si existe o false en caso contrario if ( wsResponse . Data ) {

64. M ANUAL API ACI D ESCARGA SAT Página 64 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } else { //algo fue mal un codigo de error System . err . println ( "Codigo:" + body . getCode ()); System . err . println ( "Error:" + body . getMessage ()); //... haz lo que necesites } } else { //codigo http diferente de 200 a 300. System . err . println ( "Error http code:" + response . code ()); //obtenemos el body del error ResponseBody dc = response . errorBody (); String error = Utils . parseErrorBody (dc); System . err . println (error); } } catch ( Exception e ) { e . printStackTrace (); } } 10.1.4 Ejemplo con SDK de PHP El ejemplo para subir la EFirma a ACI DescargaSAT utilizando el SDK de PHP se muestra en la Tabla 96 : Tabla 96 . Ejemplo de subir eFirma con SDK de PHP . //instanciamos el SDK $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); $params =[]; $params [ 'cert' ]= base64_encode ( file_get_contents ( self :: $CERT_PATH )); $params [ 'key' ]= base64_encode ( file_get_contents ( self :: $KEY_PATH )); $params [ 'pass' ]= self :: $KEY_PASS ; //le pasamos el UUID y ejecutamos el consumo del WS $response = $sdk - > SubirEFirma ( $params ); //verificamos si la operacion HTTP fue correcta if ( $response - > isSuccessful ()) { //con get Body se mapea la respuesta a un objeto WsResponse $body = $response - > getBody (); //se verifica asi a nivel de API todo fue correcto if ( $body - > isStatusSuccess ()) {

30. M ANUAL API ACI D ESCARGA SAT Página 30 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } } catch ( Exception e ) { e . printStackTrace (); } 8.3.4 Ejemplo con SDK de PHP La Tabla 41 incluye un ejemplo de consumo utilizando el SDK de PHP para reactivar una descarga. Tabla 41 . Ejemplo de consumo con el SDK de PHP para la reactivación de descarga por UUID . $sdk = new DescargaSATSDK (); //establecemos el token $sdk - > setToken ( self :: $token ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > ReactivarDescarga ( self :: $descargaUUID ); if ( $response - > isSuccessful ()){ $body = $response - > getBody (); #si es succes entonces se reactivo if ( $body - > isStatusSuccess ()){ #data en este caso solo es un string conteniendo un mensaje de ok. $data = $body - > getData (); echo ( $data ); } else { #error if ( $body - > isCodeNoEncontrado ()){ echo "No existe la descarga con el UUID para ser reactivada" ; echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ){ #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK

51. M ANUAL API ACI D ESCARGA SAT Página 51 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx } } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ) { #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; // Couldn't connect to server print_r ( $e ); } 9.3.6 Ejemplo con SDK de .NET Ejemplo de búsqueda de CFDi utilizando SDK en .NET en Tabla 73 . Tabla 73 . Ejemplo con el SDK de .Net para la búsqueda de CFDI resguardados . var sdk = new DescargaSATSDK (); sdk . Token = token ; var paramsN = new ParametersCFDIQuery (); //se puede establecer el efecto del CFDI paramsN . EfectoCFDI = "I" ; //se establece la fecha inicial paramsN . FechaInicial = DateTime . ParseExact ( "2019 - 01 - 01" , "yyyy - MM - dd" , System . Globalization . CultureInfo . InvariantCulture ); //se establece numero maximo de resultados a devolver: paramsN . Limit = 3 ; //se setean los parametros: WsResponseMaster < DataResponseCFDIConsulta > wsResponse = sdk . ConsultarCFDIDatos ( paramsN ); //se verifica el status de la peticion. if ( wsResponse . IsStatusSuccess ()) { //si todo fue bien entonces: Console . WriteLine ( wsResponse . Data . cfdi ); if ( wsResponse . Data . cfdi . Count > 0 ) { //hubo resultados foreach ( var cfdi in wsResponse . Data . cfdi ) { Console . WriteLine ( cfdi . Uuid ); Console . WriteLine ( cfdi . RfcEmisor );

54. M ANUAL API ACI D ESCARGA SAT Página 54 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 80 . Ejemplo de consumo con el SDK de JA VA . //se crea instancia del SDK DescargaSATSDK sdk = new DescargaSATSDK (); sdk . setToken (token); try { // se creamos objeto que nos permitira establecer el criterio de CFDI a Descargar ParametersDownloadCFDI cfdirequest = new ParametersDownloadCFDI (); //objetos fecha inicial y final Calendar fechaInicial = Calendar . getInstance (); fechaInicial . add ( Calendar . MONTH , - 3 ); Calendar fechaFinal = Calendar . getInstance (); fechaFinal . add ( Calendar . MONDAY , 1 ); cfdirequest . setFechaInicial ( fechaInicial . getTime ()); cfdirequest . setFechaFinal ( fechaFinal . getTime ()); //se indica si deseamos que sean los Emitidos o recibidos o ambos (consultar Enumeracion ) cfdirequest . setEmitidoRecibido ( EmitidoRecibido . Todos ); //opcionalemnte le podemos indicar el efecto cfdirequest . setEfectoCFDI ( "I" ); Response < WsResponseMaster < String >> response = sdk . DescargarCFDIS (cfdirequest); System . out . println ( "Peiticon realizada" ); //verficamos su fue exitosa, es exitosa si fue recibida por el server, entendida y acepta if ( response . isSuccessful ()) { System . out . println ( "Exitosa(HTTP OK)" ); //deserializamos la el body y se verifica que todo este bien WsResponseMaster < String > result = response . body (); //verficamos a NIVEL DE API si la peticion fue correcta if ( result . isStatusSuccess ()) { /*se obtiene data, que para este metodo es de tipo String y que contiene el archivo zip en base64, por ello se decodifica y se obtiene el arreglo de bytes */ byte [] bytesZip = Base64 . decodeBase64 ( result . getData ()); //desde este punto se puede hacer lo que se desee, para ejemplificar lo escribiremos a un archivo: File file = new File ( "F:/tmp" , "zip.zip" ); FileOutputStream outputStream = new FileOutputStream (file); //escribimos los bytes y ya terminado se cierra el outputstream. outputStream . write (bytesZip, 0 , bytesZip . length );

22. M ANUAL API ACI D ESCARGA SAT Página 22 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx echo "diasyaprogramados:" . $data - > diasyaprogramados . " \ n " ; #tipoDescargaName echo "tipoDescargaName:" . $data - > tipoDescargaName . " \ n " ; } else { //consumo invalido o descarga ya existente, codigo y mensaje del API echo "codigo: " . $body - > getCode (). " \ n " ; echo "message: " . $body - > getMessage (). " \ n " ; } } else { echo $response - > getRawBody (); } } catch ( Exception $e ){ print_r ( $e ); } 8.1.5 Ejemplo con SDK de .NET Ejemplo de uso de SDK de .NET en Tabla 27 : Tabla 27 . Ejemplo con el SDK de .Net para la creación de una descarga. var sdk = new DescargaSATSDK (); sdk . Token = token ; var paramerters = new DescargaProgramadaRequest (); paramerters . FechaInicial = new DateTime ( 2018 , 12 , 1 ); paramerters . FechaFinal = new DateTime ( 2018 , 12 , 5 ); //nota: las descargas de CFDI son divididas siempre por DIAS //debido a esto al crearse una descarga el servicio devuelve un uuid por cada descarga - dia, es decir, si se envia un rango de 30 dias, el ws retornara el uuid de las descargas diarias. Esto permite evitar descargar mas de una vez un mismo dia. var wsResp onse = sdk . ProgramarDescarga ( paramerters ); if ( wsResponse . IsStatusSuccess ()) { var data = wsResponse . Data ; Console . WriteLine ( data . Resultado ); Console . WriteLine ( data . Exitosos ); //descargas efectivamente creadas foreach ( var uuidgenerado in data . Exitosos ) { Console . WriteLine ( "Se creo descarga con uuid: {0} , apartir de este comento se debera consumir el servicio de consulta descarga para saber si ya fue completado" , uuidgenerado );

43. M ANUAL API ACI D ESCARGA SAT Página 43 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx #si es succes entonces todo fue bien. if ( $body - > isStatusSuccess ()) { #en este caso data es el XML codificado en base64 $data = $body - > getData (); echo $data ; $xml = base64_decode ( $data ); echo $xml ; } else { #error if ( $body - > isCodeNoEncontrado ()) { echo "No existe CFDI con el UUID " ; echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ) { #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; // Couldn't connect to server print_r ( $e ); } 9.2.5 Ejemplo con SDK de .NET A continuación se incluye un ejemplo utilizando el SDK de .NET para descargar el XML (ver Tabla 65 ) : Tabla 65 . Ejemplo con el SDK de .Net para la descarga de CFDI por UUID . var sdk = new DescargaSATSDK (); sdk . Token = token ; //se le pasa el uuid del CFDI a descargar. se parametriza data a tipo string WsResponseMaster < string > wsResponse = sdk . DescargarCFDIPorUUID ( cfdiUUID ); if ( wsResponse . IsStatusSuccess ()) {

65. M ANUAL API ACI D ESCARGA SAT Página 65 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx //en esta operacion Data es un objeto compuesto por las propiedades: /** * rfc * noSerie * validFrom * validTo */ $certficado = $body - > getData (); } else { //consumo invalido echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } } else { echo $response - > getRawBody (); } 10.1.5 Ejemplo con SDK de .NET A continuación la Tabla 97 muestra el ejemplo de como subir la EFIRMA usando el SDK de .NET : Tabla 97 . Ejemplo de subir eFirma con SDK .NET . var sdk = new DescargaSATSDK (); //se establece el token sdk . Token = token ; //se instancia el tipo de objeto esperado por el WS var pa = new ParameterSubirEFirma (); //se leen los archivos y se codifican en base64. pa . Cert = Utils . ReadFileAndEncodeToBase64 ( @"F: \ Certs \ test \ efirma.cer" ); pa . Key = Utils . ReadFileAndEncodeToBase64 ( @"F: \ Certs \ test \ key.key" ); //pass de la llave pa . KeyPass = "sadsdas" ; WsResponseMaster < DataEFirmaResponse > wsResponse = sdk . SubirEFirma ( pa ); //se verifica si todo fue bien: if ( wsResponse . IsStatusSuccess ()) { var infoCer = wsResponse . Data ; Console . WriteLine ( "Numero de serie:" + infoCer . NoSerie ); Console . WriteLine ( "RFC:" + infoCer . RFC ); Console . WriteLine ( "Valido desde: " + infoCer . ValidFrom );

56. M ANUAL API ACI D ESCARGA SAT Página 56 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx if ( $body - > isStatusSuccess ()) { # data es un ojeto de tipo DataResponseCFDIConsulta $data = $body - > getData (); echo $data ; file_put_contents ( 'archivo.zip' , base64_decode ( $data )); } else { #error if ( $body - > isCodeNoEncontrado ()) { echo "No existen CFDI con en la consulta dada " ; echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } } } else { #imprimomos el error inesperado del servidor. echo "ERROR: \ n " ; echo $response - > getRawBody (); } } catch ( Exception $e ) { #en caso de un error de red, de dns, de puerto van, asi mismo reglas de validacion del SDK #sin embargo una vez que validez tu logica las excepciones orginanidas por la validacion del SDK dejaran de ocurrir. echo "Exception: \ n " ; // Couldn't connect to server print_r ( $e ); } 9.4.5 Ejemplo con SDK de .NET El ejemplo para la descarga de CFDI utilizando el SDK de java se encuentra en la siguiente Tabla 82 : Tabla 82 . Ejemplo de Descarga de CFDI que ya están resguardados en ACI DescargaSAT con el SDK de .Net . var sdk = new DescargaSATSDK (); sdk . Token = token ; //se instancia objeto que permite que establecer los criterios de seleccion de CFDI var parameters = new ParametersDownloadCFDI (); //se establece el efecto parameters . EfectoCFDI = "N" ;

27. M ANUAL API ACI D ESCARGA SAT Página 27 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx 8.2.5 Ejemplo con SDK de .NET En la Tabla 35 se ejemplifica el consumo mediante el uso del SDK: Tabla 35 . Ejemplo con el SDK de .Net para la consulta de una descarga por UUID . var sdk = new DescargaSATSDK (); sdk . Token = token ; WsResponseMaster < DataDescargaProgramadaDetail > wsResponse = sdk . ObtenerDetalleDescarga ( descargaUUID ); if ( wsResponse . IsStatusSuccess ()) { DataDescargaProgramadaDetail data = wsResponse . Data ; Console . WriteLine ( data . Uuid ); Console . WriteLine ( data . FechaInicial ); Console . WriteLine ( data . FechaFinal ); Console . WriteLine ( data . Estado ); Console . WriteLine ( data . UltimaEjecucion ); Console . WriteLine ( data . FechaOrigenProgramacion ); if ( data . isEstadoCompletado ()) { //solicita la descarga de los cfdi en ese rango Console . WriteLine ( "Esta completo, solicitar CFDIs" ); } else if ( data . isEstadoEnProceso ()) { //hay que volver a consultar en X tiempo (se recoeminda cada hora o mas Console . WriteLine ( "En proceso" ); } else if ( data . isEstadoERROR ()) { //hubo un error Console . WriteLine ( "En Error" ); } else if ( data . isEstadoEsperando ()) { //aun no ha sido atentida Console . WriteLine ( "Esperando" ); } else if ( data . isEstadoBloqueado ()) { //ya no tienes mas folios en tu paquete Console . WriteLine ( "bloqueado, necesita reactivar paquete" ); } } else { if ( wsResponse . isNotFound ()) { Console . WriteLine ( string . Format ( "No se contro:{0}" , wsResponse . Code )); }

47. M ANUAL API ACI D ESCARGA SAT Página 47 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx { "uuid" : "608DAFBA - F4FA - 4A54 - B17D - XXXXXX " , "rfcEmisor" : " AAA010101AAA " , "rfcReceptor" : " AAA010101AAA " , "fechaDescarga" : "2018 - 10 - 01 16:37:29" , "total" : "561.17" , "fechaEmision" : "2017 - 12 - 30 12:03:56" , "pacquecertifico" : " AAA010101AAA " , "fechaCertificacion" : "2017 - 12 - 30 12:02:38" , "solicitadaMetodo" : "BOTH" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false }, { "uuid" : "ADFC60CE - 7338 - 4C3F - 90BD - XXXXX " , "rfcEmisor" : " AAA010101AAA " , "rfcReceptor" : " AAA010101AAA " , "fechaDescarga" : "2018 - 10 - 01 16:37:27" , "total" : "992.00" , "fechaEmision" : "2017 - 12 - 30 12:02:18" , "pacquecertifico" : " AAA010101AAA " , "fechaCertificacion" : "2017 - 12 - 30 12:00:59" , "solicitadaMetodo" : "BOTH" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false }, { "uuid" : "60010045 - 0D28 - 41DE - AB25 - XXXXX " , "rfcEmisor" : " AAA010101AAA " , "rfcReceptor" : " AAA010101AAA " , "fechaDescarga" : "2018 - 10 - 01 16:37:27" , "total" : "1,113.63" , "fechaEmision" : "2017 - 12 - 30 11:59:59" , "pacquecertifico" : " AAA010101AAA " , "fechaCertificacion" : "2017 - 12 - 30 11:58:40" , "solicitadaMetodo" : "BOTH" , "estado" : 1 , "efecto" : "I" , "disponibleXML" : true , "disponibleMETA" : false }

40. M ANUAL API ACI D ESCARGA SAT Página 40 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx Tabla 58 . Ejemplo con el SDK de .Net para la obtención de información de CFDI por UUID . var cli = new DescargaSATSDK (); //se establece el TOKEN cli . Token = token ; //se establece el uuid del CFDI, ws ResponseMaster contendra la respuesta y se parametriza el data de tipo CFDIModelAPI(ver referencia) WsResponseMaster < CFDIModelAPI > wsResponse = cli . ObtenerCFDIPorUUID ( cfdiUUID ); if ( wsResponse . IsStatusSuccess ()) { CFDIModelAPI cfdi = wsResponse . Data ; Console . WriteLine ( string . Format ( "UUID:{0}" , cfdi . Uuid )); Console . WriteLine ( string . Format ( "FechaEmision:{0}" , cfdi . FechaEmision )); Console . WriteLine ( string . Format ( "RfcEmisor:{0}" , cfdi . RfcEmisor )); Console . WriteLine ( string . Format ( "RfcReceptor:{0}" , cfdi . RfcReceptor )); Console . WriteLine ( string . Format ( "Total:{0}" , cfdi . Total )); Console . WriteLine ( string . Format ( "Efecto:{0}" , cfdi . Efecto )); Console . WriteLine ( string . Format ( "FechaCertificacion:{0}" , cfdi . FechaCertificacion )); Console . WriteLine ( string . Format ( "Pacquecertifico:{0}" , cfdi . Pacquecertifico )); if ( cfdi . EsSolicitadoPorXML () && cfdi . DisponibleXML ) { //si es true y no en cancelado se puede descargar. //invocar al metodo de descarga CFDI, o indicar en tu bd que esta registrado,etc: // ........... } else if ( cfdi . EsSolicitadoPorXML () && cfdi . DisponibleXML == false ) { //significa que el CFDI no ha sido descontado de tu paquete, por lo cual deberas comprar un paquete para poder descargarlo } else if ( cfdi . EsSolicitadoPorMeta ()) { //solo se tiene el meta del CFDI(es decir el resumen de datos), se debe solicitar la descarga de CFDI.(ver manual para entender mejor) } } else { if ( wsResponse . isNotFound ()) { //no existe el cfdi. Console . WriteLine ( "No existe el CFDI" ); } else { ///otro tipo de error:

50. M ANUAL API ACI D ESCARGA SAT Página 50 de 69 Marzo 2019 S OLUCIÓN I NTEGRAL DE F ACTURACIÓN E LECTRÓNICA E I NFORMÁTICA SIFEI S. A. DE C. V. Primera Privada de Oriente 17 No. 32, Col. Centro, Orizaba, Ver. CP 94300, Tel. (272) 726 - 6999 www.sifei.com.mx #offset indica a partir de que elemento se iniciara la busqueda de CFDI $params - > setOffset ( 10 ); #optionalmenete le pondemos indicar que sean de tipo nomina $params - > setEfectoCFDI ( "N" ); try { #le asignamos un uuid de la descarga a consultar. $response = $sdk - > BuscarCFDI ( $params ); if ( $response - > isSuccessful ()) { $body = $response - > getBody (); #si es succes entonces todo fue bien. if ( $body - > isStatusSuccess ()) { # data es un ojeto de tipo DataResponseCFDIConsulta $data = $body - > getData (); #count contiene el numero de elementos devueeltos, el lenght del array de CFDI echo "Numero de cfdi devuelt os: " . $data - > count . " \ n " ; # total es el numero total de CFDi que se encontraron, es un campo informativo echo "Total de resultados encontrados: " . $data - > total . " \ n " ; #si el arreglo es mayor a 0 entonnces lo recorremos if ( $data - > count > 0 ) { foreach ( $data - > cfdi as $cfdi ) { #cada elemento del arreglo es una clase CFDIModelAPI echo " ------------------------------------------------- \ n " ; echo "uuid: " . $cfdi - > uuid . " \ n " ; echo "rfcEmisor: " . $cfdi - > rfcEmisor . " \ n " ; echo "rfcReceptor: " . $cfdi - > rfcReceptor . " \ n " ; echo "fechaDescarga: " . $cfdi - > fechaDescarga . " \ n " ; echo "total: " . $cfdi - > total . " \ n " ; echo "fechaEmision: " . $cfdi - > fechaEmision . " \ n " ; echo "pacquecertifico: " . $cfdi - > pacquecertifico . " \ n " ; echo "fechaCertificacion: " . $cfdi - > fechaCertificacion . " \ n " ; echo "estado: " . $cfdi - > estado . " \ n " ; echo "efecto: " . $cfdi - > efecto . " \ n " ; } } } else { #error if ( $body - > isCodeNoEncontrado ()) { echo "No existe CFDI con el UUID " ; echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ; } else { #otro error: //consumo invalido, codigo y mensaje del API echo "codigo: " . $body - > getCode () . " \ n " ; echo "message: " . $body - > getMessage () . " \ n " ;

Vistas

  • 247 Vistas totales
  • 153 Vistas del sitio web
  • 94 Vistas incrustadas

Acciones

  • 0 Acciones Sociales
  • 0 Me gusta
  • 0 No me gusta
  • 0 Comentarios

Veces compartido

  • 0 Facebook
  • 0 Twitter
  • 0 LinkedIn
  • 0 Google+

Incrusta 1

  • 3 www.google.com