El presente manual tiene como objetivo dar a conocer el medio de integración desde una aplicación que soporte conexión mediante una API REST, con el servicio que ofrece la emisión y consulta de Documentos Tributarios Electrónicos (DTE) a través de Facturación.cl.
Para realizar la integración entre aplicaciones, se utiliza una API basada en el estilo REST, en la que las solicitudes y respuestas se intercambian en formato JSON sobre el protocolo HTTP.
Una API REST permite que distintos programas, desarrollados en diferentes lenguajes de programación y ejecutándose en diversas plataformas, puedan interactuar entre sí mediante solicitudes HTTP estándar (GET, POST) e intercambio de datos en formato JSON.
Al estar basada en estándares abiertos (HTTP y JSON), existen múltiples clientes y librerías disponibles para la mayoría de las plataformas y lenguajes de programación que permiten hacer uso de la API, sin requerir herramientas especializadas.
A continuación, se presenta un listado de algunas de las herramientas y librerías que permiten realizar la integración con el servicio:
| Plataforma | Lenguaje | Nombre | Uso |
|---|---|---|---|
| Multiplataforma | - | Postman / Insomnia | Pruebas manuales de los endpoints |
| Multiplataforma | PHP | Guzzle / cURL | Consumo de servicios HTTP/JSON |
| Multiplataforma | JavaScript | fetch / axios | Consumo de servicios HTTP/JSON |
| Multiplataforma | Python | requests | Consumo de servicios HTTP/JSON |
| Microsoft Windows | C#, VB.Net | HttpClient | Consumo de servicios HTTP/JSON |
| Multiplataforma | Java | HttpClient / OkHttp | Consumo de servicios HTTP/JSON |
Para acceder a la API REST debe utilizar como base la URL rest.facturacion.cl, seguida del recurso correspondiente:
https://rest.facturacion.cl/login
https://rest.facturacion.cl/wsds/procesar
https://rest.facturacion.cl/wsds/obtenerlink
https://rest.facturacion.cl/wsds/obtenerpdf
https://rest.facturacion.cl/wsds/getticket
https://rest.facturacion.cl/wsds/version
- El primer paso consiste en construir el archivo de Integración, el cual será necesario para la emisión y generación de los Documentos Tributarios Electrónicos.
Actualmente se dispone de dos formatos, para los cuales existe documentación respectiva a fin de crearlos basados en ciertas estructuras de información:
Estos archivos deberán contener la información del documento a generar (Factura Electrónica, Guía de Despacho Electrónica, Nota de Crédito Electrónica, Nota de Débito Electrónica, etc.). Para más información respecto de los formatos de dichos archivos, se pueden consultar los manuales correspondientes de Facturación.cl.
- El segundo paso consiste en enviar dicho archivo al endpoint /wsds/procesar de la API, previa autenticación.
- El tercer paso y final consiste en obtener la representación impresa del documento tributario ya generado, en formato PDF o en los datos requeridos para impresión térmica.
La información sensible o binaria debe ser enviada de manera codificada utilizando el formato de codificación Base64, el cual es un estándar disponible en múltiples lenguajes de programación.
En los casos en que se indique Codificado, tanto en los datos enviados como en los recibidos, se debe utilizar dicho algoritmo.
Para hacer uso del servicio, es necesario autenticarse mediante el endpoint POST /login, indicando las credenciales de acceso entregadas al inicio del proceso de integración, las que variarán dependiendo si se está en ambiente de pruebas o producción.
Como resultado de una autenticación exitosa, se obtiene un token de acceso que debe incluirse en cada petición posterior a los métodos protegidos, dentro de la cabecera Authorization.
| Clase: credenciales de acceso | ||
|---|---|---|
| Campo | Descripción | Obligatorio |
| usuario | Corresponde al nombre del usuario. | SI |
| rut | Corresponde al identificador (RUT) de su empresa. | SI |
| clave | Clave asignada a su empresa para este servicio. | SI |
|
Solicitud POST /login
Content-Type: application/json
{
"usuario": "desisws",
"rut": "11111111-1",
"clave": "123456xx"
}
|
|
Respuesta exitosa {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....."
}
|
Uso del token
El token debe incluirse en cada petición a los métodos protegidos, con el siguiente formato de cabecera:
Authorization: <token>
Nota:
El token tiene una vigencia de 24 horas. Transcurrido ese plazo, se debe solicitar uno nuevo mediante /login.
La API posee varios métodos (endpoints) los cuales es posible consumir mediante cualquier cliente HTTP, por lo que se entrega a continuación una breve descripción de los que se utilizarán en la integración.
| Método: | GET /wsds/procesar | ||
|---|---|---|---|
| Descripción: | |||
| Permite procesar el archivo de Integración y generar el DTE (Documento Tributario Electrónico). | |||
| Parámetro | Descripción | Codificado | Obligatorio |
| file | Archivo a procesar. | SI | SI |
| formato | Corresponde al tipo de archivo enviado: 1 = Archivo de texto / 2 = Archivo XML. | - | SI |
| incluyelink | Indica si se deben incluir en la respuesta los links de impresión (Original y Cedible si aplica). | - | NO |
| Respuesta: | |||
| Retorna un JSON con la información de resultado del archivo procesado. | |||
| Método: | GET /wsds/obtenerlink | |
|---|---|---|
| Descripción: | ||
| Obtiene el link de descarga del Documento Tributario una vez que este ha sido generado. | ||
| Parámetro | Descripción | Obligatorio |
| tpomov | Corresponde al tipo de movimiento asociado al documento enviado: C = Compra / V = Venta / B = Boleta. | SI |
| folio | Corresponde al número de Folio del Documento. | SI |
| tipo | Corresponde al Tipo de Documento (Tipo DTE). | SI |
| cedible | Indica si se obtendrá la copia cedible del PDF. true = copia Cedible / false = copia Original. | NO |
| Respuesta: | ||
| Retorna un JSON con el link de descarga codificado en Base64. | ||
| Método: | GET /wsds/obtenerpdf | |
|---|---|---|
| Descripción: | ||
| Obtiene el archivo PDF y/o su contenido en Base64 de un documento ya emitido. | ||
| Parámetro | Descripción | Obligatorio |
| tpomov | Corresponde al tipo de movimiento asociado al documento enviado: C = Compra / V = Venta / B = Boleta. | SI |
| folio | Corresponde al número de Folio del Documento. | SI |
| tipo | Corresponde al Tipo de Documento (Tipo DTE). | SI |
| cedible | Indica si se obtendrá la copia cedible del PDF. true = copia Cedible / false = copia Original. | NO |
| pdfbase64 | Indica el formato de respuesta: 0 = Archivo PDF (link). 1 = Contenido del PDF en Base64. 2 = Ambos. | NO |
| Respuesta: | ||
| Retorna un JSON con la información del documento solicitado. | ||
| Método: | GET /wsds/version |
|---|---|
| Descripción: | |
| Se utiliza para verificar la disponibilidad y versión del servicio. | |
| Parámetro | |
| No posee parámetros. | |
| Respuesta: | |
| Retorna un JSON con el número de versión. | |
| Método: | GET /wsds/getticket | |
|---|---|---|
| Descripción: | ||
| Obtiene los datos necesarios para poder generar la salida de impresión de una Boleta o Factura Electrónica emitida en formato Ticket Térmico. | ||
| Parámetro | Descripción | Obligatorio |
| folio | Corresponde al número de Folio del Documento. | SI |
| tipo | Corresponde al Tipo de Documento (Tipo DTE). | SI |
| Respuesta: | ||
| Retorna un JSON con la información necesaria para ser enviada a la salida de impresión térmica. | ||
En el siguiente ejemplo, se muestra la manera de autenticarse y procesar el archivo de integración utilizando cURL desde la línea de comandos.
|
# 1. Autenticación
/* 1. Autenticación mediante cURL */
curl -X POST https://rest.facturacion.cl/login \
-H "Content-Type: application/json" \
-d '{"usuario":"desisws","rut": "11111111-1","clave":"123456xx"}'
/* 2. Procesar archivo de integracion (usando el token obtenido) */
curl -X GET "https://rest.facturacion.cl/wsds/procesar?file=<archivo_base64>&formato=1" \
-H "Authorization: <token>"
|
|
/* Ejemplo utilizando JavaScript con la API fetch */
const login = await fetch('https://rest.facturacion.cl/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ usuario: 'desisws', "rut": "11111111-1", clave: '123456xx' })
}).then(r => r.json());
const resultado = await fetch(
`https://rest.facturacion.cl/wsds/procesar?file=${archivoBase64}&formato=1`,
{ headers: { Authorization: login.token } }
).then(r => r.json());
console.log(resultado);
|
|
<?php
/* Ejemplo utilizando PHP con cURL */
$loginPayload = json_encode([
"usuario" => "desisws",
"rut" => "11111111-1",
"clave" => "123456xx"
]);
$ch = curl_init("https://rest.facturacion.cl/login");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $loginPayload);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$login = json_decode(curl_exec($ch), true);
$archivoBase64 = base64_encode(file_get_contents("integracion.txt"));
$ch2 = curl_init("https://rest.facturacion.cl/wsds/procesar?file=$archivoBase64&formato=1");
curl_setopt($ch2, CURLOPT_HTTPHEADER, ["Authorization: " . $login['token']]);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
$resultado = json_decode(curl_exec($ch2), true);
print_r($resultado);
?>
|
|
# Ejemplo utilizando Python con la librería requests
import requests, base64
login = requests.post("https://rest.facturacion.cl/login", json={
"usuario": "desisws", "rut": "11111111-1", "clave": "123456xx"
}).json()
with open("integracion.txt", "rb") as f:
archivo_base64 = base64.b64encode(f.read()).decode()
resultado = requests.get(
"https://rest.facturacion.cl/wsds/procesar",
params={"file": archivo_base64, "formato": 1},
headers={"Authorization": login["token"]}
).json()
print(resultado)
|
El método /wsds/procesar retorna como respuesta un JSON con la información del resultado del o los documentos procesados.
|
Ejemplo de proceso exitoso:
|
|
Ejemplo de proceso con errores:
|
Al consumir el método /wsds/obtenerlink, se retornará como respuesta un JSON que contendrá el link de descarga del documento electrónico en formato PDF, codificado en Base64, por lo cual deberá ser decodificado.
|
Ejemplo de resultado Obtener Link:
|
Una vez decodificado, se obtendrá un link similar al siguiente:
https://www.facturacion.cl/sistema/descargar.php?p1=c25c0fc9eb&p2=GDI&m=V&i&c=false
Desde dicho link, el cliente podrá descargar el archivo PDF del documento electrónico.
Al consumir el método /wsds/version, puede verificar que el servicio se encuentra disponible.
Ejemplo de resultado Versión:
{ "version": "x.x.x.x" }
Consiste en un formato ticket de documento electrónico, desarrollado sin incluir logotipo, siendo la mejor alternativa en velocidad y bajo consumo de insumos de impresión, el cual requiere de una impresora térmica con capacidades gráficas con cabezal de entre 3 y 4 pulgadas.
Para acceder a este formato, la empresa debe contar con los módulos de ticket térmico (FETICKET y BETICKET) correspondientes a factura y boleta térmica contratados en Facturación.cl.
Con la impresión térmica puede integrar y controlar el proceso de impresión enviando los datos directamente a una impresora compatible con el lenguaje de impresión POS/ESC, consumiendo el método /wsds/getticket, indicando el folio y tipo de documento de la boleta o factura que desea imprimir.
Ej: Boleta Electrónica Afecta, Folio 100 ? parámetros tipo=39, folio=100.
Al ejecutar la llamada, retornará un JSON con los datos del ticket a imprimir de la siguiente forma:
|
Las tres variables retornadas (Head, Foot y TED) contienen su data codificada en Base64. Tras ser decodificadas, cada una contiene la siguiente información:
| Campo | Contenido |
|---|---|
| Head | Encabezado del ticket (Formato: POS/ESC). |
| TED | Timbre Fiscal (Formato: RAW). Debe ser impreso como código bidimensional PDF417. |
| Foot | Pie de página del ticket (Formato: POS/ESC). |
Las siguientes modalidades de impresión, provistas por Facturación.cl, permiten incorporar la impresión de ticket utilizando un componente preconstruido, minimizando el desarrollo a realizar por el consumidor de la API.
Debe consumir el endpoint /wsds/getticket y obtener los datos de la boleta. Luego, desde su aplicación, realice una llamada por línea de comando a la librería de impresión provista por Facturación.cl, pasando como parámetros el nombre de la impresora local y las variables Head, Foot y TED tal como se reciben en la respuesta, sin decodificar.
Si su aplicación es una página web y desea incorporar la impresión térmica en ella, debe realizarlo mediante la llamada a una página que incrustará en su sitio el componente de impresión provisto por Facturación.cl, indicando los siguientes parámetros:
| Campo | Descripción |
|---|---|
| chk | Identificador de validación proporcionado por Facturación.cl (único y fijo). |
| i | Nombre de la impresora, codificado en Base64. |
| t | Tipo de documento (39: Boleta Electrónica / 41: Boleta No Afecta o Exenta Electrónica). |
| f | Folio de la Boleta a imprimir. |
La forma recomendada de incorporar este componente es mediante un iframe cuyo src se asocia dinámicamente a la URL del componente de impresión.