FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
Cita:
Poner en "Mayúsculas" el nombre de una instrucción Pascal, no es ni por asomo, una violación a la guia de estilo. Aparte, la suposición de que las mayusculas representan un grito , al menos a estas alturas, solo se considera una cuestión folclórica y tal vez hoy solo es utilizado por "History Chanel" cuando tratan temas como el inicio de las terminales de texto. Y tal vez ni eso. Como sugerencia, deberían reveer este tipo de comentarios absurdos. Cordialmente, YAKO |
#22
|
||||
|
||||
Estimado amigo adripugliesso
Subiste el código al FTP del sitio ? Donde podemos encontrar más info sobre tu solución?
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· Última edición por hgiacobone fecha: 19-05-2017 a las 20:11:33. Razón: no te digo |
#23
|
|||
|
|||
Proyecto Ejemplo en Delphi 7
Acá les dejo un proyecto de ejemplo hecho en Delphi 7 de como usar los WebService de AFIP para Facturación Electrónica.
Cualquier duda consulten.. Espero que les sirva.- |
#24
|
||||
|
||||
Cita:
En fin, bobadas, las que tú has soltado. |
#25
|
|||
|
|||
OpensslUtils
Hola, soy nuevo en este Foro, les dejo algo que puede servirles, quizás no esté muy claro. Es para firmar el ticket sin usar un Bat a la librería Openssl.
Deben conseguir OpensslUtils, que no recuerdo donde la encontré e incorporarla al proyecto. Les adjunto el código que uso yo. Espero les sea útil. Código:
function Tcomprobante.crearfirma: string; var signer: TMessageSigner; camino: String; ruta: Pwidechar; firma: String; position: integer; begin camino := ExpandFileName(application.ExeName + '\..\keys'); ruta := Pwidechar(camino); fgeneracion := now(); fexpiracion := inchour(fgeneracion,1); signer := TMessageSigner.Create; signer.LoadPrivateKey(ruta +'\'+ responsable.edita_responsables['llave'], ''); signer.LoadCertificate(ruta + '\'+ responsable.edita_responsables['cert']); signer.PlainMessage := '<?xml version="1.0" encoding="UTF-8" ?>'+ '<loginTicketRequest version="1.0">'+ '<header>'+ '<uniqueId>123456</uniqueId>'+ '<generationTime>'+formatdatetime('yyyy-MM-dd',fgeneracion)+'T'+formatdatetime('hh:mm',fgeneracion)+':00-03:00</generationTime>'+ '<expirationTime>'+formatdatetime('yyyy-MM-dd',fexpiracion)+'T'+formatdatetime('hh:mm',fexpiracion)+':00-03:00</expirationTime>'+ '</header>'+ '<service>wsfe</service>'+ '</loginTicketRequest>'; signer.MIMESign; firma := signer.SignedMessage; firma := rightstr(firma,length(firma)-186); position := ansipos('==', firma); if position <> 0 then begin delete(firma,position,length(firma)); end; result := firma; end; |
#26
|
|||
|
|||
Hola también soy nuevo en el foro. Pude implementar una interface de factura electrónica con éxito y rápidamente sobre Delphi 7 gracias al gran aporte de adripugliesso, pero me interesa generar el CMS directamente sin la intervención de openssl como binario externo, es decir con la OpensslUtils que ya conseguí de la web de la universidad de Genoa de Marco Ferrante para la versión .7b de openssl (dll).
La consulta es para seti.roman, hay alguna otra rutina para implementar además de la que ya compartiste? Porque no logro validar el CMS generado. Llego a crear el smime.p7m que es el archivo firmado con signed-data en formato Email, luego quito la cabecera, codifico en base64 y envío pero algo estoy haciendo mal o está faltando porque me devuelve "CMS inválido". Saludos |
#27
|
|||
|
|||
Hola, estuve probando hoy nuevamente y me pasó que la firma es inválida (antes funcionaba).
1) Estoy modificando el código a ver si lo hago andar nuevamente. 2) Yo uso la librería OpenSSLUtils.pas (0.9.6b) que también necesita libeay32.pas (0.9.6b) y las agrego al proyecto (agregala a uses: OpenSSLUtils y libeay32 en tu form o módulo) Última edición por seti.roman fecha: 30-10-2017 a las 20:05:32. Razón: Error e el código |
#28
|
|||
|
|||
Ahora va corregido y (por ahora) funcionando:
Código:
function Tcomprobante.crearfirma: string; var signer: TMessageSigner; ruta: Pwidechar; firma: String; position: integer; begin ruta := Pwidechar(ExpandFileName(application.ExeName + '\..\keys')); fgeneracion := now(); fexpiracion := inchour(fgeneracion,1); signer := TMessageSigner.Create; signer.LoadPrivateKey(ruta +'\'+ responsable.edita_responsables['llave'], ''); signer.LoadCertificate(ruta + '\'+ responsable.edita_responsables['cert']); signer.PlainMessage := '<?xml version="1.0" encoding="UTF-8" ?>'+ '<loginTicketRequest version="1.0">'+ '<header>'+ '<uniqueId>123456</uniqueId>'+ '<generationTime>'+formatdatetime('yyyy-MM-dd',fgeneracion)+'T'+formatdatetime('hh:mm',fgeneracion)+':00-03:00</generationTime>'+ '<expirationTime>'+formatdatetime('yyyy-MM-dd',fexpiracion)+'T'+formatdatetime('hh:mm',fexpiracion)+':00-03:00</expirationTime>'+ '</header>'+ '<service>wsfe</service>'+ '</loginTicketRequest>'; signer.MIMESign; firma := signer.SignedMessage; firma := rightstr(firma,length(firma)-188); //*********** AGREGUE 2 position := ansipos('==', firma); if position <> 0 then begin delete(firma,position+2,length(firma)); //******** SUME 2 A LA POSICION PARA QUE INCLUYA LOS == end; xgs.observartexto(firma); result := firma; end; |
#29
|
|||
|
|||
Cita:
dado que venian con etiquetas y algún caractér raro, no me acuerdo muy bien. Te lo paso: Código:
function Tcomprobante.autenticar: Tstringlist; var autenticar: Tstringlist; begin autenticar := Tstringlist.Create; autenticar.Text := (HTautenticar as LoginCms).loginCms(crearfirma); result := autenticar; end; function Tcomprobante.obteneraut: Tstringlist; var cms: Tstringlist; i: Integer; token: String; sign: String; begin cms := Tstringlist.Create; cms := autenticar; for i := 0 to cms.Count-1 do begin cms[i] := Trimleft(cms[i]); if StartsText('<token>',cms[i]) then begin cms[i] := cms[i].Replace('<token>', ''); cms[i] := cms[i].Replace('</token>', ''); token := cms[i]; cms[i+1] := cms[i+1].Replace('<sign>', ''); cms[i+1] := cms[i+1].Replace('</sign>', ''); sign := cms[i+1]; end; end; cms.Clear; cms.Add(Trimleft(token)); cms.Add(Trimleft(sign)); guardaraut(cms[0],cms[1]); end; |
#30
|
|||
|
|||
Muchas gracias por la pronta respuesta. Aún no lo he probado, pero intuía que estaba firmando mal por la comparación que yo hacía con la firma generada por openssl por línea de comandos. Sólo me faltaba la firma (para no hacerlo con openssl.exe), lo demás está todo implementado. Muchísimas gracias también por el código de la recuperación del token y sign. En un momento lo pruebo y posteo como me fue.
|
#31
|
|||
|
|||
Funcionó perfectamente!!! Sólo cambiando las líneas de las funciones rightstr y delete.
Muchísimas gracias, había dado muchas vueltas con esto y la solución era sencilla. |
#32
|
|||
|
|||
Hola gente! Estuve probando el ejemplo subido, compila perfecto sobre XE3, lo pruebo con certificados de homomlogación en un Windows 10 de 64 bits y genera bien el CAE. Pruebo el mismo ejecutable sobre una máquina virtual con XP y me dice: No se a podido establecer una conexión con el servidor - URL:https://wsaahomo.afip.gov.ar/ws/services/LoginCms - SOAPAction:""
Lo mas extraño es que si pruebo en la misma VM los componentes PyAFIPws si se conecta y genera los CAEs... Alguien tiene idea que pasa? Muchas gracias por su tiempo! |
#33
|
|||
|
|||
Me auto-respondo:
Funcoina sólo si tiene XP service pack 3, y "Verificar tener activada la casilla "USAR TLS 1.0" en "Opciones de Internet->Opciones Avanzadas" |
#34
|
|||
|
|||
Código de barras
Hola colegas, alguno tiene idea cómo generar el código de barras que se imprime en la Fact. electrónica?
Es decir, ya tengo como codificarlo, pero no se como armar las "barras". Se que va CUIT, Pto de venta, CAE, etc pero no se como armar las barras... Alguno tiene idea?? Muchas gracias y felices fiestas! |
#35
|
|||
|
|||
Hola,
Cita:
Este es uno que genera una imagen bmp ó jpg Version 3.7, Copyright (c) 2014-2017 WINSOFT, http://www.winsoft.sk
__________________
Suerte Alejandro |
#36
|
|||
|
|||
Finalmente lo hice a mano, me basé en el codigo en Pyhton de PyAFIPws:
Última edición por lucho6007 fecha: 26-12-2017 a las 14:08:21. Razón: estaba mal el código de declaracion |
#37
|
|||
|
|||
me da error de base64 en delphi berlin 10.1 alguna idea ?
|
#38
|
||||
|
||||
¿Dónde y qué error?
|
#39
|
|||
|
|||
Proba lo que arme, esta sin terminar pero te puede servir: http://www.clubdelphi.com/foros/showthread.php?t=92602
__________________
Suerte Alejandro |
#40
|
|||
|
|||
Cita:
me sale el siguiente error: no se puede decodificar base64 al momento de generar el sign y token Estuve leyendo todo el foro y entendiendo el código, pero me parece que me esta faltando algo por hacer, es mi primera ves con openssl y todo esto Alguien me podria dar una pista para seguir adelante, lo compile con delphi 7 |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Factura Electronica - Afip Argentina | Joe_Balda | Varios | 30 | 30-01-2021 04:10:34 |
Factura Electrónica AFIP Argentina | SergioFrey | Noticias | 2 | 19-05-2017 21:02:03 |
xml+xsl a pdf(Factura Electronica) | jgutti | Varios | 4 | 21-02-2012 16:08:23 |
factura electronica | cmm07 | Varios | 4 | 02-04-2009 17:46:03 |
factura electronica | spia | Varios | 2 | 22-02-2009 21:30:06 |
|