Libreria TFacturaElectronicaBambu para versions D6-XE

105 views
Skip to first unread message

André Ladab Serrot

unread,
Jul 20, 2017, 3:35:07 PM7/20/17
to TFacturaElectronica
Saludos a todos aquí dejo la Librería para versiones Delphi D6-XE 

Solo necesito que alguien ayude porfavor con las siguientes Unidades para que este Funcional  Si ustedes marcan como comentarios"//" esas Lineas la Librería compila sin errores 

Reemplace las units System.Hash; por IdHash

No soy muy experto manejando IdHash, esta marcado los siguientes errores en las siguiente unidades

[DCC Error] PAC.Ecodex.ManejadorDeSesion.pas(145): E2003 Undeclared identifier: 'GetDefault'

[DCC Error] PAC.Ecodex.ManejadorDeSesion.pas(145): E2076 This form of method call only allowed for class methods


1.- Facturacion.OpenSSL.pas

function TOpenSSL.CalcularSHA1(const aCadena: TCadenaUTF8): TCadenaUTF8;
var
.
.
.
begin
 {$IF CompilerVersion >= 20}
    Result:= TIdHash.HashString(aCadena,GetDefault); 
  {$ELSE}
    raise Exception.Create('Soporte SHA1 nativo para versiones anteriores no implementado');

2.- PAC.Ecodex.ManejadorDeSesion

function TEcodexManejadorDeSesion.ObtenerNuevoTokenDeUsuario: String;
Var
.
.
.
Begin
  try
     tokenDeServicio := ObtenerNuevoTokenDeServicio(fCredenciales.RFC);

     // El token de usuario será la combinacion del token de servicio y el ID del integrador
     // concatenados por un "pipe" codificados con el agoritmo SHA1
     Result:= TIdHash.HashString(fCredenciales.DistribuidorID + '|' + tokenDeServicio, GetDefault); //THashSHA1.GetHashString(fCredenciales.DistribuidorID + '|' + tokenDeServicio);
  except
    On E:Exception do
      raise;
  end;



Espero sus aportaciones, gracias

Atte

Andrés Badal

Luis Fernando Acosta Zepeda

unread,
Oct 18, 2017, 4:30:47 AM10/18/17
to TFacturaElectronica
buen día Andrés! 
no se si ya lo corregiste yo estoy atorado ahí, si cambias:
Result:= TIdHash.HashString(aCadena,GetDefault);
por:
Result:= TIdHash.HashString(aCadena,nil);
ya no marca error pero de ahí pone otro error
si encontraste solución te agradeceré me orientes
Saludos

Ing. J. Arturo Parra

unread,
Jan 9, 2018, 11:46:00 AM1/9/18
to TFacturaElectronica
Por si a alguien le es útil

Este es el código que utilizo para hacer la digestión sin utilizar System.Hash, comenté el código que viene en el ejemplo (master) y agrego comentarios de el código que se utiliza para reemplazar el otro código.

function TOpenSSL.CalcularSHA1(const aCadena: TCadenaUTF8): TCadenaUTF8;
var
  Tam, Len: Cardinal;
  {$IF CompilerVersion >= 20}
      Inbuf: Array[0..1024] of AnsiChar;
      Outbuf: array[0..EVP_MAX_MD_SIZE] of AnsiChar;
  {$ELSE}
      Inbuf: Array[0..1024] of Char;
      Outbuf: array [0..1024] of Char;
  {$IFEND}
  ctx : EVP_MD_CTX;
  res: Integer;
  sData, sha1delphi: String;
  hashbytes: TBytes;
  MessageDigest: TIdHashMessageDigest5;               // <-- Agregado objeto para el hash
begin
  // Ref: http://www.disi.unige.it/person/FerranteM/delphiopenssl/example2.html
  // Usamos la funcion nativa de Delphi para SHA1
  {$IF CompilerVersion >= 20}
    MessageDigest:=TIdHashMessageDigest5.Create;      // <-- Se crea la instancia para hacer la digestión
    MessageDigest.HashString(aCadena, System.SysUtils.TEncoding.Default); //*Era:Result := THashSHA1.GetHashString(aCadena);
  // Usamos la funcion nativa de Delphi para SHA1
  //{$IF CompilerVersion >= 20}
  //  Result := THashSHA1.GetHashString(aCadena);

  {$ELSE}
    raise Exception.Create('Soporte SHA1 nativo para versiones anteriores no implementado');
    // NOTA: El siguiente codigo no funciona aun...
    Tam:=Length(aCadena); // Obtenemos el tamaño de la cadena original
    StrPLCopy(inbuf, aCadena, Tam);
    EVP_DigestInit(@ctx, EVP_sha1());
    EVP_DigestUpdate(@ctx, @Inbuf, StrLen(Inbuf));
    EVP_DigestFinal(@ctx, PByte(@Outbuf), Len);
    Result := BinToBase64(@Outbuf, Length(Outbuf));
  {$IFEND}
end;
Reply all
Reply to author
Forward
0 new messages