
Product
Socket Now Protects the Chrome Extension Ecosystem
Socket is launching experimental protection for Chrome extensions, scanning for malware and risky permissions to prevent silent supply chain attacks.
Implementación de los accesos a las apis de afip para nodejs. En esta versión estan implementados
En el caso de encontrar un error, crear un issue en el sitio de seguimiento de errores
npm install -S afip-apis
Seguir los pasos en la documentación oficial:
En el diretorio test hay más ejemplos, incluyendo las pruebas de todos los metodos de los webservices de factura electrónica y factura electrónica de exportación.
Aunque hay algunos ejemplos en javascript, La mayoria de los ejemplos estan en Typescript
Ejemplo de autenticacion usando wsaa y consulta al metodo Dummy del servicio de facturación electrónica wsfev1 en javascript Antes de usar el ejemplo, tenes que tener generado un certificado, al menos de homologación. En el ejemplo el certificado y la clave estan en el path definido en DEFAULT_CERTIFICATE y DEFAULT_CERTIFICATE_KEY
"use strict";
var afip_apis_1 = require("afip-apis");
var DEFAULT_URLWSAAWSDL = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL";
var DEFAULT_SERVICIO = "wsfe";
var DEFAULT_CERTIFICATE = "./private/certificate/TEST/09.2021/afip-test.crt";
var DEFAULT_CERTIFICATE_KEY = "./private/certificate/TEST/09.2021/afip-test.key";
var loginTicket = new afip_apis_1.LoginTicket();
loginTicket.wsaaLogin(DEFAULT_SERVICIO, DEFAULT_URLWSAAWSDL, DEFAULT_CERTIFICATE, DEFAULT_CERTIFICATE_KEY)
.then(function (r) {
console.log(r.header);
var wsfev1 = new afip_apis_1.Wsfev1("https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL");
return wsfev1.FEDummy({})
.then(function (d) {
console.log(d);
});
})
.catch(function (e) { return console.error(e); });
A continuacion hay algunos ejemplos de uso en TypeScript
Ejemplo de autenticacion usando wsaa y consulta al metodo Dummy del servicio de facturación electrónica wsfev1 en typescript
import { LoginTicket, Wsfev1 } from "afip-apis";
const DEFAULT_URLWSAAWSDL: string = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL";
const DEFAULT_SERVICIO: string = "wsfe";
const DEFAULT_CERTIFICATE: string = "./private/certificate/TEST/09.2021/afip-test.crt";
const DEFAULT_CERTIFICATE_KEY: string = "./private/certificate/TEST/09.2021/afip-test.key";
const loginTicket: LoginTicket = new LoginTicket();
loginTicket.wsaaLogin(DEFAULT_SERVICIO, DEFAULT_URLWSAAWSDL, DEFAULT_CERTIFICATE, DEFAULT_CERTIFICATE_KEY)
.then(r => {
console.log(r.header);
const wsfev1: Wsfev1 = new Wsfev1("https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL");
return wsfev1.FEDummy({})
.then(d => {
console.log(d);
});
})
.catch(e => console.error(e));
en la consola se ve el resultado
{ source: 'CN=wsaahomo, O=AFIP, C=AR, SERIALNUMBER=CUIT 33693450239',
destination: 'SERIALNUMBER=CUIT 20999999999, CN=certificadodeprueba',
uniqueId: '308192521',
generationTime: '2018-09-21T10:51:22.653-03:00',
expirationTime: '2018-09-21T22:51:22.653-03:00' }
{ FEDummyResult: { AppServer: 'OK', DbServer: 'OK', AuthServer: 'OK' } }
con el encabezado del ticket de autenticación y el resultado del metodo FEDummy
en las constantes
const DEFAULT_CERTIFICATE: string = "./private/certificate/TEST/09.2021/afip-test.crt";
const DEFAULT_CERTIFICATE_KEY: string = "./private/certificate/TEST/09.2021/afip-test.key";
se incluye el path al certificado y la clave privada
Ejemplo de consulta de tipos de iva
const DEFAULT_CERTIFICATE: string = "./private/certificate/TEST/09.2021/afip-test.crt";
const DEFAULT_CERTIFICATE_KEY: string = "./private/certificate/TEST/09.2021/afip-test.key";
const loginTicket = new LoginTicket();
const wsfev1 = new Wsfev1(Wsfev1.testWSDL);
loginTicket.wsaaLogin(Wsfev1.serviceId, DEFAULT_URLWSAAWSDL, DEFAULT_CERTIFICATE, DEFAULT_CERTIFICATE_KEY)
.then(ticket => {
console.log("ticket:");
console.log(ticket.header);
wsfev1.FEDummy({})
.then(r => {
console.log("FEDummy:");
console.log(r);
return wsfev1.FEParamGetTiposIva({
Auth: {
Token: ticket.credentials.token,
Sign: ticket.credentials.sign,
Cuit: 20999999999
}
})
.then(r => {
console.log("FEParamGetTiposIva:");
if (r.FEParamGetTiposIvaResult.Errors) {
console.error(r.FEParamGetTiposIvaResult.Errors);
} else {
console.log(r.FEParamGetTiposIvaResult.ResultGet);
}
});
});
})
.catch(e => {
console.error(e);
});
resultado
ticket:
{ source: 'CN=wsaahomo, O=AFIP, C=AR, SERIALNUMBER=CUIT 33693450239',
destination: 'SERIALNUMBER=CUIT 20999999999, CN=certificadodeprueba',
uniqueId: '2894537894',
generationTime: '2018-09-21T15:30:27.045-03:00',
expirationTime: '2018-09-22T03:30:27.045-03:00' }
FEDummy:
{ FEDummyResult: { AppServer: 'OK', DbServer: 'OK', AuthServer: 'OK' } }
FEParamGetTiposIva:
{ IvaTipo:
[ { Id: '3', Desc: '0%', FchDesde: '20090220', FchHasta: 'NULL' },
{ Id: '4', Desc: '10.5%', FchDesde: '20090220', FchHasta: 'NULL' },
{ Id: '5', Desc: '21%', FchDesde: '20090220', FchHasta: 'NULL' },
{ Id: '6', Desc: '27%', FchDesde: '20090220', FchHasta: 'NULL' },
{ Id: '8', Desc: '5%', FchDesde: '20141020', FchHasta: 'NULL' },
{ Id: '9', Desc: '2.5%', FchDesde: '20141020', FchHasta: 'NULL' } ] }
El padrón de alcance 10 es de acceso restringido, y ha sido dado de baja en produción.
El siguiente código consulta el Padron de nivel 13
const DEFAULT_CERTIFICATE: string = "./private/certificate/TEST/09.2021/afip-test.crt";
const DEFAULT_CERTIFICATE_KEY: string = "./private/certificate/TEST/09.2021/afip-test.key";
const DEFAULT_URLWSAAWSDL: string = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL";
const loginTicket = new LoginTicket();
loginTicket.wsaaLogin(PersonaServiceA13.serviceId, DEFAULT_URLWSAAWSDL, DEFAULT_CERTIFICATE, DEFAULT_CERTIFICATE_KEY)
.then(ticket => {
console.log("=== ticket ===");
console.log(JSON.stringify(ticket));
const a13 = new PersonaServiceA13(PersonaServiceA13.testWSDL);
return a13.dummy({})
.then(r => {
console.log(`===dummy===\n${JSON.stringify(r)}`);
return a13.getIdPersonaListByDocumento({
token: ticket.credentials.token,
sign: ticket.credentials.sign,
cuitRepresentada,
documento
});
})
.then(id => {
console.log(`===getIdPersonaListByDocumento===\n${JSON.stringify(id)}`);
return a13.getPersona({
token: ticket.credentials.token,
sign: ticket.credentials.sign,
cuitRepresentada,
idPersona: id.idPersonaListReturn.idPersona
});
})
.then(p => {
console.log(`===getPersona===\n${JSON.stringify(p)}`);
console.log("=== FIN ===");
});
})
.catch(err => {
console.error(err);
});
En la consola se puede ver el resultado
===dummy===
{
"return": {
"appserver": "OK",
"authserver": "OK",
"dbserver": "OK"
}
}
===getIdPersonaListByDocumento===
{
"idPersonaListReturn": {
"idPersona": "20106316725",
"metadata": {
"fechaHora": "2019-11-07T17:12:01.770-03:00",
"servidor": "setiwsh1.afip.gov.ar"
}
}
}
===getPersona===
{
"personaReturn": {
"metadata": {
"fechaHora": "2019-11-07T17:12:02.031-03:00",
"servidor": "setiwsh1.afip.gov.ar"
},
"persona": {
"apellido": "BERNARD JAMES",
"descripcionActividadPrincipal": "SERVICIOS DE ASESORAMIENTO,DIRECCION Y GESTION EMPRESARIAL N.C.P.",
"domicilio": [
{
},
{
}
],
"estadoClave": "ACTIVO",
"fechaNacimiento": "1954-04-03T12:00:00-03:00",
"idActividadPrincipal": "741409",
"idPersona": "20106316725",
"mesCierre": "12",
"nombre": "JUAN ANGEL",
"numeroDocumento": "10631672",
"periodoActividadPrincipal": "201012",
"tipoClave": "CUIT",
"tipoDocumento": "DNI",
"tipoPersona": "FISICA"
}
}
}
=== FIN ===
Similar a ws_sr_padron_a10 WebService de Consulta a Padrón Alcance 10
El siguiente código consulta la validez de un comprobante
const DEFAULT_CERTIFICATE: string = "./private/certificate/TEST/09.2021/afip-test.crt";
const DEFAULT_CERTIFICATE_KEY: string = "./private/certificate/TEST/09.2021/afip-test.key";
const DEFAULT_URLWSAAWSDL: string = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL";
const loginTicket = new LoginTicket();
const wscdcv1 = new Wscdcv1(Wscdcv1.testWSDL);
loginTicket.wsaaLogin(Wscdcv1.serviceId, DEFAULT_URLWSAAWSDL, DEFAULT_CERTIFICATE, DEFAULT_CERTIFICATE_KEY)
.then(ticket => {
console.log("ticket:");
console.log(ticket.header);
return wscdcv1.ComprobanteConstatar({
Auth: {
Token: ticket.credentials.token,
Sign: ticket.credentials.sign,
Cuit: 20221536999
},
CmpReq: {
CbteModo: "CAE",
CuitEmisor: 30639453738,
PtoVta: 8340,
CbteTipo: 6,
CbteNro: 35100022,
CbteFch: "20181108",
ImpTotal: 127200,
CodAutorizacion: "68428424451327",
DocTipoReceptor: "96",
DocNroReceptor: "99777666"
}
})
.then(r => {
console.log("=== ComprobanteConstatar ===");
console.log(`resultado (A=Aprobado, R=Rechazado): ${r.ComprobanteConstatarResult.Resultado}. Observacion: ${JSON.stringify(r.ComprobanteConstatarResult.Observaciones)}`);
console.log("=== FIN ===");
});
})
.catch(e => {
console.error(e);
});
npm test
En el directorio test hay mas ejemplos incluidos pruebas de todos los metodos de los webservices de factura electrónica y factura electrónica de exportación.
FAQs
Integracion con webservices afip
The npm package afip-apis receives a total of 21 weekly downloads. As such, afip-apis popularity was classified as not popular.
We found that afip-apis demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket is launching experimental protection for Chrome extensions, scanning for malware and risky permissions to prevent silent supply chain attacks.
Product
Add secure dependency scanning to Claude Desktop with Socket MCP, a one-click extension that keeps your coding conversations safe from malicious packages.
Product
Socket now supports Scala and Kotlin, bringing AI-powered threat detection to JVM projects with easy manifest generation and fast, accurate scans.