npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

generacfdi

v1.2.5

Published

Facilita el consumo de servicios de timbrado de Real Virtual

Downloads

55

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

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.