Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Factura Electronica AFIP Resuelto/Funcionando

Sin ocx, sin componentes 100% codigo delphi

Tengo el codigo en delphi para solicitar cae y demas funciones del webservice de Afip funcionando 100% codigo puro de delphi sin OCX ni Componentes Raros.

Saludos..


PD: Enseguida pondré enlace al código, que lo subiré al FTP.


.

Última edición por Casimiro Notevi fecha: 15-07-2015 a las 00:01:43. Razón: Quitar email
Responder Con Cita
  #2  
Antiguo 15-07-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por adripugliesso Ver Mensaje
Sin ocx, sin componentes 100% codigo delphi

Tengo el codigo en delphi para solicitar cae y demas funciones del webservice de Afip funcionando 100% codigo puro de delphi sin OCX ni Componentes Raros.

Saludos..


PD: Enseguida pondré enlace al código, que lo subiré al FTP.


.
Es decir que te tomaste el trabajo de importar los webservices? y realizar todo el trabajo?
Felicitaciones entonces
Responder Con Cita
  #3  
Antiguo 15-07-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
Claro lo que hice fue importar los WDSL y luego utilizarlos en mi codigo.
Responder Con Cita
  #4  
Antiguo 15-07-2015
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por adripugliesso Ver Mensaje
Claro lo que hice fue importar los WDSL y luego utilizarlos en mi codigo.
Respecto al firmado, ¿que usaste? API, componentes ???

Saludos y felicidades.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 15-07-2015
adripugliesso adripugliesso is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 49
Poder: 0
adripugliesso Va por buen camino
En el firmado lo unico que hago es usar el shellExecute llamando a un Bat que lo que hace es ejecutar las lineas de Openssl.


Código Delphi [-]
procedure CreaXMLFirmado();
var p1: string;
    r: PAnsiChar;
begin
  memo1.Clear;
  memo1.Lines.Add('c:');
  memo1.Lines.Add('cd /');
  memo1.Lines.Add('cd OpenSSL-Win32');
  memo1.Lines.Add('cd bin');
  memo1.Lines.Add('openssl smime -sign -in ' + ruta + 'ticketsf.xml -out '+ ruta + 'ticketf.xml -inkey ' + ruta + 'cert.key -signer '+ruta +'cert.crt -outform PEM -nodetach ');
  memo1.Lines.SaveToFile(ruta + 'firmar.bat');
  memo1.Clear;

ShellExecute(0, 'open', PAnsiChar(ruta + 'firmar.bat'), 'param1 param2',  nil,  SW_HIDE);
end;

tenes que tener instalado el Openssl en la ruta donde lo llamas

Última edición por Casimiro Notevi fecha: 15-07-2015 a las 22:18:14.
Responder Con Cita
  #6  
Antiguo 15-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:

Responder Con Cita
  #7  
Antiguo 15-07-2015
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por adripugliesso Ver Mensaje
En el firmado lo unico que hago es usar el shellExecute llamando a un Bat que lo que hace es ejecutar las lineas de Openssl.


Código Delphi [-]
procedure CreaXMLFirmado();
var p1: string;
    r: PAnsiChar;
begin
  memo1.Clear;
  memo1.Lines.Add('c:');
  memo1.Lines.Add('cd /');
  memo1.Lines.Add('cd OpenSSL-Win32');
  memo1.Lines.Add('cd bin');
  memo1.Lines.Add('openssl smime -sign -in ' + ruta + 'ticketsf.xml -out '+ ruta + 'ticketf.xml -inkey ' + ruta + 'cert.key -signer '+ruta +'cert.crt -outform PEM -nodetach ');
  memo1.Lines.SaveToFile(ruta + 'firmar.bat');
  memo1.Clear;

ShellExecute(0, 'open', PAnsiChar(ruta + 'firmar.bat'), 'param1 param2',
  nil,  SW_HIDE);
end;

tenes que tener instalado el Openssl en la ruta donde lo llamas
Muy interesante , muchas gracias.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 29-04-2016
hsbelli hsbelli is offline
Registrado
NULL
 
Registrado: abr 2016
Posts: 1
Poder: 0
hsbelli Va por buen camino
hola, en que seccion del ftp esta el archivo con los fuentes y como se llama dicho archivo?
gracias!

saludos
Responder Con Cita
  #9  
Antiguo 24-04-2017
Avatar de SpyO_O
SpyO_O SpyO_O is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 22
Poder: 0
SpyO_O Va por buen camino
OpenSSL

Hola Amigo, gracias por el aporte.
Estoy interesado en ver como llamas al webservices "logincms", yo estoy haciendo lo siguiente , pero obtengo siempre el mensaje de error "El CMS es inválido".
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 vService:uLogincms.LoginCMS;
 vCms:String;
begin
    Memo1.Clear;
    Memo1.Lines.LoadFromFile('C:\Afip\myProject\manual\tra.xml.firmado');
    vcms:=Memo1.Lines.Text;
    vService:=ulogincms.GetLoginCMS();
    Memo1.lines.text:=vService.loginCms(vcms);

La unit uLogincms es el wdsl importado de https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl

Podrías darme una mano con esto por favor? , no encontré en el FTP el código que habias dicho que lo subirías .

Gracias


Cita:
Empezado por adripugliesso Ver Mensaje
Sin ocx, sin componentes 100% codigo delphi

Tengo el codigo en delphi para solicitar cae y demas funciones del webservice de Afip funcionando 100% codigo puro de delphi sin OCX ni Componentes Raros.

Saludos..


PD: Enseguida pondré enlace al código, que lo subiré al FTP.


.
__________________
Q Onda?
Responder Con Cita
  #10  
Antiguo 30-05-2017
seti.roman seti.roman is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
seti.roman Va por buen camino
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;
Responder Con Cita
  #11  
Antiguo 30-10-2017
sanamarain sanamarain is offline
Registrado
NULL
 
Registrado: sep 2017
Posts: 3
Poder: 0
sanamarain Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 30-10-2017
seti.roman seti.roman is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
seti.roman Va por buen camino
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 21:05:32. Razón: Error e el código
Responder Con Cita
  #13  
Antiguo 30-10-2017
seti.roman seti.roman is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
seti.roman Va por buen camino
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;
Responder Con Cita
  #14  
Antiguo 30-10-2017
seti.roman seti.roman is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
seti.roman Va por buen camino
Cita:
Empezado por sanamarain Ver Mensaje
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
A ver, yo tuve que hacer esto con el token y el sign cuando los recibía después de enviar la solicitud firmada,
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;
Responder Con Cita
  #15  
Antiguo 01-11-2017
sanamarain sanamarain is offline
Registrado
NULL
 
Registrado: sep 2017
Posts: 3
Poder: 0
sanamarain Va por buen camino
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.
Responder Con Cita
  #16  
Antiguo 23-11-2022
davidyamil davidyamil is offline
Registrado
 
Registrado: nov 2022
Posts: 1
Poder: 0
davidyamil Va por buen camino
Integrarlo con aplicación y base de datos .ABS

buenas tardes a todos, estoy viendo el código, mi pregunta es como puedo integrarlo o conectarlo a una base de datos . ABS para que tome los datos de la base y la factura quede tanto registrada en la aplicación como en afip, gracias y disculpen si se me pasa algo de antemano!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Factura Electronica - Afip Argentina Joe_Balda Varios 30 30-01-2021 05:10:34
Factura Electrónica AFIP Argentina SergioFrey Noticias 2 19-05-2017 22:02:03
xml+xsl a pdf(Factura Electronica) jgutti Varios 4 21-02-2012 17:08:23
factura electronica cmm07 Varios 4 02-04-2009 18:46:03
factura electronica spia Varios 2 22-02-2009 22:30:06


La franja horaria es GMT +2. Ahora son las 10:12:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi