Forum > Spanish

Ejemplo, Ayuda con Impresora Fiscal AFIP

<< < (4/4)

ocloma:
Funcion para firmar el TRA de WSAA:


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---function SMIMESign(tra, cert, privatekey, passphrase: ansistring): ansistring;var  fCertificate: pX509;  fKey: pEVP_PKEY;  pw: PChar;  keyfile, certfile: pBIO;  a: pEVP_PKEY;  c: pX509;  p7: pPKCS7;  msgin, msgout: pBIO;  buff: pansichar;  buffsize: integer;begin  Result := '';   if not FileExists(cert) then    raise Exception.Create('Falta Archivo Certificado: ' + cert);  if not FileExists(privatekey) then    raise Exception.Create('Falta Archivo Clave Privada: ' + privatekey);   keyfile := nil;  certfile := nil;  fKey := nil;  fCertificate := nil;  msgin := nil;  msgout := nil;  a := nil;  c := nil;  p7 := nil;  buff := nil;  buffsize := 0;   try    ERR_load_crypto_strings;    ////OpenSSL_add_all_algorithms;    OpenSSL_add_all_digests;    OpenSSL_add_all_ciphers;     {Carga Clave Privada}    keyfile := BIO_new(BIO_s_file());    BIO_read_filename(keyfile, PChar(ansistring(privatekey)));    if passphrase = '' then      pw := nil    else      pw := PChar(passphrase);    fKey := PEM_read_bio_PrivateKey(keyfile, a, nil, pw);    if fKey = nil then      raise Exception.Create('No se puede leer la clave privada. ');     {Carga Certificado}    certfile := BIO_new(BIO_s_file());    BIO_ctrl(certfile, BIO_C_SET_FILENAME, BIO_CLOSE or BIO_FP_READ, PChar(ansistring(cert)));    fCertificate := PEM_read_bio_X509(certfile, c, nil, nil);    if fCertificate = nil then      raise Exception.Create('No se puede leer el certificado. ');     {Firma SMIME}    msgin := BIO_new_mem_buf(PChar(tra), -1);    msgout := BIO_new(BIO_s_mem);    p7 := PKCS7_sign(fCertificate, fKey, nil, msgin, PKCS7_STREAM); //;PKCS7_DETACHED);    BIO_reset(msgin);    SMIME_write_PKCS7(msgout, p7, msgin, PKCS7_STREAM); //or PKCS7_DETACHED);     buffsize := BIO_pending(msgout);    GetMem(buff, buffsize + 1);    BIO_read(msgout, buff, buffsize);    Result := StrPas(buff);     FreeMem(buff);    buff := nil;    finally    BIO_free(keyfile);    BIO_free(certfile);    BIO_free(msgin);    BIO_free(msgout);    CRYPTO_cleanup_all_ex_data();    EVP_cleanup();    ERR_free_strings;  end;end;  
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.

daragor:
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!

ocloma:
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

Navigation

[0] Message Index

[*] Previous page

Go to full version