# Descargar CFDI o CR #

Obtiene el Xml,el Xml y la representación impresa o únicamente la representación impresa de un CFDI o CR disponible en la plataforma de Induxsoft.

Este servicio requiere autenticación por usuario o por CTD (Cuenta de Transacciones Digitales)/CTI (Cuenta de Timbrado Induxsoft), por lo que deberá presentar el par de credenciales (usuario/contraseña) o un Id de sesión válido.

End point: https://factudesk.api.induxsoft.net/comprobantes/descargar/

Solicitud POST con usuario y contraseña
```
Method: POST
Content-Type: application/json;charset=utf-8
{
  "uid":"Id de usuario (correo o teléfono móvil)",
  "pwd":"Contraseña del usuario",
  "doc":"UUID del CFDI o Idd",
  "tpo":"cfdi/cr (opcional)",
  "res":"(Opcional) tipo de resultado deseado",
  "pln":"(Opcional) Identificador de plantilla de representación impresa",
  "nombre_archivo":"(Opcional) Nombre de los archivos entregados, sin extensión"
}
```
Solicitud POST con Id de sesión
```
Method: POST
Content-Type: application/json;charset=utf-8
{
  "ids":"Id de sesión válido",
  "doc":"UUID del CFDI o Idd",
  "tpo":"cfdi/cr (opcional)",
  "res":"(Opcional) tipo de resultado deseado",
  "pln":"(Opcional) Identificador de plantilla de representación impresa",
  "nombre_archivo":"(Opcional) Nombre de los archivos entregados, sin extensión"
}
```

Solicitud POST con cuenta de timbrado y contraseña
```
Method: POST
Content-Type: application/json;charset=utf-8
{
  "cti":"Cuenta de timbrado",
  "pwd":"Contraseña de la cuenta de timbrado",
  "doc":"UUID del CFDI o Idd",
  "tpo":"cfdi/cr (opcional)",
  "res":"(Opcional) tipo de resultado deseado",
  "pln":"(Opcional) Identificador de plantilla de representación impresa",
  "nombre_archivo":"(Opcional) Nombre de los archivos entregados, sin extensión"
}
```
Solicitud GET con Id de sesión
```
https://factudesk.api.induxsoft.net/comprobantes/descargar/?uid=id-de-usuario&pwd=contraseña&doc=uuid-o-idd&tpo=cfdi/cr&res=opc&pln=id-plantilla
```
Solicitud GET con usuario y contraseña
```
https://factudesk.api.induxsoft.net/comprobantes/descargar/?uid=id-de-usuario&pwd=contraseña&doc=uuid-o-idd&tpo=cfdi/cr&res=opc&pln=id-plantilla
```

Solicitud GET con cuenta de timbrado y contraseña
```
https://factudesk.api.induxsoft.net/comprobantes/descargar/?cti=cuenta-de-timbrado&pwd=contraseña-de-la-cuenta&doc=uuid-o-idd&tpo=cfdi/cr&res=opc&pln=id-plantilla
```
El parámetro ```doc``` será el UUID de un CFDI o una constancia de retención, si se requiere más de 1, deberán delimitarse por comas. Tratándose de descarga de más de un comprobante, únicamente se admitirán en ```res``` los valores: ziplnk y zipraw, siendo predeterminado ziplnk. El máximo de comprobantes a devolver será de 50.

El parámetro ```tpo``` indica el tipo de documento solicitado: cfdi-CFDI o cr-Constancia de retención, si se omite, se asume el valor cfdi como predeterminado.

Opciones para el parámetro res:
* xmllnk - Se obtendrá un enlace temporal al documento Xml del CFDI
* prnlnk - Se obtendrá un enlace temporal al documento (pdf) de la representación impresa
* ziplnk - Se obtendrá un enlace a un archivo zip que contiene tanto el xml como su representación impresa
* xmljsn - la respuesta será un objeto JSON con el Xml del CFDI como cadena JSON
* xmlb64 - (Valor predeterminado) la respuesta será un objeto JSON con el Xml del CFDI codificado como base 64 (Xml UTF-8 con BOM)
* xmltxt - El Xml del CFDI con encabezado HTTP ```Content-type: text/xml```
* xmlraw - El Xml del CFDI con encabezado HTTP ```Content-type: application/octet-stream```
* prnraw - El contenido de la representación impresa con encabezado HTTP ```Content-type: application/octet-stream```
* prnpdf - El contenido de la representación impresa con encabezado HTTP ```Content-type: application/pdf```
* zipraw - El contenido de un archivo Zip con el Xml del CFDI y su representación impresa con encabezado HTTP ```Content-type: application/octet-stream```
* links - Se obtendrá un enlace temporal por cada documento pdf, Xml y zip

Parámetro pln
Es una cadena que identifica una plantilla de generación de representación impresa previamente alojada y disponible en la plataforma, si se omite se aplicarán las reglas configuradas en el emisor de FactuDesk Web.

Parámetro nombre_archivo
(Opcional) Nombre, sin extensión, con el que se entregan los archivos del comprobante. Si se omite o queda vacío después de limpiarlo, se usa el UUID, como hasta ahora. Por ejemplo, con ```"nombre_archivo":"F1024"``` y ```res=zipraw``` se descarga ```F1024.zip``` con ```F1024.xml``` y ```F1024.pdf``` dentro.
* Cambia el nombre del archivo que se descarga con xmltxt, xmlraw, prnraw, prnpdf y zipraw, y el de los archivos dentro del zip con ziplnk y zipraw.
* No cambia los enlaces temporales (xmllnk, prnlnk, ziplnk y links): siguen nombrados con el UUID.
* No se aplica a la opción links ni cuando ```doc``` trae más de un comprobante.
* El nombre se limpia antes de usarlo: se quitan los caracteres ```/ \ < > : " | ? *```, los de control y las secuencias de puntos (```..```); se quitan los espacios y puntos del inicio y del final; se recorta a 80 caracteres, y a los nombres reservados de Windows (CON, PRN, AUX, NUL, COM1 a COM9, LPT1 a LPT9) se les antepone ```_```.
* Si el nombre lleva acentos u otros caracteres fuera de ASCII, el encabezado ```Content-Disposition``` incluye además ```filename*``` (RFC 6266) con el nombre completo.

### Respuesta exitosa ###

Para las opciones de resultado xmljsn y xmlb64:
```
Content-Type: application/json;charset=utf-8
{
  "success":true,
  "data": 
  {
  	"content":"El Xml del CFDI como una cadena o un byte array base 64"
  }
}
```

Para las opciones de resultado xmllnk, prnlnk y ziplnk:
```
Content-Type: application/json;charset=utf-8
{
  "success":true,
  "data": 
  {
  	"link":"Enlace temporal al archivo a descargar"
  }
}
```
Para la opción de resultado links:
```
Content-Type: application/json;charset=utf-8
{
  "success":true,
  "data": 
  {
  	"link_pdf":"Enlace temporal al archivo pdf del CFDI",
    "link_xml":"Enlace temporal al archivo xml del CFDI",
    "link_zip":"Enlace temporal al archivo zip, con la representación impresa del CFDI y el archivo xml"
  }
}
```

Para las opciones de resultado xmltxt, xmlraw, prnraw, prnpdf y zipraw:
Se inicia la descarga del contenido directamente (generalmente el navegador descargará o abrirá el archivo).

### Respuesta error ###
Para las opciones xmljsn, xmlb64, xmllnk, prnlnk y ziplnk la respuesta de error será igualmente un objeto JSON de la forma estándar:
```
Content-Type: application/json;charset=utf-8
{
	"success":false,
	"message":"Mensaje de error"
}
```
Para las opciones xmltxt, xmlraw, prnraw, prnpdf y zipraw en caso de error se devolverá una página Html con el mensaje correspondiente al usuario.

