🎯Instalacion
1 - Agregar la librería a tu proyecto
NPM
npm install --save @afipsdk/afip.js
Yarn
yarn add @afipsdk/afip.js
Composer
composer require afipsdk/afip.php
Manual
Clonarlo con
git clone
o descargar el repositorio desde aqui.Copiar el contenido de la carpeta
res
a tu aplicación.
Gemfile
gem 'afip.rb', '~> 1.0', '>= 1.0.1'
Gem
gem install afip.rb
PyPI
pip install afip.py
Dependiendo del lenguaje que utilices podes utilizar los métodos nativos para hacer llamadas a API's.
La URL base de la API es:
https://app.afipsdk.com/api/
El body de las peticiones es de tipo JSON.
Se debe agregar el header correspondiente:
Content-Type: application/json
2 - Incluir la librería en tu proyecto
const Afip = require('@afipsdk/afip.js');
Manual
include 'ruta/a/la/libreria/src/Afip.php';
Composer
require 'vendor/autoload.php';
use Afip;
require "afip"
from afip import Afip
No se requiere ninguna acción adicional.
3 - Crear una instancia clase Afip
const afip = new Afip({ CUIT: 20409378472 });
Para usar los web services de AFIP se require un certificado digital. Con Afip SDK podes integrarte en modo desarrollo usando el CUIT 20409378472 sin necesidad de obtener un certificado, para poder integrarte los mas rápido posible.
$afip = new Afip(array('CUIT' => 20409378472));
Para usar los web services de AFIP se require un certificado digital. Con Afip SDK podes integrarte en modo desarrollo usando el CUIT 20409378472 sin necesidad de obtener un certificado, para poder integrarte los mas rápido posible.
afip = Afip.new({ "CUIT": 20409378472 })
Para usar los web services de AFIP se require un certificado digital. Con Afip SDK podes integrarte en modo desarrollo usando el CUIT 20409378472 sin necesidad de obtener un certificado, para poder integrarte los mas rápido posible.
afip = Afip({ "CUIT": 20409378472 })
Para usar los web services de AFIP se require un certificado digital. Con Afip SDK podes integrarte en modo desarrollo usando el CUIT 20409378472 sin necesidad de obtener un certificado, para poder integrarte los mas rápido posible.
Al utilizar la API, antes de cada llamada a los web services debemos pedir la autorización llamando al siguiente endpoint:
Endpoint
POST
https://app.afipsdk.com/api/v1/afip/auth
Body
Nombre | Tipo | Valor |
---|---|---|
| string | Usar "dev" para ambiente de desarrollo o "prod" para producción |
| string | CUIT para el cual queremos obtener la autorización |
| string | ID del web service a utilizar |
| boolean |
|
| string | Certificado de AFIP |
| string | Key del certificado |
Para usar los web services de AFIP se require un certificado digital. Con Afip SDK podes integrarte en modo desarrollo usando el CUIT 20409378472 sin necesidad de obtener un certificado, para poder integrarte los mas rápido posible.
Ejemplo
{
"environment": "dev",
"tax_id": "20409378472",
"wsid": "wsfe"
}
Response
STATUS
200
{
"expiration": "2024-03-13T00:42:59.845Z",
"token": "PD94bWwgd...",
"sign": "kEaCwSs36hpe..."
}
token
y sign
corresponde a la autorización que nos da AFIP, debemos enviar estos datos en el body cada solicitud a los web services. Mas adelante, en el manual de cada web service veras donde colocarlo.
Eso es todo, ya podes comenzar a usar los web services de AFIP en tu proyecto.
(Opcional) Si querés usar tu propio certificado para desarrollo
Creamos el certificado
// CUIT al cual le queremos generar el certificado
const taxId = 201111111111;
// Usuario para ingresar a AFIP.
// Para la mayoria es el mismo CUIT, pero al administrar
// una sociedad el CUIT con el que se ingresa es el del administrador
// de la sociedad.
const username = '201111111111';
// Contraseña para ingresar a AFIP.
const password = 'contraseñadeafip';
// Alias para el certificado (Nombre para reconocerlo en AFIP)
// un alias puede tener muchos certificados, si estas renovando
// un certificado podes utilizar el mismo alias
const alias = 'afipsdk';
// Creamos una instancia de la libreria
const afip = new Afip({ CUIT: taxId });
// Creamos el certificado (¡Paciencia! Esto toma unos cuantos segundos)
const res = await afip.CreateCert(username, password, alias);
// Mostramos el certificado por pantalla
console.log(res.cert);
// Mostramos la key por pantalla
console.log(res.key);
// ATENCION! Recorda guardar el cert y key ya que
// la libreria por seguridad no los guarda, esto depende de vos.
// Si no lo guardas vas tener que generar uno nuevo con este metodo
// CUIT al cual le queremos generar el certificado
$tax_id = 201111111111;
// Usuario para ingresar a AFIP.
// Para la mayoria es el mismo CUIT, pero al administrar
// una sociedad el CUIT con el que se ingresa es el del administrador
// de la sociedad.
$username = '201111111111';
// Contraseña para ingresar a AFIP.
$password = 'contraseñadeafip';
// Alias para el certificado (Nombre para reconocerlo en AFIP)
// un alias puede tener muchos certificados, si estas renovando
// un certificado podes utilizar el mismo alias
$alias = 'afipsdk';
// Creamos una instancia de la libreria
$afip = new Afip(array('CUIT' => $tax_id ));
// Creamos el certificado (¡Paciencia! Esto toma unos cuantos segundos)
$res = $afip->CreateCert(username, password, alias);
// Mostramos el certificado por pantalla
var_dump($res->cert);
// Mostramos la key por pantalla
var_dump($res->key);
// ATENCION! Recorda guardar el cert y key ya que
// la libreria por seguridad no los guarda, esto depende de vos.
// Si no lo guardas vas tener que generar uno nuevo con este metodo
# CUIT al cual le queremos generar el certificado
tax_id = 201111111111
# Usuario para ingresar a AFIP.
# Para la mayoria es el mismo CUIT, pero al administrar
# una sociedad el CUIT con el que se ingresa es el del administrador
# de la sociedad.
username = "201111111111"
# Contraseña para ingresar a AFIP.
password = "contraseñadeafip"
# Alias para el certificado (Nombre para reconocerlo en AFIP)
# un alias puede tener muchos certificados, si estas renovando
# un certificado podes utilizar el mismo alias
cert_alias = "afipsdk"
# Creamos una instancia de la libreria
afip = Afip.new({"CUIT": tax_id})
# Creamos el certificado (¡Paciencia! Esto toma unos cuantos segundos)
res = afip.createCert(username, password, cert_alias)
# Mostramos el certificado por pantalla
puts res["cert"]
# Mostramos la key por pantalla
puts res["key"]
# ATENCION! Recorda guardar el cert y key ya que
# la libreria por seguridad no los guarda, esto depende de vos.
# Si no lo guardas vas tener que generar uno nuevo con este metodo
# CUIT al cual le queremos generar el certificado
tax_id = 201111111111
# Usuario para ingresar a AFIP.
# Para la mayoria es el mismo CUIT, pero al administrar
# una sociedad el CUIT con el que se ingresa es el del administrador
# de la sociedad.
username = "201111111111"
# Contraseña para ingresar a AFIP.
password = "contraseñadeafip"
# Alias para el certificado (Nombre para reconocerlo en AFIP)
# un alias puede tener muchos certificados, si estas renovando
# un certificado podes utilizar el mismo alias
cert_alias = "afipsdk"
# Creamos una instancia de la libreria
afip = Afip({"CUIT": tax_id})
# Creamos el certificado (¡Paciencia! Esto toma unos cuantos segundos)
res = afip.createCert(username, password, cert_alias)
# Mostramos el certificado por pantalla
print(res["cert"])
# Mostramos la key por pantalla
print(res["key"])
# ATENCION! Recorda guardar el cert y key ya que
# la libreria por seguridad no los guarda, esto depende de vos.
# Si no lo guardas vas tener que generar uno nuevo con este metodores
Endpoint
POST
https://app.afipsdk.com/api/v1/afip/certs
Body
Nombre | Tipo | Valor |
---|---|---|
| string | Usar "dev" para ambiente de desarrollo o "prod" para producción |
| string | CUIT al cual le queremos generar el certificado |
| string | Usuario para ingresar a AFIP. Para la mayoría es el mismo CUIT, pero al administrar una sociedad el CUIT con el que se ingresa es el del administrador de la sociedad. |
| string | Contraseña para ingresar a AFIP. |
| string | Alias para el certificado (Nombre para reconocerlo en AFIP), un alias puede tener muchos certificados, si estas renovando un certificado podes utilizar el mismo alias |
Ejemplo
{
"environment": "dev",
"tax_id": "11111111111",
"username": "11111111111",
"password": "aqui_la_contraseña",
"alias": "afipsdk"
}
Al crear el certificado nos devolverá un long_job_id
y su status
Response
{
"status": "in_process",
"long_job_id": "0d1e71e0-8882-4b14-b7f8-c5d716261760"
}
Ahora debemos agregarle el long_job_id
al body y llamar nuevamente al endpoint hasta que se cambie el status
{
"environment": "dev",
"tax_id": "11111111111",
"username": "11111111111",
"password": "aqui_la_contraseña",
"alias": "afipsdk",
"long_job_id": "0d1e71e0-8882-4b14-b7f8-c5d716261760"
}
La recomendación es intentar cada 5 segundos, suele tardar entre 15 y 60 segundos en estar listo, dependiendo de la congestion de AFIP.
STATUS
200
{
"status": "complete",
"data": {
"cert": "-----BEGIN CERTIFICATE-----\nMIIDRzC...",
"key": "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEowIBAAKCA..."
}
}
STATUS
400
{
"status": "error",
"data": {
"message":"Número de CUIL/CUIT incorrecto"
}
}
Lo agregamos en la nueva instancia de Afip
const fs = require('fs');
// Certificado (Puede estar guardado en archivos, DB, etc)
const cert = fs.readFileSync('./certificado.crt', {encoding: 'utf8'});
// Key (Puede estar guardado en archivos, DB, etc)
const key = fs.readFileSync('./key.key', {encoding: 'utf8'});
// Tu CUIT
const taxId = 20111111112;
const afip = new Afip({
CUIT: taxId,
cert: cert
key: key
});
// Certificado (Puede estar guardado en archivos, DB, etc)
$cert = file_get_contents('./certificado.crt');
// Key (Puede estar guardado en archivos, DB, etc)
$key = file_get_contents('./key.key');
// Tu CUIT
$tax_id = 20111111112;
$afip = new Afip(array(
'CUIT' => $tax_id,
'cert' => $cert,
'key' => $key
));
# Certificado (Puede estar guardado en archivos, DB, etc)
cert = File.read("./certificado.crt")
# Key (Puede estar guardado en archivos, DB, etc)
key = File.read("./key.key")
# Tu CUIT
tax_id = 20111111112
afip = Afip.new({
"CUIT": tax_id,
"cert": cert,
"key": key
))
# Certificado (Puede estar guardado en archivos, DB, etc)
cert = open("./certificado.crt").read()
# Key (Puede estar guardado en archivos, DB, etc)
key = open("./key.key").read()
# Tu CUIT
tax_id = 20111111112
afip = Afip({
"CUIT": tax_id,
"cert": cert,
"key": key
))
Al pedir la autorización agregamos cert
y key
en el body
POST
https://app.afipsdk.com/api/v1/afip/auth
{
"environment": "dev",
"tax_id": "20111111112",
"wsid": "wsfe",
"cert": "-----BEGIN CERTIFICATE-----\nMIIDRzC...",
"key": "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEowIBAAKCA..."
}
También podes optar por la opción de generar el certificado manualmente, de ser así podes hacerlo siguiendo el siguiente tutorial
📜Obtener certificado de testingÚltima actualización