Welcome to Boletin.info   Click to listen highlighted text! Welcome to Boletin.info
Integración con la API FECR (Xalachi): pasos previos y “manos a la obra”

Antes de comenzar con el flujo técnico, necesitas contar con credenciales y llaves tanto de la empresa proveedora como del Ministerio de Hacienda. Aquí te dejo los pasos previos y luego, manos a la obra con ejemplos prácticos en Postman.

Pasos previos imprescindibles

  1. Contactar a la empresa (Xalachi/FECR): solicita la creación de tu usuario en la plataforma y obtén tu secret_key (asignado por la empresa). Este valor identifica tu integración y será requerido en las llamadas de la API.
  2. Credenciales y llaves de Hacienda: en el portal ATV gestiona tus usuarios/contraseñas. Descarga e instala tus llaves criptográficas (.p12/.pfx) y ten a mano el PIN del certificado; lo usarás para firmar los comprobantes.

Variables recomendadas en Postman (Environment):

  • base_url (ej. http://localhost:8078/cr_api-staging o tu URL pública)
  • secret_key
  • codigo_certificado (identificador que usa tu backend para el .p12/.pfx)
  • pin (PIN del certificado)
  • usuario_hacienda, contrasena_hacienda
  • client_id (api-stag en sandbox, api-prod en producción)
  • (opcionales durante el flujo) clave, consecutivo, comprobante_xml_base64, comprobante_xml_firmado_base64

Manos a la obra (ejemplos Postman)

Nota: Los ejemplos usan {{base_url}} y variables del Environment. Si tu backend WR (clásico) no usa la ruta /wr, ajusta la URL conforme a tu instalación.

1) Obtener Token (WR clásico)

Método: POST   URL: {{base_url}}/wr

Body → form-data

w=token
r=gettoken
grant_type=password
client_id={{client_id}}
username={{usuario_hacienda}}
password={{contrasena_hacienda}}

Respuesta esperada: JSON con access_token (vida ~300s) y refresh_token (~36000s).

2) Refresh Token (WR clásico)

Método: POST   URL: {{base_url}}/wr

Body → form-data

w=token
r=refresh
grant_type=refresh_token
client_id={{client_id}}
refresh_token={{refresh_token}}

3) Generar Clave y Consecutivo (WR clásico)

Método: POST   URL: {{base_url}}/wr

Body → form-data

w=clave
r=clave
tipoDocumento=FE
tipoCedula=fisico
cedula=105610581
codigoPais=506
consecutivo=0000000001
situacion=normal
codigoSeguridad=12345678
sucursal=001
terminal=00001

Respuesta esperada: clave (50) y consecutivo (20). Guarda estos valores en variables del Environment.

4) Generar XML (REST)

Método: POST   URL: {{base_url}}/xml_invoice

Body → form-data

secret_key={{secret_key}}
tipo_documento=FE
clave={{clave}}
consecutivo={{consecutivo}}
emisor_tipo=01
emisor_numero=105610581
fecha_emision=2025-09-15T10:00:00-06:00
detalle_json={"lineas":[{"cantidad":1,"unidadMedida":"Sp","detalle":"Servicio","precioUnitario":1000,"montoTotal":1000,"montoTotalLinea":1000}]}

Respuesta esperada: JSON con comprobante_xml (base64 sin firmar). Asignar a {{comprobante_xml_base64}}.

5) Firmar XML (REST)

Método: POST   URL: {{base_url}}/xml_sign

Body → form-data

secret_key={{secret_key}}
codigo_certificado={{codigo_certificado}}
pin={{pin}}
comprobante_xml={{comprobante_xml_base64}}

Respuesta esperada: JSON con comprobante_xml_firmado (base64). Asignar a {{comprobante_xml_firmado_base64}}.

6) Enviar a Hacienda (REST)

Método: POST   URL: {{base_url}}/send_hacienda

Body → form-data

secret_key={{secret_key}}
comprobante_xml_firmado={{comprobante_xml_firmado_base64}}

Respuesta esperada: MH debe aceptar el documento (normalmente HTTP 202) y devolver acuse. Si ves 403, revisa token/credenciales o reutilización de clave.

7) Consultar Estado (REST)

Método: GET   URL: {{base_url}}/consult_hacienda

Params o form-data (según tu backend):

secret_key={{secret_key}}
usuario_hacienda={{usuario_hacienda}}
contrasena_hacienda={{contrasena_hacienda}}
clave={{clave}}

Respuesta esperada: estado de la clave (procesando/aceptado/rechazado) y, cuando aplica, el XML respuesta de MH.


Buenas prácticas

  • Separa sandbox de producción usando dos Environments en Postman; cambia client_id (api-stag vs api-prod) y base_url según corresponda.
  • Resguarda tu secret_key, certificados y PIN. Usa variables de tipo “secret” en Postman cuando sea posible.
  • Versiona tus colecciones y guarda evidencias (respuestas MH) por cada envío.
Click to listen highlighted text!