Recent

Author Topic: Ejemplo, Ayuda con Impresora Fiscal AFIP  (Read 5385 times)

ocloma

  • New Member
  • *
  • Posts: 11
Re: Ejemplo, Ayuda con Impresora Fiscal AFIP
« Reply #15 on: July 28, 2022, 08:17:02 pm »
Funcion para firmar el TRA de WSAA:

Code: Pascal  [Select][+][-]
  1. function SMIMESign(tra, cert, privatekey, passphrase: ansistring): ansistring;
  2. var
  3.   fCertificate: pX509;
  4.   fKey: pEVP_PKEY;
  5.   pw: PChar;
  6.   keyfile, certfile: pBIO;
  7.   a: pEVP_PKEY;
  8.   c: pX509;
  9.   p7: pPKCS7;
  10.   msgin, msgout: pBIO;
  11.   buff: pansichar;
  12.   buffsize: integer;
  13. begin
  14.   Result := '';
  15.  
  16.   if not FileExists(cert) then
  17.     raise Exception.Create('Falta Archivo Certificado: ' + cert);
  18.   if not FileExists(privatekey) then
  19.     raise Exception.Create('Falta Archivo Clave Privada: ' + privatekey);
  20.  
  21.   keyfile := nil;
  22.   certfile := nil;
  23.   fKey := nil;
  24.   fCertificate := nil;
  25.   msgin := nil;
  26.   msgout := nil;
  27.   a := nil;
  28.   c := nil;
  29.   p7 := nil;
  30.   buff := nil;
  31.   buffsize := 0;
  32.  
  33.   try
  34.     ERR_load_crypto_strings;
  35.     ////OpenSSL_add_all_algorithms;
  36.     OpenSSL_add_all_digests;
  37.     OpenSSL_add_all_ciphers;
  38.  
  39.     {Carga Clave Privada}
  40.     keyfile := BIO_new(BIO_s_file());
  41.     BIO_read_filename(keyfile, PChar(ansistring(privatekey)));
  42.     if passphrase = '' then
  43.       pw := nil
  44.     else
  45.       pw := PChar(passphrase);
  46.     fKey := PEM_read_bio_PrivateKey(keyfile, a, nil, pw);
  47.     if fKey = nil then
  48.       raise Exception.Create('No se puede leer la clave privada. ');
  49.  
  50.     {Carga Certificado}
  51.     certfile := BIO_new(BIO_s_file());
  52.     BIO_ctrl(certfile, BIO_C_SET_FILENAME, BIO_CLOSE or BIO_FP_READ, PChar(ansistring(cert)));
  53.     fCertificate := PEM_read_bio_X509(certfile, c, nil, nil);
  54.     if fCertificate = nil then
  55.       raise Exception.Create('No se puede leer el certificado. ');
  56.  
  57.     {Firma SMIME}
  58.     msgin := BIO_new_mem_buf(PChar(tra), -1);
  59.     msgout := BIO_new(BIO_s_mem);
  60.     p7 := PKCS7_sign(fCertificate, fKey, nil, msgin, PKCS7_STREAM); //;PKCS7_DETACHED);
  61.     BIO_reset(msgin);
  62.     SMIME_write_PKCS7(msgout, p7, msgin, PKCS7_STREAM); //or PKCS7_DETACHED);
  63.  
  64.     buffsize := BIO_pending(msgout);
  65.     GetMem(buff, buffsize + 1);
  66.     BIO_read(msgout, buff, buffsize);
  67.     Result := StrPas(buff);
  68.  
  69.     FreeMem(buff);
  70.     buff := nil;
  71.  
  72.  
  73.   finally
  74.     BIO_free(keyfile);
  75.     BIO_free(certfile);
  76.     BIO_free(msgin);
  77.     BIO_free(msgout);
  78.     CRYPTO_cleanup_all_ex_data();
  79.     EVP_cleanup();
  80.     ERR_free_strings;
  81.   end;
  82. end;
  83.  

Esto seria lo mas complejo del WSAA, lo demas es armar el xml tal como lo especifica la documentacion de la AFIP.
Espero que sirva de ayuda.
« Last Edit: July 28, 2022, 08:41:19 pm by ocloma »

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Ejemplo, Ayuda con Impresora Fiscal AFIP
« Reply #16 on: August 02, 2022, 01:14:45 am »
OK ok muchachos, bien hecha la aclaración, efectivamente no se nada del tema y quedo mal parado con eso...

Veamos una cosa, si yo tengo un sistema de gestión con ventas .. quiero aplicar la opción de emitir una factura al cliente, desde la cuenta de afip, entonces eso seria .. webservices es correcto? entonces NO importa si se tiene una impresora fiscal (que ya traer sus comandos y configuraciones de manual) lo importante es que se vincula afip con el sistema a través de internet y creamos la factura y la podemos imprimir por impresora normal.

Saludos cordiales!
Inculcando el software libre.
https://www.webscom.com.ar

ocloma

  • New Member
  • *
  • Posts: 11
Re: Ejemplo, Ayuda con Impresora Fiscal AFIP
« Reply #17 on: August 07, 2022, 06:19:46 pm »
Hola daragor, básicamente es como indicas. En el momento de generar la factura, por medio del webservice, tu enviás los datos de la factura que estas por emitir (previamente debes tener un punto de venta autorizado para webservice en tu cuenta de afip), dentro de estos datos , debes enviar un Ticket de Requerimiento de Acceso (TRA) que obtienes por medio del servicio WSAA, que es la autorización de la afip. Si todo esta correcto el webservice de la afip te va a devolver el CAE y la fecha de caducidad del mismo. Esto debe ir en la impresión de la factura, y es lo que la hace valida. Espero que esto aclare un poco el tema. Saludos

 

TinyPortal © 2005-2018