generacfdi
v1.2.5
Published
Facilita el consumo de servicios de timbrado de Real Virtual
Downloads
374
Readme
GeneraCFDI
The documentation for this package is in Latin American Spanish, as it is destined for developers looking to integrate a fiscal stamping service in Mexico.
Diseñado para integraciones front-end y back-end, para facilitar el consumo de servicio de timbrado de CFDI, incluye funciones para timbrar un XML generado por tu aplicacion, crear un xml por medio de un layout, cancelar un CFDI, generar pdf, consultar el estatus de un CFDI, entre otras funcionalidades. Compatible con CommonJS y ES Modules.
Este es el paquete npm oficial de https://realvirtual.com.mx/
Somos de los primeros en ofrecer servicios de timbrado en npmjs
Tabla de contenido
- Instalación
- Primeros pasos
- Ejemplo rápido para timbrado en modo pruebas
- Funciones disponibles
- Sección de ayuda
Instalación
npm install generacfdi
Primeros pasos
Importar
Dependiendo del entorno en el que estés trabajando, puedes importar el paquete de las siguientes maneras:
- Importando el módulo completo
//ES Modules
import generacfdi from 'generacfdi';
//Common JS
const generacfdi = require('generacfdi');
- Importando funciones específicas del módulo
//ES Modules
import { GetTicket } from 'generacfdi';
//Common JS
const { GetTicket } = require('generacfdi');
Uso
Actualmente todas las funciones del paquete utilizan axios para realizar solicitudes HTTP a nuestra API que consume los servicios de timbrado. Se recomienda el uso de await al llamar estas funciones para garantizar que la promesa se resuelva antes de continuar, asegurando así la correcta obtención de datos antes de seguir con la ejecución del código.
Si importaste el módulo completo:
const respuesta = await generacfdi.GetTicket('user', 'pass', 'cfdiBase64');
Si importaste una función en específico:
const respuesta = await GetTicket('user', 'pass', 'cfdiBase64');
Importar el módulo completo puede ser útil si en un mismo archivo requieres llamar varias funciones, de lo contrario es mejor optar en importar solo la función a utilizar.
Requisitos producción
- Certificado de Sello Digital (CSD) VIGENTE
- Archivos .cer y .key
- Clave de la llave privada
- Tener contratado un plan de timbres con RealVirtual
- Credenciales de timbrado
NOTA:
Los archivos .cer y .key de la FIEL no funcionan para el servicio de timbrado, estos tienen que ser de tipo CSD.
Para usar las funciones de timbrado en producción es necesario contar con un usuario y contraseña. Puedes crear una cuenta gratuita y obtener tus credenciales de timbrado en https://realvirtual.com.mx/
Requisitos pruebas
Si deseas probar las funciones de timbrado en pruebas puedes usar las credenciales del usuario de prueba. Estas credenciales pueden usarse sin necesidad de ningún tipo de registro para que pruebes el funcionamiento del paquete.
- usuario: fgomez
- contraseña: 12121212
- RFC: XIA190128J61
- Razon Social: XENON INDUSTRIAL ARTICLES
Puedes encontrar los sellos de prueba en la carpeta 'test' que se encuentra dentro del paquete:
- Certificado Emisor: Pruebas.cer
- Llave Privada Emisor: Pruebas.key
- Clave Llave Privada: 12345678a
Ejemplo rápido para timbrado en modo pruebas
A continuación proporcionamos los siguientes ejemplos para ReactJS, VanillaJS, NodeJS, usando la función TestCfd33 la cuál es la que realiza el timbrado en pruebas de CFDI 4.0:
ReactJS
import React, { useState } from 'react';
import { TestCfd33 } from 'generacfdi';
const Stamping = () => {
const [response, setResponse] = useState(null);
const clickTimbrar = async () => {
const strUserName = 'fgomez';
const strPassword = '12121212';
const base64Cfd = ''; // Tu XML en base 64
try {
const resTestCfd33 = await TestCfd33(strUserName, strPassword, base64Cfd);
console.log('Respuesta:', resTestCfd33.data);
setResponse(resTestCfd33.data);
}
catch (error) {
const mensaje = `Error no controlado: ${error.message}`;
console.error(mensaje);
setResponse({
status: "ERROR",
error: mensaje,
});
}
};
return (
<div>
<button onClick={clickTimbrar}>Timbrar</button>
<div>
<pre>
{response ? JSON.stringify(response, null, 2) : 'Sin respuesta aún'}
</pre>
</div>
</div>
);
};
export default Stamping;
VanillaJS
import { TestCfd33 } from 'generacfdi';
document.getElementById('submitButton').addEventListener('click', async () => {
const strUserName = 'fgomez';
const strPassword = '12121212';
const base64Cfd = ''; // Tu XML en base 64
try {
const resTestCfd33 = await TestCfd33(strUserName, strPassword, base64Cfd);
document.getElementById('response').innerText = JSON.stringify(resTestCfd33.data, null, 2);
} catch (error) {
console.error('Error:', error);
document.getElementById('response').innerText = `Error: ${error.message}`;
}
});
NodeJS
const { TestCfd33 } = require('generacfdi');
(async function timbrarCfdi() {
try {
const strUserName = 'fgomez';
const strPassword = '12121212';
const base64Cfd = '';
const resTestCfd33 = await TestCfd33(strUserName, strPassword, base64Cfd);
console.log('Respuesta:', resTestCfd33.data);
}
catch (error) {
const mensaje = `Error no controlado: ${error.message}`;
console.error({
status: "ERROR",
error: mensaje
});
}
})();
NodeJS usando router
const router = require("express").Router();
const { TestCfd33 } = require('generacfdi');
router.post("/", function(req, res) {
(async function timbrarCfdi() {
try{
const { strUserName, strPassword, base64Cfd } = req.body;
const resTestCfd33 = await TestCfd33(strUserName, strPassword, base64Cfd);
return res.status(resTestCfd33.status).json(resTestCfd33.data);
}
catch(error)
{
const mensaje = `Error no controlado: ${error.message}`;
return res.status(500).json({
status : "ERROR",
error : mensaje
});
}
})();
});
module.exports = router;
Funciones disponibles
A continuación mostraremos el listado completo de las funciones incluídas en este paquete:
TestCfd33
Obtiene el timbre, regresa el timbre y el cfdi en ambiente de pruebas
Parámetros:
| Parámetro | Tipo | |--------------------|-----------| | strUserName | string | | strPassword | string | | base64Cfd | string |
Respuesta:
Devuelve una promesa con la respuesta de Axios
{
data: { /* Respuesta del servidor */ },
status: /* HTTP Status */,
}
Sección de ayuda
Preguntas frecuentes
¿Que es el strUserName y strPassword?
Son las credenciales de timbrado que se te asignan cuando creas una cuenta y son necesarias para consumir ciertas funciones del timbrado productivo.
Problemas comunes
Notas importantes
- No es necesario instalar axios ya que viene incluido en el paquete.