You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ejemplo de Uso de Interface COM con Web Services AFIP (PyAfipWs)
Autor original WSFE: 2009 (C) Mariano Reingart [email protected]
Adaptado para WSFEv1: 2015 (C) Rodrigo Iniguez [email protected]
Licencia: GPLv3+
program consola;
{$APPTYPE CONSOLE}
uses
ActiveX,
ComObj,
Dialogs,
SysUtils;
begin
CoInitialize(nil);
// Crear objeto interface Web Service Autenticación y Autorización
WSAA := CreateOleObject('WSAA') ;
// Generar un Ticket de Requerimiento de Acceso (TRA)
tra := WSAA.CreateTRA;
WriteLn(tra);
// Especificar la ubicacion de los archivos certificado y clave privada
path := GetCurrentDir + '';
// Certificado: certificado es el firmado por la AFIP
// ClavePrivada: la clave privada usada para crear el certificado
Certificado := 'reingart.crt'; // certificado de prueba
ClavePrivada := 'reingart.key'; // clave privada de prueba' +
// Generar el mensaje firmado (CMS)
cms := WSAA.SignTRA(tra, Path + Certificado, Path + ClavePrivada);
WriteLn(cms);
// Llamar al web service para autenticar:
ta := WSAA.CallWSAA(cms, 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms'); // Hologación
//ta = WSAA.CallWSAA(cms, 'https://wsaa.afip.gov.ar/ws/services/LoginCms'); // Producción
// Imprimir el ticket de acceso, ToKen y Sign de autorización
WriteLn(ta);
showmessage(ta);
WriteLn('Token:' + WSAA.Token);
WriteLn('Sign:' + WSAA.Sign);
// Una vez obtenido, se puede usar el mismo token y sign por 6 horas
// (este período se puede cambiar)
// Crear objeto interface Web Service de Factura Electrónica
// Setear tocken y sing de autorización (pasos previos)
WSFEv1.Token := WSAA.Token;
WSFEv1.Sign := WSAA.Sign;
// CUIT del emisor (debe estar registrado en la AFIP)
WSFEv1.Cuit := '20267565393';
WSFEv1.LanzarExcepciones := False;
// Conectar al Servicio Web de Facturación
ok := WSFEv1.Conectar(cache, url_wsdl, proxy); // homologación
//ok := WSFE.Conectar('https://wsw.afip.gov.ar/wsfe/service.asmx'); // producción
// Llamo a un servicio nulo, para obtener el estado del servidor (opcional)
WSFEv1.Dummy;
WriteLn('appserver status ' + WSFEv1.AppServerStatus);
WriteLn('dbserver status ' + WSFEv1.DbServerStatus);
WriteLn('authserver status ' + WSFEv1.AuthServerStatus);
// Recupera cantidad máxima de registros (opcional)
//qty := WSFE.RecuperarQty;
// Recupera último número de secuencia ID
//LastId := WSFEv1.RecuperaLastCMP();
// Recupero último número de comprobante para un punto de venta y tipo (opcional)
// Fechas del período del servicio facturado (solo si presta_serv = 1)
fecha_serv_desde := Fecha; fecha_serv_hasta := Fecha;
// Llamo al WebService de Autorización para obtener el CAE
ok := WSFEv1.CrearFactura ( presta_serv,
tipo_doc, nro_doc, tipo_cbte, punto_vta,
cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto,
impto_liq, impto_liq_rni, imp_op_ex, fecha_cbte, fecha_venc_pago,
fecha_serv_desde, fecha_serv_hasta,moneda_id,moneda_ctz ); // si presta_serv = 0 no pasar estas fechas
//Agrego tasas de IVA
id := 5 ; // 21%
base_imp := '100.00';
importe := '21.00';
ok := WSFEv1.AgregarIva(id, base_imp, importe) ;
{If tipo_cbte = 1 Then // solo para facturas A
begin
ok := WSFEv1.AgregarOpcional(5, '02'); // IVA Excepciones (01: Locador/Prestador, 02: Conferencias, 03: RG 74, 04: Bienes de cambio, 05: Ropa de trabajo, 06: Intermediario).
ok := WSFEv1.AgregarOpcional(61, '80'); // Firmante Doc Tipo (80: CUIT, 96: DNI, etc.)
ok := WSFEv1.AgregarOpcional(62, '20267565393'); // Firmante Doc Nro
ok := WSFEv1.AgregarOpcional(7, '01'); // Car?er del Firmante (01: Titular, 02: Director/Presidente, 03: Apoderado, 04: Empleado)
End;}
WSFEv1.Reprocesar := True ;
//cae :=
cae := WSFEv1.CAESolicitar;
If WSFEv1.Excepcion <> '' Then
begin
showmessage( WSFEv1.Excepcion) ;
showmessage( WSFEv1.Traceback) ;
showmessage( WSFEv1.XmlRequest) ;
showmessage( WSFEv1.XmlResponse) ;
//' Imprimo pedido y respuesta XML para depuración (errores de formato)
WriteLn(WSFEv1.XmlRequest );
WriteLn( WSFEv1.XmlResponse );
Showmessage( WSFEv1.XmlResponse );
If WSFEv1.errmsg <> '' Then
WriteLn(WSFEv1.errmsg);
Tengo problemas con este codigo, funciona mal cuando se cambia tipo_cbte a 6.
"El número o fecha del comprobante no se corresponde con el próximo a autorizar"
Lo hice funcionar pero tuve que cambiar el punto_vta a 3 (1 y 2 fallan), eso esta bien?
Cuando pase a producción y tenga un solo punto de ventas no va a repetirse el error?
Hola, Esto sigue funcionando ?, soy trainee y me pidieron que aplique esto, si me pueden especificar como podria integrarlo, o en donde encuentro la documentacion. MUCHAS GRACIAS
Ejemplo de Uso de Interface COM con Web Services AFIP (PyAfipWs)
Autor original WSFE: 2009 (C) Mariano Reingart [email protected]
Adaptado para WSFEv1: 2015 (C) Rodrigo Iniguez [email protected]
Licencia: GPLv3+
program consola;
{$APPTYPE CONSOLE}
uses
ActiveX,
ComObj,
Dialogs,
SysUtils;
var
WSAA, WSFEv1: Variant;
tra, path, Certificado, ClavePrivada, cms, ta: String;
qty, LastId, LastCBTE, cae, ok , OkUlt: Variant;
tipo_cbte, punto_vta, tipo_doc, presta_serv, id,
cbt_desde, cbt_hasta : Integer;
fecha, nro_doc, imp_total, imp_tot_conc, imp_neto, impto_liq,
impto_liq_rni, imp_op_ex, fecha_cbte, fecha_venc_pago,
fecha_serv_desde, fecha_serv_hasta, venc : String;
cache ,url_wsdl ,proxy : String ;
moneda_id , moneda_ctz : string ;
base_imp, importe : string ;
begin
CoInitialize(nil);
// Crear objeto interface Web Service Autenticación y Autorización
WSAA := CreateOleObject('WSAA') ;
// Generar un Ticket de Requerimiento de Acceso (TRA)
tra := WSAA.CreateTRA;
WriteLn(tra);
// Especificar la ubicacion de los archivos certificado y clave privada
path := GetCurrentDir + '';
// Certificado: certificado es el firmado por la AFIP
// ClavePrivada: la clave privada usada para crear el certificado
Certificado := 'reingart.crt'; // certificado de prueba
ClavePrivada := 'reingart.key'; // clave privada de prueba' +
// Generar el mensaje firmado (CMS)
cms := WSAA.SignTRA(tra, Path + Certificado, Path + ClavePrivada);
WriteLn(cms);
// Llamar al web service para autenticar:
ta := WSAA.CallWSAA(cms, 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms'); // Hologación
//ta = WSAA.CallWSAA(cms, 'https://wsaa.afip.gov.ar/ws/services/LoginCms'); // Producción
// Imprimir el ticket de acceso, ToKen y Sign de autorización
WriteLn(ta);
showmessage(ta);
WriteLn('Token:' + WSAA.Token);
WriteLn('Sign:' + WSAA.Sign);
// Una vez obtenido, se puede usar el mismo token y sign por 6 horas
// (este período se puede cambiar)
// Crear objeto interface Web Service de Factura Electrónica
cache := ''; // directorio temporal (usar predeterminado)
url_wsdl := 'https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL ';// usar servicios1 para producción
proxy:= '';
WSFEv1 := CreateOleObject('WSFEv1');
// Setear tocken y sing de autorización (pasos previos)
WSFEv1.Token := WSAA.Token;
WSFEv1.Sign := WSAA.Sign;
// CUIT del emisor (debe estar registrado en la AFIP)
WSFEv1.Cuit := '20267565393';
WSFEv1.LanzarExcepciones := False;
// Conectar al Servicio Web de Facturación
ok := WSFEv1.Conectar(cache, url_wsdl, proxy); // homologación
//ok := WSFE.Conectar('https://wsw.afip.gov.ar/wsfe/service.asmx'); // producción
// Llamo a un servicio nulo, para obtener el estado del servidor (opcional)
WSFEv1.Dummy;
WriteLn('appserver status ' + WSFEv1.AppServerStatus);
WriteLn('dbserver status ' + WSFEv1.DbServerStatus);
WriteLn('authserver status ' + WSFEv1.AuthServerStatus);
// Recupera cantidad máxima de registros (opcional)
//qty := WSFE.RecuperarQty;
// Recupera último número de secuencia ID
//LastId := WSFEv1.RecuperaLastCMP();
// Recupero último número de comprobante para un punto de venta y tipo (opcional)
tipo_cbte := 1; punto_vta := 1;
LastCBTE := WSFEv1.CompUltimoAutorizado(punto_vta, tipo_cbte) + 1; //+ 1
//WriteLn(WSFEv1.FECompUltimoAutorizado) ;
// Establezco los valores de la factura o lote a autorizar:
DateTimeToString(Fecha, 'yyyymmdd', Date);
id := LastId + 1; presta_serv := 3;
tipo_doc := 80; nro_doc := '20277448530';
cbt_desde := LastCBTE ;
cbt_hasta := LastCBTE ;
imp_total := '121.00'; imp_tot_conc := '0.00'; imp_neto := '100.00';
impto_liq := '21.00'; impto_liq_rni := '0.00'; imp_op_ex := '0.00';
fecha_cbte := Fecha; fecha_venc_pago := Fecha;
moneda_id := 'PES';
moneda_ctz := '1.000';
// Fechas del período del servicio facturado (solo si presta_serv = 1)
fecha_serv_desde := Fecha; fecha_serv_hasta := Fecha;
// Llamo al WebService de Autorización para obtener el CAE
ok := WSFEv1.CrearFactura ( presta_serv,
tipo_doc, nro_doc, tipo_cbte, punto_vta,
cbt_desde, cbt_hasta, imp_total, imp_tot_conc, imp_neto,
impto_liq, impto_liq_rni, imp_op_ex, fecha_cbte, fecha_venc_pago,
fecha_serv_desde, fecha_serv_hasta,moneda_id,moneda_ctz ); // si presta_serv = 0 no pasar estas fechas
//Agrego tasas de IVA
id := 5 ; // 21%
base_imp := '100.00';
importe := '21.00';
ok := WSFEv1.AgregarIva(id, base_imp, importe) ;
{If tipo_cbte = 1 Then // solo para facturas A
begin
ok := WSFEv1.AgregarOpcional(5, '02'); // IVA Excepciones (01: Locador/Prestador, 02: Conferencias, 03: RG 74, 04: Bienes de cambio, 05: Ropa de trabajo, 06: Intermediario).
ok := WSFEv1.AgregarOpcional(61, '80'); // Firmante Doc Tipo (80: CUIT, 96: DNI, etc.)
ok := WSFEv1.AgregarOpcional(62, '20267565393'); // Firmante Doc Nro
ok := WSFEv1.AgregarOpcional(7, '01'); // Car?er del Firmante (01: Titular, 02: Director/Presidente, 03: Apoderado, 04: Empleado)
End;}
WSFEv1.Reprocesar := True ;
//cae :=
cae := WSFEv1.CAESolicitar;
If WSFEv1.Excepcion <> '' Then
begin
showmessage( WSFEv1.Excepcion) ;
showmessage( WSFEv1.Traceback) ;
showmessage( WSFEv1.XmlRequest) ;
showmessage( WSFEv1.XmlResponse) ;
end;
showmessage( 'Resultado ' + WSFEv1.Resultado);
showmessage( 'CAE' + WSFEv1.CAE);
//' Imprimo pedido y respuesta XML para depuración (errores de formato)
WriteLn(WSFEv1.XmlRequest );
WriteLn( WSFEv1.XmlResponse );
Showmessage( WSFEv1.XmlResponse );
If WSFEv1.errmsg <> '' Then
WriteLn(WSFEv1.errmsg);
WriteLn('Obs ' + WSFEv1.obs);
WriteLn('Resultado: ' + WSFEv1.Resultado);
WriteLn('cae: ' + WSFEv1.CAE);
//cae := WSFEv1.CAE() ;
ShowMessage('CAE: ' + cae );
showmessage('Presione Enter para terminar');
ReadLn;
CoUninitialize;
end
The text was updated successfully, but these errors were encountered: