⚙️Otros métodos útiles
Crear certificado
Podemos usar Afip SDK para crear certificados y evitar hacerlo de manera manual (ya que es tedioso y puede tener errores humanos)
// 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 pordes utilizar le mismo alias
const alias = 'afipsdk';
// 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
// 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 pordes utilizar le mismo alias
$alias = 'afipsdk';
// 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
# 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 pordes utilizar le mismo alias
cert_alias = "afipsdk"
# 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
# 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 pordes utilizar le mismo alias
cert_alias = "afipsdk"
# 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
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"
}
}
Autorizar web service
Una vez creado el certificado podemos usar Afip SDK para crearle autorizaciones a web services
// CUIT al cual le queremos generar la autorización
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 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);
// CUIT al cual le queremos generar la autorización
$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 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);
# CUIT al cual le queremos generar la autorización
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 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
# CUIT al cual le queremos generar la autorización
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 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)
Endpoint
POST
https://app.afipsdk.com/api/v1/afip/ws-auths
Body
Nombre | Tipo | Valor |
---|---|---|
| string | Usar "dev" para ambiente de desarrollo o "prod" para producción |
| string | CUIT al cual le queremos generar la autorización |
| 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 del certificado a autorizar (previamente creado). |
| string | Id del web service a autorizar. |
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 AFIP.
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@afip.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 AFIP, manejados automáticamente por la librería, 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
}
Última actualización