Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Factura Electronica México (https://www.clubdelphi.com/foros/showthread.php?t=66807)

Neftali [Germán.Estévez] 07-05-2010 19:07:54

Estaría bien que alguien pusiera los Links correctos; Por lo que he mirado (seguro que he mirado donde no debía), Microe permite descargar una versión de prueba, en ningun sitio he visto que fuera gratis.

Y en cuanto a MisFacturas, no consigo encontrar ningun enlace.

nejamube 07-05-2010 19:18:18

Microe-SAT
 
El foro me indica que aun no estoy autorizado para poner link o imagenes, de lo contrario yo lo haria.

Al final de la pagina donde esta la version de prueba esta el link para registrarte y descargarlo. Esto no significa que tengo costo, solo es un aviso al SAT que estas optando por usar su aplicacion para cumplir con tus obligaciones fiscales.

En la pagina de MisFacturas . NET es la pagina, te registras y empiezas a facturar GRATIS.


Alguien sabe hasta cuando podre poner links ? Es por tiempo ?, POST ? o que se toma en cuenta ?.

Gracias.

Casimiro Notevi 07-05-2010 19:20:47

Creo que ya puedes poner links

nejamube 07-05-2010 19:26:53

Microe-SAT
 
Gracias Casimiro Notevi.

Descargar de la herramienta

http://www.sat.gob.mx/sitio_internet.../20_18329.html


Solicitud de alta Opción Microe


http://www.sat.gob.mx/sitio_internet.../20_15592.html


MISFACTURAS
http://www.misfacturas.net/

En el caso del SAT.

Primero se descarga la herramienta que es un demostrativo, si te agrada es necesario registrarte para empezar a usar esta solucion.

dado 07-05-2010 22:09:09

Cita:

Empezado por nejamube (Mensaje 363159)
Aplicacion gratuita Factura Electronica SAT

El SAT puso a disposicion su aplicacion gratuita para factura electronica y contabilidad en linea, SIN COSTO, por lo que es necesario poner en duda hasta que punto es necesario el trabajo que todos estan haciendo. ?



No puedo poner links, pero pueden descargar y usar la aplicacion desarrollada por el SAT buscando en google:

Microe-sat

Sinceramente y sin ofender creo que muchos estan trabajando para nada, ademas de esta aplicacion del SAT existen otras mas que son gratuitas como TRALIX MISFACTURAS.


Recomendaria que mejor se relajen y observen que pasa a partir de Enero 2011, el SAT hara publicidad total a sus sistema de facturacion electronica y sera el estandar en Facturacion Electronica en Mexico.

Ouch! eso si dolio, je je je.

Te la pongo facil, porque hay tantos modelos y colores de carros? si, de autos, camiones, total...si fabricaran uno mediano color gris, para que fabricar otro color rojo, todos sirven para lo mismo no?.

Opciones. esa es la respuesta, si contratas a un programador tienes la opcion de pedirle (casi) lo que sea, que te imprima 2 copias, que le ponga el logotipo a tus CFD etc etc.

Por ultimo, como bien dijo nuk3zito, el Micro-e solo son para empresas que facturen menos de 4 millones al año (Regimen general de ley). Y yo quiero como cliente una empresa que facture mucho !!! je je je

dado 07-05-2010 22:22:08

Cita:

Empezado por Neftali (Mensaje 363194)
Estaría bien que alguien pusiera los Links correctos; Por lo que he mirado (seguro que he mirado donde no debía), Microe permite descargar una version de prueba, en ningun sitio he visto que fuera gratis.

Y en cuanto a MisFacturas, no consigo encontrar ningun enlace.


Ya revise un poco mas lo de Microe y esto es lo que observe:

Microe se puede descargar una version de demo.

Para usarlo en un ambiente "real" debes solicitarlo al SAT, NO ES DESCARGA LIBRE, una vez que lo descargas estas OBLIGADO A USARLO, no puedes echarte para atras a menos que rebases los 4 millones de pesos facturados al año

Tiene una licencia restringida, es decir, NO LO PUEDES copiar a terceros, por la misma razon que no es una descarga libre.

Algo MUY IMPORTANTE, las siguientes paginas ofrecen un servicio NO AUTORIZADO POR EL SAT e incurren en un delito fiscal.

ww.factura-electronica-mexico.com.mx/
ww.enlacefiscal.com/
ww.tefacturo.com
ww.factutol.com
ww.webcomtechnology.com.mx/
solucionfactible.com/
ww.facturaelektronica.com/ (Ofrece una alternativa en modalidad para desarrollo a la medida, esto si es valido)
ww.facturadorelectronico.com/
macropro.com.mx/

(les falta una "w" al principio ya que no puedo poner ligas)

fuente : ww.facturaelectronicaenmexico.com/2010/04/como-identificar-servicios-no-autorizados-por-el-sat-como-pacfd/

nejamube 07-05-2010 22:32:30

NO Delito fiscal
 
Cita:

Empezado por dado (Mensaje 363235)
Ya revise un poco mas lo de Microe y esto es lo que observe:

Microe se puede descargar una version de demo.

Para usarlo en un ambiente "real" debes solicitarlo al SAT, NO ES DESCARGA LIBRE, una vez que lo descargas estas OBLIGADO A USARLO, no puedes echarte para atras a menos que rebases los 4 millones de pesos facturados al año

Tiene una licencia restringida, es decir, NO LO PUEDES copiar a terceros, por la misma razon que no es una descarga libre.

Algo MUY IMPORTANTE, las siguientes paginas ofrecen un servicio NO AUTORIZADO POR EL SAT e incurren en un delito fiscal.

ww.factura-electronica-mexico.com.mx/
ww.enlacefiscal.com/
ww.tefacturo.com
ww.factutol.com
ww.webcomtechnology.com.mx/
solucionfactible.com/
ww.facturaelektronica.com/ (Ofrece una alternativa en modalidad para desarrollo a la medida, esto si es valido)
ww.facturadorelectronico.com/
macropro.com.mx/

(les falta una "w" al principio ya que no puedo poner ligas)

fuente : ww.facturaelectronicaenmexico.com/2010/04/como-identificar-servicios-no-autorizados-por-el-sat-como-pacfd/

Porque dices que incurren en un delito fiscal ?., no autorizados significa que el SAT no los ha aprobado porque no cumplieron con alguno de sus requisitos como redundancia en sus servidores, disponibilidad de 99.99%, confidencialidad, etc., y no necesariamente estan cometiendo delito fiscal (Fiscal se refiere a impuestos)., lo unico que estan haciendo es ofrecer una alternativa para generar los CFD y su solucion es tan valida como la que se esta platicando en este foro aplicada a Delphi., ya que en ambos casos es el emisor de los CFD el que se hace responsable, si no fuera asi tambien nosotros estariamos cometiendo delito fiscal.

Si me equivoco y en realidad es delito fiscal, mencioname por favor que articulo del Codigo Fiscal de la Federacion se esta incumpliendo, o quizas sea el anexo 20 2010 ?.

Gracias.
;)

dado 07-05-2010 22:53:48

Cita:

Empezado por nejamube (Mensaje 363237)
Porque dices que incurren en un delito fiscal ?., no autorizados significa que el SAT no los ha aprobado porque no cumplieron con alguno de sus requisitos como redundancia en sus servidores, disponibilidad de 99.99%, confidencialidad, etc., y no necesariamente estan cometiendo delito fiscal (Fiscal se refiere a impuestos)., lo unico que estan haciendo es ofrecer una alternativa para generar los CFD y su solucion es tan valida como la que se esta platicando en este foro aplicada a Delphi., ya que en ambos casos es el emisor de los CFD el que se hace responsable, si no fuera asi tambien nosotros estariamos cometiendo delito fiscal.

Si me equivoco y en realidad es delito fiscal, mencioname por favor que articulo del Codigo Fiscal de la Federacion se esta incumpliendo, o quizas sea el anexo 20 2010 ?.

Gracias.


Antes que nada, no tengo nada en contra de estas empresas, ni considero que nuestro trabajo (me refiero de los foristas en general) sean lo *unico* legal y viable, pero aqui esta mi sustento:

Para poder hacer CFD hay dos formas:

Por medios propios (este es el paraiso del CFD) en donde uno mismo con su propia computadora y SIN MANDAR UN SOLO BYTE fuera de las instalaciones genera el XML, cadena y sello. En eso es lo que trabajamos aqui.

Por Terceros AUTORIZADOS POR EL SAT, mi suposicion es que las empresas mencionadas simplemente no han podido o talvez ni siquiera han solicitado su alta como tercero autorizado. El SAT tiene aqui la lista de los autorizados :

ww.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_8951.html

Mi planteamiento es simple, esas empresas definitivamente son "terceros", es decir ellos mismos generan en SUS SERVIDORES el XML, cadena, sello, es mas ellos almacenan los CFD, los envian por email, uno no necesita hacer o almacenar nada, solo entrar en una pagina web y listo, PERO no estan en la lista de terceros autorizados.

Es muy similar a la figura de "Impresor autorizado", tu sabes, solo las imprentas autorizadas por el SAT pueden imprimir facturas de papel, claro que cualquier imprenta puede hacer el trabajo, pero no cualquiera debe.

Solo por definir "delito fiscal"....hay muchos mas delitos que solo "no pagar impuestos", por ejemplo lo de las imprentas, si una imprenta no autorizada imprime facturas "de papel" y tu las usas eso es un delito fiscal.

Insisto, no tengo nada en contra de las mencionadas paginas-empresas, solo mi planteamiento es que no estan en la lista oficial del SAT como "Terceros Autorizados"

Daniel_ASV 08-05-2010 17:12:05

Hola dado, en donde dice que macropro tiene un servidor para generar el xml, cadena, sello, que almacenamos los CFD o que los enviamos por email.


Saludos

ifarias 11-05-2010 19:29:20

Hola a todos.

Estudiando sobre la generación de documentos XML me encontré esta liga que facilita enormemente la administración del documento Factura(XML) para los que usamos Delphi, desconozco si exista alguna facilidad similar en Lazarus

La liga es delphiallimite.blogspot.com/2007/10/trabajando-con-documentos-xml-y-iii.html
En ella se explica el uso del XML Data Binding, con la cual se puede usar directamente el archivo cfdv2.xsd proporcionado por el SAT, para generar la estructura interna del documento y manipularlo fácilmente

Espero que esto ayude a la comunidad.

Saludos

Willo 12-05-2010 20:30:57

Hola a todos....

he estado leyendo todos los mensajes del hilo y ya me perdi, aun no entro a las danzas esas de la facturacion electronica, pero tengo en puerta un problema sino igual, muy muy parecido...

tengo una empresa que por ley debe presentar declaraciones de IDE, en formato XML, encriptadas y firmadas digitalmente.

el SAT tambien proporciona un certificado y una llave para ello, y aunque finalmente pude generar los archivos XML, no entiendo muy bien como debo proceder para encriptarlos (con el estandar PKCS7 ) y firmarlos digitalmente.

alguien podra proporcionarme una guia de como lograr esto?

gracias de antemano

dado 13-05-2010 17:41:20

Cita:

Empezado por Willo (Mensaje 363753)
Hola a todos....

he estado leyendo todos los mensajes del hilo y ya me perdi, aun no entro a las danzas esas de la facturacion electronica, pero tengo en puerta un problema sino igual, muy muy parecido...

tengo una empresa que por ley debe presentar declaraciones de IDE, en formato XML, encriptadas y firmadas digitalmente.

el SAT tambien proporciona un certificado y una llave para ello, y aunque finalmente pude generar los archivos XML, no entiendo muy bien como debo proceder para encriptarlos (con el estandar PKCS7 ) y firmarlos digitalmente.

alguien podra proporcionarme una guia de como lograr esto?

gracias de antemano


Hola, estuve investigando tu problema, vi en la pagina del SAT la forma en que deberia hacerse dicha declaracion y te puedo confirmar con certeza que la factura electronica NO ES igual a lo que necesitas.

Veras, la Factura Electronica maneja un certificado PKCS8 y genera una cadena original para firmarla.

Tu declaracion usa PKCS7 y NO requiere de cadena original. Claro que debe haber algunas similitudes pero definitivamente no aplican las mismas rutinas

JXJ 13-05-2010 19:26:46

y como se genera el archivo .pem

a mi me pide contraseña o me da error.
pkcs8 -inform DER -in AAA010101AAA_0408021316S.key -out AAA010101AAA.key.pem


o mejor aun usando delphi, ¿como se hace?

Mosis2k2 13-05-2010 20:57:31

Cita:

Empezado por JXJ (Mensaje 363922)
y como se genera el archivo .pem

a mi me pide contraseña o me da error.
pkcs8 -inform DER -in AAA010101AAA_0408021316S.key -out AAA010101AAA.key.pem


o mejor aun usando delphi, ¿como se hace?

te paso el codigo que yo utilice para convertir el archivo a .pem.
Código:

//---------------------------------------------------------
procedure TfrmEmpresa.KeyToPem;
var
  BatFile: TStringList;
  LlaveDerToPEM, OutFile, BatFileName: string;
begin
  //Convertimos el CERTIFICADO de formato DER a formato PEM con la siguiente instrucción de OpenSSL
  OutFile:= FolderFilesPEM + ExtractFileName(txtPrivateKey.Text)+'.pem';
  LlaveDerToPEM := 'C:\MiFactura\Bin\openssl pkcs8 -inform DER -in '+ txtPrivateKey.Text  +' -out ' + OutFile;
  //Creamos el archivo .Bat
  BatFileName:= 'C:\MiFactura\Bin\'+LlaveBat;
  BatFile:= TStringList.Create;
  BatFile.Add(LlaveDerToPEM);
  BatFile.SaveToFile(BatFileName);
  try
    WinExecAndWait32(BatFileName,1);
  except
    on E : Exception do
      ShowMessage(E.ClassName+' Se provoco la excepción : '+E.Message);
  end;
  if FileExists(OutFile) then begin
    if LengthFile(OutFile) = 0 then
      MessageDlg('Verifique que la contraseña sea correcta e intentelo nuevamente.', mtError, [mbOk], 0);
  end;
  PrivateKeyPemFile:= OutFile;
end;
//---------------------------------------------------------

Saludos.

dado 13-05-2010 23:19:20

Cita:

te paso el codigo que yo utilice para convertir el archivo a .pem.

Código:
//---------------------------------------------------------procedure TfrmEmpresa.KeyToPem;var BatFile: TStringList; LlaveDerToPEM, OutFile, BatFileName: string;begin //Convertimos el CERTIFICADO de formato DER a formato PEM con la siguiente instrucción de OpenSSL OutFile:= FolderFilesPEM + ExtractFileName(txtPrivateKey.Text)+'.pem'; LlaveDerToPEM := 'C:\MiFactura\Bin\openssl pkcs8 -inform DER -in '+ txtPrivateKey.Text +' -out ' + OutFile; //Creamos el archivo .Bat BatFileName:= 'C:\MiFactura\Bin\'+LlaveBat; BatFile:= TStringList.Create; BatFile.Add(LlaveDerToPEM); BatFile.SaveToFile(BatFileName); try WinExecAndWait32(BatFileName,1); except on E : Exception do ShowMessage(E.ClassName+' Se provoco la excepción : '+E.Message); end; if FileExists(OutFile) then begin if LengthFile(OutFile) = 0 then MessageDlg('Verifique que la contraseña sea correcta e intentelo nuevamente.', mtError, [mbOk], 0); end; PrivateKeyPemFile:= OutFile;end;//---------------------------------------------------------
Saludos.
No he probado esta rutina aunque parece muy buena, ahora, si me permites dos consejos :

1. Enmarca los nombre de archivo con comilla doble, eso te permite usar directorios con nombres largos y espacios entre ellos
2. usa la opcion -passin para pasarle la clave y que no te la pida en la ventana de MSDOS

Es decir, te recomiendo que agregues:

Código Delphi [-]
clave := InputBox('SE REQUIERE LA CLAVE','Introduzca su Clave Privada del Certificado','');
...
...
LlaveDerToPEM := 'C:\MiFactura\Bin\openssl pkcs8 -inform DER -in "'+ txtPrivateKey.Text  +'" -passin pass:' + clave + ' -out "' + OutFile +'"';
  //Creamos el archivo .Bat << nota las comillas doble " que se agregaron

//De esta forma txtPrivateKey.Text puede ser = 'c:\archivos de programa\mis documentos\es decir\nombres largos y con espacios\privatekey.key'

jourdan 14-05-2010 03:07:21

Hola a todos, estoy validando mi comprobante en la siguiente página http://www.validacfd.com.mx/validar.xsa y me dice que varias partes del mismo ya estan bien pero por ejemplo en el sello digital me manda error, estoy usando los componenntes chilkat y segun yo ya esta para que pasara sin ningun problema, estoy usando las llaves de prueba del sat, sera ese el problema, no he solicitado folios reales porque al hacerlo te obigas amandar un reporte mensual, etc. y no me quiero meter en problemas hasta que esto este funcionando, alguien me puede dar un norte de que puede estar pasando. Alguien ha logrado sacar esto adelante usando los componentes chilkat rsa? Será que necesito obtener unos folios reales para ver si pasa la prueba usando los componetes chilkat?

Aqui esta el resultado de la pagina:


Estándar de Codificación
El CFD se encuentra en estándar de codificación UTF-8 tal como se especifica en el Anexo 20
--------------------------------------------------------------------------
Encabezados
El XML contiene el encabezado válido según la W3C, que significa que inicia con '<?xml version="1.0" encoding="UTF-8"?>'
--------------------------------------------------------------------------
Namespaces
El CFD esta correctamente referenciado a la ruta publicada por el SAT en donde se encuentra el esquema XSD objeto.
--------------------------------------------------------------------------
Estructura
El CFD cumple con la estructura definida en el esquema XSD del SAT.
--------------------------------------------------------------------------Cadena Original
Se puede extraer una cadena original del contenido del CFD, a partir de la cual genera el Sello Digital.

||2.0|A|1398|2010-05-13T17:01:39|0123456789|2008|ingreso|Pago en una sola exhibición 25550.00|0.00|29638.00|JOLL680516K23|Luis Alejandro Jourdan López|Lago Guanacacha|16 |Anahuac|México|Miguel Hidalgo|D.F.|México|11320|GKM060127GP4|Grupo Krome de México, S.A. de C.V.|Lago Guanacacha 160|Col. Anáhuac|México|Miguel Hidalgo|Distrito Federal MEXICO|11320|100.00|Tarjetas de Presentacion|155.00|15500.00|200.00|Carpetas|48.00|9 00.00|30.00|Plumas Bic|15.00|450.00|IVA|16.00|4088.00|4088.00||
--------------------------------------------------------------------------
Validez del certificado
El Certificado utilizado por el emisor del CFD No fue expedido por el SAT.

La serie 10001200000000022519 del certificado no es válida
--------------------------------------------------------------------------
Fechas del certificado
La fecha del CFD esta dentro del rango de fechas de validez del Certificado del emisor del CFD, esto se hace verificando en el listado de certificados publicado por el SAT.
--------------------------------------------------------------------------
Serie y folio
El Folio y la Serie del CFD No fueron autorizados por el SAT para el Emisor del CFD.

La serie/folio es invalido.
--------------------------------------------------------------------------
Sello digital
El sello digital del CFD No es correcto. Es posible que la información contenida en su CFD haya sido alterada.

El sello digital no es correcto
--------------------------------------------------------------------------
Contenido Básico
La validación de contenido básico consiste en verificar que el contenido del CFD cumple las siguientes operaciones:
Total = Subtotal - Descuento + Impuestos trasladados - Impuestos retenidos
Importe = Valor unitario * Cantidad( de cada concepto )
Subtotal = Sumatoria de los importes de los conceptos

jourdan 14-05-2010 03:26:35

Cita:

Empezado por osmuar_exp (Mensaje 361641)
Hola, fijate que ami me pasaba lo mismo, el sello digital era invalido, intenta buscar dentro de tu cadena de sello saltos de linea, etc,,,aparte debes estar seguro de que el certificado (no autorizacion, año de autorizacion y no certificado) sean los correctos., con eso ami me soluciono el problema, saludos...

Hola, una pregunta, estoy casi seguro que estoy haciendo todo bien ya que el revisado la cadena original muchas veces, etc. estoy usando el active x de chilkat pero no logo validar el archivo en la ágina del sat, la pregunta es: tu pediste al sat folios reales y con esos archivos pudiste pasar las pruebas.
Con la llave privada, el certificado y la constraseña que da el sat para hacer pruebas no he logrado validar y no se si sea porque no cuento con el numero de autorización, ya que en año de autorizacion puese 2008 y el No. de certificado lo saque del mismo resultado del validador, alguien me puede ayudar. Muchas gracias

jourdan 14-05-2010 03:39:04

Cita:

Empezado por ifarias (Mensaje 363605)
Hola a todos.

Estudiando sobre la generación de documentos XML me encontré esta liga que facilita enormemente la administración del documento Factura(XML) para los que usamos Delphi, desconozco si exista alguna facilidad similar en Lazarus

La liga es delphiallimite.blogspot.com/2007/10/trabajando-con-documentos-xml-y-iii.html

Muchas gracias pero creo que solo funciona para las versiones architect de delphi, lo trate de hacer pero tengo delphi 6 profesional y no encontre la forma. Saludos

abartol 14-05-2010 09:31:13

Hola a todos. Como puedo saber los certificados que hay instalados en el equipo? El objetivo es mostrarlos para seleccionar uno y firmar los ficheros. Alguna idea?

Gracias a tod@s!

dado 14-05-2010 23:48:52

Cita:

Empezado por jourdan (Mensaje 363997)
Hola a todos, estoy validando mi comprobante en la siguiente página http://www.validacfd.com.mx/validar.xsa y me dice que varias partes del mismo ya estan bien pero por ejemplo en el sello digital me manda error, estoy usando los componenntes chilkat y segun yo ya esta para que pasara sin ningun problema, estoy usando las llaves de prueba del sat, sera ese el problema, no he solicitado folios reales porque al hacerlo te obigas amandar un reporte mensual, etc. y no me quiero meter en problemas hasta que esto este funcionando, alguien me puede dar un norte de que puede estar pasando. Alguien ha logrado sacar esto adelante usando los componentes chilkat rsa? Será que necesito obtener unos folios reales para ver si pasa la prueba usando los componetes chilkat?

Aqui esta el resultado de la pagina:
etc


Con los certificados de prueba del SAT se puede hacer que pase la validacion del SELLO. Y no es necesario tener folios "Reales" tampoco.

Si quieres te puedo echar la mano, mandame a mi mail patricio2000@prodigy.net.mx el archivo XML que estas tratando de validar, asi como el certificado DE PRUEBA del SAT que estas usando para firmarlo.

NOTA : NO ME MANDES ningun certificado "REAL", solo el de prueba, te lo pido porque hay como 10 o 15 certificados de prueba que tiene el SAT y si vamos a hacer pruebas debemos usar el mismo.

jourdan 19-05-2010 02:09:39

Cita:

Empezado por dado (Mensaje 364083)
Con los certificados de prueba del SAT se puede hacer que pase la validacion del SELLO. Y no es necesario tener folios "Reales" tampoco.

Si quieres te puedo echar la mano, mandame a mi mail patricio2000@prodigy.net.mx el archivo XML que estas tratando de validar, asi como el certificado DE PRUEBA del SAT que estas usando para firmarlo.

NOTA : NO ME MANDES ningun certificado "REAL", solo el de prueba, te lo pido porque hay como 10 o 15 certificados de prueba que tiene el SAT y si vamos a hacer pruebas debemos usar el mismo.

Dado, muchismas gracias por tu ofrecimiento de ayuda, afortunadamnete ya puedo sellar facturas, mi problema era algo tontisimo, en la cadena original me falto poner el total de impuestos trasladados, si les sirve de tip, compare mi cadena con la cadena que arroja el programa que validacion del sat y ahi fue donde encontre el error, por otro lado tenia registrado un cliente que en el nombre tenia 2 espacios seguidos y ese es otro problema que impide validar los documentos, hay que tener mucho cuidado con esos detalles. Nuevamente gracias

ifarias 22-05-2010 00:24:23

Problemas con el Sello
 
Cita:

Empezado por felipep (Mensaje 359478)
Anexo una modificación al código enviado en donde puedes obtener varias veces el sello al limpiar bien la memoria y puedes también obtener los datos del certificado.

Ojalá sea de utilidad

Usando las rutinas que amablemente nos proporcionó felipep, Genero la cadena, el archivo xml, etc, con su sello. Solo que al querer validarlo en la pagina del SAT, me marca que el sello no es válido.

Ya revisé la cadena y está correcta, de hecho me genera el mismo MD5 que genera el validador del SAT.

Alguien ha validado los .xml con el Sello?? . Las rutinas que utilizo son las siguientes...

Código:

function SelloDigital(llaveprivada, cadenaoriginal: widestring): String;
var
  Len    : cardinal;
    mdctx  : EVP_MD_CTX;
    inbuf  :  array [0..8192] of char;
  outbuf :  array [0..1023] of char;
    key: pEVP_PKEY;
begin
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#13,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#10,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#8,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'  ','');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' |','|');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'| ','|');
    cadenaoriginal := UTF8Encode(cadenaoriginal);

  StrPCopy(inbuf,cadenaoriginal);
    InitOpenSSL;
    key:=LoadPrivateKey(llaveprivada,'');
//  EVP_MD_CTX_init(@mdctx);
    EVP_SignInit(@mdctx,EVP_md5());
    EVP_SignUpdate(@mdctx,@inbuf,Length(inbuf));
    EVP_SignFinal(@mdctx,@outbuf,Len,key);
//  EVP_MD_CTX_cleanup(@mdctx);
    EVP_PKEY_free(key);
    FreeOpenSSL;
    result := bintobase64(@outbuf,Len);
end;

Alguna sugerencia ????

JXJ 22-05-2010 20:12:07

¿quien de los que ya validaron tanto la estructura del xml la cadena original y el sello

puede compartir esa informacion para comparar si lo ando haciendo bien.'?

gracias

ifarias 24-05-2010 08:56:49

Factura Electronica Validada en SAT
 
Cita:

Empezado por ifarias (Mensaje 364978)
Usando las rutinas que amablemente nos proporcionó felipep, Genero la cadena, el archivo xml, etc, con su sello. Solo que al querer validarlo en la pagina del SAT, me marca que el sello no es válido.

Ya revisé la cadena y está correcta, de hecho me genera el mismo MD5 que genera el validador del SAT.

Alguien ha validado los .xml con el Sello?? . Las rutinas que utilizo son las siguientes...

Código:

function SelloDigital(llaveprivada, cadenaoriginal: widestring): String;
var
  Len    : cardinal;
    mdctx  : EVP_MD_CTX;
    inbuf  :  array [0..8192] of char;
  outbuf :  array [0..1023] of char;
    key: pEVP_PKEY;
begin
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#13,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#10,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#8,'');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'  ','');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' |','|');
    cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'| ','|');
    cadenaoriginal := UTF8Encode(cadenaoriginal);

  StrPCopy(inbuf,cadenaoriginal);
    InitOpenSSL;
    key:=LoadPrivateKey(llaveprivada,'');
//  EVP_MD_CTX_init(@mdctx);
    EVP_SignInit(@mdctx,EVP_md5());
    EVP_SignUpdate(@mdctx,@inbuf,Length(inbuf));
    EVP_SignFinal(@mdctx,@outbuf,Len,key);
//  EVP_MD_CTX_cleanup(@mdctx);
    EVP_PKEY_free(key);
    FreeOpenSSL;
    result := bintobase64(@outbuf,Len);
end;

Alguna sugerencia ????

Aviso a todos.

Ya pude validar el XML completo en el Validador del SAT, la rutina que está mal es:

Código:

   
    EVP_SignUpdate(@mdctx,@inbuf,Length(inbuf));

debe ser
   
    EVP_SignUpdate(@mdctx,@inbuf,StrLen(inbuf));

Pues sí un simple cambio de Length(inbuf) que no es un string sino un array por lo que debe usarse el StrLen(inbuf) y con eso funciona todo.

Les comento que use el XML Data Binding con Delphi 7 generandolo a partir el archivo cfdv2.xsd del SAT solo requiere un truco para dar de alta los nameSpace adicionales, ya que el XML Data Binding solo puede dar de alta uno.

Claro que se puede generar el XML a mano a través del XMLDocument directamente.

El truco es :
Código:

 
  const
    // Esta cabecera es necesaria como primer renglón del archivo XML
    // y no se da de alta a traves del XML Data Binding.
    CabezaXML = '<?xml version="1.0" encoding="UTF-8"?>';
  var
    Nodo : IXMLNode;
    S : String;
    i : integer;
    Cadena : wideString;
  begin
    // donde esté nuestra llave privada ya en formato .pem....
    PuKey := 'C:\...\Factura Electronica\...\aaa010101aaa.cer.pem';
    XMLFactura := GetComprobante(XML1);
    // Alta de los nameSpace faltantes...
    Nodo := XML1.DocumentElement;
    Nodo.Attributes['xmlns:xsi']  := 'http://www.w3.org/2001/XMLSchema-instance';
    Nodo.Attributes['xsi:schemaLocation'] := 'http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd';

  with XMLFactura do begin
    Version := '2.0';
  ...
  // Generar la Cadena y luego el Sello

  XMLFactura.Sello := SelloDigital(PrKey,Cadena);
  XML1.XML.Insert(0,CabezaXML);
  // Generamos el archivo Fact1.XML  -- cambiar el nombra al necesario.
  // así com el directorio de datos donde guardamos los XML
  XML1.Active := True;
  XML1.SaveToFile('C:\...\Factura Electronica\XML\Fact1.xml');
end;

Si puedo ayudarlos en algo, con mucho gusto estoy a sus órdenes.

Saludos y mucha suerte...

dado 24-05-2010 23:26:59

Hola ifarias, mi solucion es muy parecida a la tuya y me permito hacerte una recomendacion.

El Data Binding del cfdv2.xsl se genera muy bien pero aveces resulta que, por ejemplo, el cliente NO tiene "Numero Interior" o "Colonia" es por eso que en la unidad cfdv2.pas te recomiendo hacer una busqueda y remplazo de :

Buscar : SetAttribute(
Remplazar por : if Value <> '' then SetAttribute(

entonces, por ejemplo, la rutina que graba el "Numero Exterior" quedaria asi :

Código Delphi [-]
procedure TXMLT_UbicacionFiscal.Set_NoExterior(Value: WideString);
begin
  if Value <> '' then SetAttribute('noExterior', Value);
end;

Eso te garantiza que no se vayan a grabar datos nulos o vacios, algo que por cierto no le gusta al validador......

Hay dos valores tipo integer, noAprobacion y anoAprobacion (sic), esos tienes que usar

Código Delphi [-]
if value <> 0

Tambien me permito mostrar como yo solucione los namespace extra, algo que no me deja muy convencido de tu solucion es que creas otro nodo, rompiendo un poco con el pragma del encapsulado que te da el data binding.

Código Delphi [-]
 XMLDoc.XML.Text := ''" target="_blank">http://www.sat.gob.mx/cfd/2">';
 XMLDoc.Active := True; 
 CFD := GetComprobante(XMLDoc);
 with CFD do
 begin
  SetAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
  SetAttribute('xsi:schemaLocation','http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd');
  Version := '2.0';
  Serie := ...... etc.....

dado 24-05-2010 23:32:13

En el mensaje anterior estaba tratando de introducir el siguiente codigo :

XMLDoc.XML.Text := '<?xml version="1.0" encoding="UTF-8" ?><Comprobante xmlns="http://www.sat.gob.mx/cfd/2"></Comprobante>';
XMLDoc.Active := True;
CFD := GetComprobante(XMLDoc);

with CFD do
begin
SetAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
SetAttribute('xsi:schemaLocation','http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd');
Version := '2.0';
Serie := ...........etc..................


Pero parece que el parser no lo interpreto bien........Saludos

ifarias 25-05-2010 01:40:54

dado

Gracias por los comentarios, los tomaré en cuenta.

En cuanto a generar un Nodo adicional, la realidad es que me estoy posicionando en el nodo <Comprobante> que es el raíz en ese momento, (para mi desarrollo), y agrego atributos adicionales. Esto da como resultado el siguiente código XML

Código:

<Comprobante xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd" version="2.0" serie= ....
Como puedes ver, el resultado es el mismo. Solo que obtenido de otra forma.

En cuanto al XML Data Binding, tienes toda la razón, es buena idea prevenir el que se generen datos nulos, y que fácil es que cometamos errores al codificar y tener problemas posteriores.

cancun 02-06-2010 07:10:09

Facturación eléctronica
 
Hola compañeros foristas

Al igual que ustedes tengo el mismo problema, ya que he desarrollado un sistema de punto de venta y algunos programas para facturación (para comercializadoras, agentes aduanales, etc.), el caso es que parece muy complicado el asunto.

Entre mis desarrollos he hecho un sistema de pedimentos (sirve para elaborar documentos para importar y exportar mercancias) desde hace varios años y antes de que se presente el pedimento ante la aduana, se debe validar, para lo cual genero un archivo y este hay que firmarlo electronicamente, para lo cual en las paginas de aduana se usa un programa llamado SIFEP o se puede optar por usar unas librerias para firmalos desde tu propio programa.

No sé si esto sea similar a las facturas eléctronicas, el proceso en el sistema de pedimentos es el siguiente:


Pedimentos
- se captura el pedimento
- se genera un archivo de texto con cos datos del pedimento, importador, mercancias, etc.
- Se firmar el archivo utilizando el achivo de certificado .cer y el archivo llave .key que se le ha proporcionado al agente aduanal por el SAT
- La cadena resultante (firma) se agrega al final del archivo de texto que se va a validar y se imprime en el pedimento

Facturación
- Se captura la factura
- Se genera un archivo XML con los datos del vendedor, cliente, mercancias, etc.
- Se firma el archivo
- Se imprime en la factura (se hace algo mas?)

Al final de todo esto no sé si sea lo mismo (se puedan firmar las facturas del mismo modo)
aunque sospecho que aunque se parezca no tiene nada que ver.

Por lo pronto voy a empezar por estudiar como generar el XML y todo el proceso.

nuk3zito 02-06-2010 12:48:33

Que tal cancun (jeje, que nicks tan originales :p),
Segun lo que comentas, el proceso es casi casi lo mismo. Adicionalmente a lo que tienes solo te restaría generar el xml y obtener su cadena de digestión y lo demás es pan comido pars ti según lo que tienes.

¿Que librerías son esas de las que dispones? Son gratis o de paga?

cancun 02-06-2010 17:04:08

Estan disponibles en la página:

http://www.aduanas.gob.mx/aduana_mex...144_10186.html


Viene documentado el uso de la .dll, pero falta ver si es lo mismo, aunque al ser un formato de archivo diferente puede que no funcione.

Si decides probarlo el código para usar la .dll es el siguiente:

Código:

// hay que declarar al principio de tu unidad
type
  PCURP = ^TCURP;
  TCURP = record
  curp: array[0..18] of char;
  archivoKey: array[0..255] of char;
  archivoCer: array[0..255] of char;
  password: array[0..18] of char
end;

// Declaras las funciones
{$R *.DFM}

                function BuscaCurpsG(const archivoOrig:pchar; const tipo:Integer;  struct_curps_g:PCURP):Integer; stdcall;
    external 'sgenc32.dll' name '_BuscaCurpsG_std@12';

                function GeneraFirmaDigitalG(const archivoOrig:pchar; const tipo:Integer;  struct_curps_g:PCURP):Integer; stdcall;
    external 'sgenc32.dll' name '_GeneraFirmaDigitalG_std@12';


// Este es el boton que ejecuta la firma

procedure TFrmConfig.btnFirmarClick(Sender: TObject);
var
    archivo: array [0..250] of Char;
    PReg: PCURP;
    Arch, Er:Integer;
begin
      StrPCopy(archivo,FieldByName('Ruta').AsString+'\'+'m'+Patente+StrZero(Arch,3)+'.'+StrZero(DayOfTheYear(Date),3));
      GetMem(PReg, SizeOf(TCURP) * 10);
      Er:=BuscaCurpsG(archivo, 0, PReg);
      StrPCopy(PReg.archivoKey,ArchivoKey);
      StrPCopy(PReg.archivoCer,ArchivoCer);
      StrPCopy(Preg.password,Clave);
      Er:=GeneraFirmaDigitalG(archivo, 0, PReg);
      if Er=0 then
        Mensaje('Se ha firmado correctamente el archivo: '+archivo,'Firma exitosa',mb_Ok)
      else
        MensajeError('Error al procesar la Firma: '+IntToStr(Er),'Error');
end;

Las variables usadas son:

archivo ruta y nombre del archivo a firmar
ArchivoKey Ruta y nombre del archivo con extensión .key
ArchivoCer Ruta y nombre del archivo con extensión .cer
Clave Password para la firma

dado 02-06-2010 18:52:16

Pues el asunto de cancun si se parece mucho a lo de la factura electronica.

Ahora, (ya estoy como en los concursos de television) cual es la pregunta? es decir, parece que tienes todo resuelto, tienes la dll, la forma de usarla dentro de Delphi y no parece muy dificil y lo mejor de todo, ya tienes un sistema de pedimentos desarrollado desde hace unos años.....

En donde te atoraste?

cancun 02-06-2010 20:02:00

Bueno, no me he atorado en nada aun pues todavía no empiezo, solo estoy investigando como va el asunto y el primer problema que encuentro es para generar el archivo XML ya que es algo nuevo para mí, en unos dias debo terminar unos pendientes y entonces me meteré de lleno en este tema y estaré dando lata por aquí.

He puesto el código que utilizo por si a alguien le interesa hacer la prueba y nos comente el resultado.

cknox 07-06-2010 05:36:54

Cita:

Empezado por jourdan (Mensaje 364550)
Dado, muchismas gracias por tu ofrecimiento de ayuda, afortunadamnete ya puedo sellar facturas, mi problema era algo tontisimo, en la cadena original me falto poner el total de impuestos trasladados, si les sirve de tip, compare mi cadena con la cadena que arroja el programa que validacion del sat y ahi fue donde encontre el error, por otro lado tenia registrado un cliente que en el nombre tenia 2 espacios seguidos y ese es otro problema que impide validar los documentos, hay que tener mucho cuidado con esos detalles. Nuevamente gracias

yo tambien estoy empleando chilkat para generar el sello digital con rsa, pero la validacion de hacienda no logro pasarla, ya verifique y corregi los errores de la cadena original y su hash.
Ya que solucionaste esto usando chilkat podrias indicarme cual metodo empleaste? aki anexo los metodos que yo emplee.
saludos
(codigo en vb6)

Código:


'Carga del Modulo de Encriptacion RSA
  Dim rsa As New ChilkatRsa
'  Dim success As Long
 
  'Carga de la Llave Privada y su contraseña
  Dim privKey As New privateKey
  'success = privKey.LoadPkcs8EncryptedFile("aaa010101aaa_CSD_01.key", "a0123456789")
  success = privKey.LoadPkcs8EncryptedFile(Trim(gstrRutKey), Trim(gstrPasKey))
  If (success <> 1) Then
    MsgBox privKey.LastErrorText
    Exit Function
  End If
 
  'Exportar llave Privada a Formato XML
  Dim privKeyXml As String
  privKeyXml = privKey.GetXml 'GetXml()
  success = rsa.ImportPrivateKey(privKeyXml)
  If (success <> 1) Then
    MsgBox rsa.LastErrorText
    Exit Function
  End If
'  Text3 = vbNullString
'  Text3.Text = privKeyXml
 
  'Definición de Tipo de Salida (Base64)
  rsa.EncodingMode = "base64"
  'Definicion del tipo de conversion de caracteres a "utf-8"
  rsa.Charset = "utf-8"
 
  rsa.ImportPrivateKey privKeyXml  'publicKey
 
  'Proceso de Encriptación usando (cadena original digerida) y (llave privada + contraseña)
  Dim usePrivateKey As Long
  usePrivateKey =1
  Dim encryptedStr As String
'metodo1: cifrando wDigest que contiene la cadena original reducida con MD5 en HEX
  encryptedStr = rsa.EncryptStringENC(Trim(wDigest), usePrivateKey)
'metodo2: lo emplee erroneamente
'  encryptedStr = rsa.SignStringENC(Trim(wDigest), "sha-1")
'metodo2: intento que digiera y cifre en un mismo paso con el parametros de la cadena original y "md5"
'  encryptedStr = rsa.SignStringENC(Trim(wCadOri), "md5")

cualquier sugerencia es bienvenida

ifarias 07-06-2010 05:55:13

cknox

No veo como estas tratando la cadena original, asegúrate de que sea correcta, como primer paso.
y que sea igual a la que genera el SAT, si hay diferencias, por ahí te puedes ir.

Saludos

cknox 07-06-2010 06:40:09

La cadena original ya esta bien, la genero independiente al xml, es decir manualmente segun el anexo 20, e incluso ya compare la salida que lee el validador de el SAT contra la mía, y ya coinciden inclusive los MD5 generado.

el codigo para generar la cadena original es un poco larga, asi que demos por hecho que esta correcta, dado que la validacion la acepta:

Cita:

El sello del comprobante presenta problemas:
Comprobante D:\KNOX\dmp\programa\RFC_CFD_NC1_20100606.xml leido exitosamente
Validando encodingComprobante expresado en UTF-8
Realizando validación del sello con un certificado externo
Certificado usado : 10001200000000022517
Certificado reportado : 10001200000000022517
Cadena original:
||XXXX||
Digestión MD5 de cadena como HEX:
54ff615657eeb4ae0eaaf7b8e5047955
El sello del comprobante no es válido
coinciden completamente las cadenas originales que genera SAT de mi archivo xml como el que uso yo para la generacion del sello.
ahora bien, regresando al uso de chilkat, si aun quieres verlo la reduccion la hago asi:

Código:


Dim crypt As New ChilkatCrypt2
Dim wDigest As String
 
'  La Salida de datos será en formato hexadecmal
crypt.EncodingMode = "hex" '"base64"
'  El Formato de conversión para caracteres especiales, será en "utf-8" como establece el SAT

crypt.Charset = "utf-8"
crypt.HashAlgorithm = "md5"
 
Dim hashStr As String
 
'wCadOri es la variable que contiene la cadena original generada en otra funcion; y que introduzco en esta funcion como parametro
hashStr = LCase(crypt.HashStringENC(Trim(wCadOri)))
wDigest = hashStr 'contiene la cadena original digerida segun estandar SAT

A continuacion sigue el código que anexe anteriormente.

cuando generé el xml no inclui el valor certificado que es opcional.
por lo cual en la validacion me pide el certificado(*.cer) y me genera la lectura.

tengo duda si es forzoso que incluya el certificado en formato hex.
Pero estoy casi seguro que el problema radica en el metodo de chilkat que empleo:

EncryptStringENC(txt, usePrivateKey)
SignStringENC(txt, "SHA-1"|"MD5"|"MD2"|"SHA-256"|"SHA-384"|"SHA-512" )
OpenSslSignStringENC(txt)

estoy empezando a creer que debo emplear la tercera, pero parece que necesito investigar el modo de emplearla.

Espero haberme explicado lo suficientemente bien.
saludos y nuevamente sigo esperando comentarios

NOTA DE EDICION: modifique el nombre del xml y la cadena original x contener informacion confidencial que no me pertenece.
Aclaración: el codigo que empleo es una adaptacion a mis necesidades, originalmente proviene de los ejemplos que provee chilkat a sus clientes.

cknox 07-06-2010 08:33:49

exito!!!
 
Finalmente, despues de muchas horas, de leer codigos, referencias de cada uno de los activeX de chilkat, encontre iluminacion divina y me encontre con un tema llamado:"Duplicate openssl dgst -md5 -sign myKey.pem something.txt | openssl enc -base64 -A"
Cita:

example-code.com/vb/rsa_rsa_openssl_sign.asp
El contenido de esa pagina resolvio mi problema y efectivamente era debido al metodo rsa usado.
colegas, chilkat funciona, y aunk mi codigo es vb6, se supone que es compatible con delphi como lo debio haber comprobado jourdan
suerte a los demas. depues de todo cuando estudiaba mi primer lenguaje fue turbo pascal, y luego delphi

mesquivelh 09-06-2010 19:27:42

Addenda
 
Estoy usando el código publicado aquí con Delphi 2007, todo estaba bien hasta que intenté agragar una addenda a mi documento XML.

Lo hize de éste modo:

CFD.Addenda := 'CADENA|ADDENDA';

Y delphi me devuelve un error:

[DCC Error] Main.pas(767): E2129 Cannot assign to a read-only property

Entonces lo hize de éste modo:

CFD:Addenda.Text := 'CADENA|ADDENDA';

y delphi me lo genera bien, pero al validar en el SAT obtengo éste error:

El sello del comprobante es válido:
Se presentaron los siguientes errores al validar la estructura del comprobante \Bin\FacturaSello.xml
Error: cvc-complex-type.2.3: Element 'Addenda' cannot have character [children], because the type's content type is element-only.

¿Alguién me puede orientar sobre cómo agregar la addenda sin obtener errores?

odrack 09-06-2010 21:07:14

Saludos compañeros!

Estoy comenzando a desarrollar la facturacion electronica, no he logrado entender aun paso por paso cual es el procedimiento que pide el SAT,

1. Generar la cadena original
2. Generar xml
3. Sellar la cadena

He ledio lo que pide hacienda pero no logro entender que se tiene que hacer primero, ya tengo perfectamente entendido que se necesita la key y el cer junto con la FEA, que sigue despues?.

Desde ya, gracias por sus aportes!:D

dado 09-06-2010 23:25:28

Cita:

Empezado por mesquivelh (Mensaje 366742)
Estoy usando el código publicado aquí con Delphi 2007, todo estaba bien hasta que intenté agragar una addenda a mi documento XML.

Lo hize de éste modo:

CFD.Addenda := 'CADENA|ADDENDA';

Y delphi me devuelve un error:

[DCC Error] Main.pas(767): E2129 Cannot assign to a read-only property

Entonces lo hize de éste modo:

CFD:Addenda.Text := 'CADENA|ADDENDA';

y delphi me lo genera bien, pero al validar en el SAT obtengo éste error:

El sello del comprobante es válido:
Se presentaron los siguientes errores al validar la estructura del comprobante \Bin\FacturaSello.xml
Error: cvc-complex-type.2.3: Element 'Addenda' cannot have character [children], because the type's content type is element-only.

¿Alguién me puede orientar sobre cómo agregar la addenda sin obtener errores?

Basicamente lo que te dice la validacion es que no esta bien formada la Addenda.

Yo tengo la "Addenda AMIS", es la que usan las empresas de Seguros como Mapfre, Zurich, Qualitas, etc etc

Para que empresa estas tratando de implementar la Addenda?, hay decenas, Chedraui, Soriana, Chrysler, AMECE, Liverpool, etc etc y mas etc

dado 09-06-2010 23:38:22

Cita:

Empezado por odrack (Mensaje 366767)
Saludos compañeros!

Estoy comenzando a desarrollar la facturacion electronica, no he logrado entender aun paso por paso cual es el procedimiento que pide el SAT,

1. Generar la cadena original
2. Generar xml
3. Sellar la cadena

He ledio lo que pide hacienda pero no logro entender que se tiene que hacer primero, ya tengo perfectamente entendido que se necesita la key y el cer junto con la FEA, que sigue despues?.

Desde ya, gracias por sus aportes!:D

Casi, pero en otro orden.

0. Procesas el Certificado que te da el SAT, de ahi obtienes la vigencia y el numero de serie

1. Generas el XML, con los datos de tu empresa, del cliente, de los productos o servicios y con el numero de serie del certificado y un monton de datos mas

2. A partir del XML generas la "Cadena Original"

3. La Cadena Original la digieres con MD5

4. La Digestion MD5 te arroja una cadena de caracteres hexadecimales, esta cadena la firmas usando la Llave Privada. Existen algunas librerias que hacen el paso 3 y 4 en una sola instruccion.

5. Normalmente la firma es binaria, tienes que convertirla a Base64

6. Ese sello se lo pegas al XML que generaste en el paso 1
voila....tienes tu factura digital (expresado en XML)

Facil no? je je je

Ya en serio, estos son los pasos, como ves si son un poco laboriosos y "obscuros". Yo ya tengo la solucion en Delphi 7. Si quieres mandame un mensaje a patrick2000@prodigy.net.mx para ver como te puedo ayudar mas.


La franja horaria es GMT +2. Ahora son las 18:43:34.

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