Afip SDK
GitHubHomeComunidadBlog
  • 📖Documentación
  • Paso a paso
    • 🎯Instalacion
    • ☁️Web services
      • 💵Factura electrónica
        • Crear PDF
        • Código QR
        • Factura A
        • Factura B
        • Factura C
        • Factura de Crédito electrónica A
        • Factura de Crédito electrónica B
        • Factura de Crédito electrónica C
        • Nota de Crédito A
        • Nota de Crédito B
        • Nota de Crédito C
      • 📑Padrón de constancia de inscripción
      • 📑Padrón alcance 10
      • 📑Padrón alcance 13
      • 💸Factura MiPyME
      • 🔎Constatación de Comprobantes
      • ✉️Carta de Porte Electrónica
      • 🏨Comprobantes de Turismo
      • 💸Factura de Exportación
      • 🥩Remito cárnico
      • 🛠️Otro web service
    • 📚Tutoriales página de ARCA
      • 🔑Habilitar administrador de certificados de testing
      • 📜Obtener certificado de testing
      • ✅Autorizar web service de testing
      • 🔑Habilitar administrador de certificados de producción
      • 📜Obtener certificado de producción
      • ✅Autorizar web service de producción
      • 💳Crear punto de venta
      • 🤝Delegar web service
      • 👍Aceptar delegación de web service
    • ⚙️Otros métodos útiles
    • 🚀Ir a producción
  • Ayuda
    • ⁉️Preguntas frecuentes
    • 🐞Errores frecuentes
Con tecnología de GitBook
En esta página
  • Crear certificado
  • Autorizar web service
  • Obtener XML de la ultima solicitud realizada
  • Forzar la solicitud de un nuevo TA

¿Te fue útil?

  1. Paso a paso

Otros métodos útiles

Crear certificado

Podemos usar Afip SDK para crear certificados y evitar hacerlo de manera manual.

// CUIT al cual le queremos generar el certificado
const taxId = 201111111111; 

// Usuario para ingresar a ARCA.
// 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 ARCA.
const password = 'aqui_la_contraseña';

// Alias para el certificado (Nombre para reconocerlo en AFIP)
// un alias puede tener muchos certificados, si estas renovando
// un certificado pordes utilizar le 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

Si estás por crear un certificado para producción, ten en cuenta que deberás instanciar la librería en modo producción.

const afip = new Afip({ 
    CUIT: taxId,
    access_token: 'access_token obtenido en https://app.afipsdk.com/'
    production: true
});
// CUIT al cual le queremos generar el certificado
$tax_id = 201111111111; 

// Usuario para ingresar a ARCA.
// 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 ARCA.
$password = 'aqui_la_contraseña';

// Alias para el certificado (Nombre para reconocerlo en AFIP)
// un alias puede tener muchos certificados, si estas renovando
// un certificado pordes utilizar le 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

Si estás por crear un certificado para producción, ten en cuenta que deberás instanciar la librería en modo producción.

$afip = new Afip(array(
    'CUIT' => $tax_id,
    'access_token' => 'access_token obtenido en https://app.afipsdk.com/'
    'production' => TRUE
));
# CUIT al cual le queremos generar el certificado
tax_id = 201111111111

# Usuario para ingresar a ARCA.
# 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 ARCA.
password = "aqui_la_contraseña"

# Alias para el certificado (Nombre para reconocerlo en AFIP)
# un alias puede tener muchos certificados, si estas renovando
# un certificado pordes utilizar le 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

Si estás por crear un certificado para producción, ten en cuenta que deberás instanciar la librería en modo producción.

afip = Afip.new({
    "CUIT": tax_id,
    "access_token": "access_token obtenido en https://app.afipsdk.com/"
    "production": true
})
# CUIT al cual le queremos generar el certificado
tax_id = 201111111111

# Usuario para ingresar a ARCA.
# 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 ARCA.
password = "aqui_la_contraseña"

# Alias para el certificado (Nombre para reconocerlo en AFIP)
# un alias puede tener muchos certificados, si estas renovando
# un certificado pordes utilizar le 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 metodo

Si estás por crear un certificado para producción, ten en cuenta que deberás instanciar la librería en modo producción.

afip = Afip({
    "CUIT": tax_id,
    "access_token": "access_token obtenido en https://app.afipsdk.com/"
    "production": True
})

Endpoint

POST https://app.afipsdk.com/api/v1/afip/certs

Body

Nombre
Tipo
Valor

environment

string

Usar "dev" para ambiente de desarrollo o "prod" para producción

tax_id

string

CUIT al cual le queremos generar el certificado

username

string

Usuario para ingresar a ARCA 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.

password

string

Contraseña para ingresar a ARCA.

alias

string

Alias para el certificado (Nombre para reconocerlo en ARCA), un alias puede tener muchos certificados, si estas renovando un certificado podes utilizar el mismo alias

Authorization: Bearer AQUI_EL_ACCESS_TOKEN

Y en los requests cambiar el parámetro environment: prod

{
    "environment": "prod"
}

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 ARCA.

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"
    }
}

Autorizar web service

Una vez creado el certificado podemos usar Afip SDK para crearle autorizaciones a los web services

// CUIT al cual le queremos generar la autorización
const taxId = 201111111111; 

// Usuario para ingresar a ARCA.
// 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 ARCA.
const password = 'aqui_la_contraseña';

// Alias del certificado a autorizar (previamente creado)
const alias = 'afipsdk';

// Id del web service a autorizar
const wsid = 'wsfe';

// Creamos una instancia de la libreria
const afip = new Afip({ CUIT: taxId });

// Creamos la autorizacion (¡Paciencia! Esto toma unos cuantos segundos)
const res = await afip.CreateWSAuth(username, password, alias, wsid);

// Mostramos el resultado por pantalla
console.log(res);

Si estás por autorizar web service de producción, ten en cuenta que deberás instanciar la librería en modo producción.

$afip = new Afip(array(
    'CUIT' => $tax_id,
    'access_token' => 'access_token obtenido en https://app.afipsdk.com/'
    'production' => TRUE
));
// CUIT al cual le queremos generar la autorización
$tax_id = 201111111111; 

// Usuario para ingresar a ARCA.
// 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 ARCA.
$password = 'aqui_la_contraseña';

// Alias del certificado a autorizar (previamente creado)
$alias = 'afipsdk';

// Id del web service a autorizar
$wsid = 'wsfe';

// Creamos una instancia de la libreria
$afip = new Afip(array('CUIT' => $tax_id ));

// Creamos la autorizacion (¡Paciencia! Esto toma unos cuantos segundos)
$res = $afip->CreateWSAuth($username, $password, $alias, $wsid);

// Mostramos el resultado por pantalla
var_dump($res);

Si estás por autorizar web service de producción, ten en cuenta que deberás instanciar la librería en modo producción.

$afip = new Afip(array(
    'CUIT' => $tax_id,
    'access_token' => 'access_token obtenido en https://app.afipsdk.com/'
    'production' => TRUE
));
# CUIT al cual le queremos generar la autorización
tax_id = 201111111111

# Usuario para ingresar a ARCA.
# 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 ARCA.
password = "aqui_la_contraseña"

# Alias del certificado a autorizar (previamente creado)
cert_alias = "afipsdk"

# Id del web service a autorizar
wsid = "wsfe"

# Creamos una instancia de la libreria
afip = Afip.new({"CUIT": tax_id})

# Creamos la autorizacion (¡Paciencia! Esto toma unos cuantos segundos)
res = afip.createWSAuth(username, password, cert_alias, wsid)

# Mostramos el resultado por pantalla
puts res

Si estás por autorizar web service de producción, ten en cuenta que deberás instanciar la librería en modo producción.

afip = Afip.new({
    "CUIT": tax_id,
    "access_token": "access_token obtenido en https://app.afipsdk.com/"
    "production": true
})
# CUIT al cual le queremos generar la autorización
tax_id = 201111111111

# Usuario para ingresar a ARCA.
# 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 ARCA.
password = "aqui_la_contraseña"

# Alias del certificado a autorizar (previamente creado)
cert_alias = "afipsdk"

# Id del web service a autorizar
wsid = "wsfe"

# Creamos una instancia de la libreria
afip = Afip({"CUIT": tax_id})

# Creamos la autorizacion (¡Paciencia! Esto toma unos cuantos segundos)
res = afip.createWSAuth(username, password, cert_alias, wsid)

# Mostramos el resultado por pantalla
print(res)

Si estás por autorizar web service de producción, ten en cuenta que deberás instanciar la librería en modo producción.

afip = Afip({
    "CUIT": tax_id,
    "access_token": "access_token obtenido en https://app.afipsdk.com/"
    "production": True
})

Endpoint

POST https://app.afipsdk.com/api/v1/afip/ws-auths

Body

Nombre
Tipo
Valor

environment

string

Usar "dev" para ambiente de desarrollo o "prod" para producción

tax_id

string

CUIT al cual le queremos generar la autorización

username

string

Usuario para ingresar a ARCA. 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.

password

string

Contraseña para ingresar a ARCA.

alias

string

Alias del certificado a autorizar (previamente creado).

wsid

string

Id del web service a autorizar.

Authorization: Bearer AQUI_EL_ACCESS_TOKEN

Y en los requests cambiar el parámetro environment: prod

{
    "environment": "prod"
}

Ejemplo

{
    "environment": "dev",
    "tax_id": "11111111111",
    "username": "11111111111",
    "password": "aqui_la_contraseña",
    "alias": "afipsdk",
    "wsid": "wsfe"
}

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",
    "wsid": "wsfe",
    "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 ARCA.

STATUS 200

{
    "status": "complete",
    "data": {
        "status": "created"
    }
}

STATUS 400

{
    "status": "error",
    "data": {
        "statusCode": 400,
        "message": "No existe certificado con el alias afipsdk."
    }
}

Obtener XML de la ultima solicitud realizada

Hay momentos en los cuales obtenemos un error y no sabemos como resolverlo, lo que podemos hacer es enviar un correo a sri@arca.gob.ar explicando el problema y adjuntarles el XML de solicitud y respuesta que te dio el web service para que te den una respuesta. Con ese método obtenés dicho XML.

Recordá utilizar a este método luego de llamar al web service y no antes porque lo que te devuelve es el XML ultima solicitud.

const res = await afip.getLastRequestXML();

console.log(res);
$res = $afip->GetLastRequestXML();

var_dump($res);
res = afip.getLastRequestXML

puts res
res = afip.getLastRequestXML()

print(res)

Endpoint

GET https://app.afipsdk.com/api/v1/afip/requests/last-xml

Response

STATUS 200

{
    "request": "<?xml version=\"1.0\" encoding...",
    "response": "<soap:Envelope xmlns:soap=..."
}

Forzar la solicitud de un nuevo TA

Los TA (token authorization) son archivos de ARCA, manejados automáticamente por la Afip SDK, que contienen la información para poder comunicarse con los web services.

El TA dura 12hs y queda cacheado para no solicitarlo todo el tiempo, pero hay momentos en los cuales obtenemos un error y la forma de solucionarlo es descartando el TA actual. Con este método podes forzar a que se renueve.

En cualquier web service podes llamar al método getTokenAuthorization(true); . El parámetro true fuerza la renovación. Por ej:

const ta = await afip.ElectronicBilling.getTokenAuthorization(true);

console.log(ta);

En cualquier web service podes llamar al método GetTokenAuthorization(TRUE); . El parámetro true fuerza la renovación. Por ej:

$ta = $afip->ElectronicBilling->getTokenAuthorization(TRUE);

var_dump($ta);

En cualquier web service podes llamar al método getTokenAuthorization(true) . El parámetro true fuerza la renovación. Por ej:

ta = afip.ElectronicBilling.getTokenAuthorization(true)

puts ta

En cualquier web service podes llamar al método getTokenAuthorization(True) . El parámetro true fuerza la renovación. Por ej:

ta = afip.ElectronicBilling.getTokenAuthorization(True)

print(ta)

Al pedir la autorización debemos poner el parámetro force_create: true

Endpoint

POST https://app.afipsdk.com/api/v1/afip/auth

Ejemplo

{
    "environment": "dev",
    "tax_id": "20409378472",
    "wsid": "wsfe",
    "force_create": true
}

AnteriorAceptar delegación de web serviceSiguienteIr a producción

Última actualización hace 2 meses

¿Te fue útil?

Si estás por crear un certificado para producción, ten en cuenta que deberás agregar el access_token obtenido en al header de autorización

Si estás por autorizar web service de producción, ten en cuenta que deberás agregar el access_token obtenido en al header de autorización

⚙️
https://app.afipsdk.com/
https://app.afipsdk.com/