Ver Mensaje Individual
  #5  
Antiguo 20-09-2022
JCz JCz is offline
Miembro
 
Registrado: oct 2021
Posts: 29
Reputación: 0
JCz Va por buen camino
Adjunto la función que utilizo para generar la url del QR

Código Delphi [-]
function TdmSIGCZFE.generarQR(
                              _QRVersion : AnsiString;                      // Version del Manual Técnico = 150
                              _QRId : AnsiString;                             // código CDC string de 44 caracteres 
                              _QRdFeEmiDE : AnsiString;                 // Fecha emision del D.E.
                              _QRdRucRec : AnsiString;                   // RUC del contribuyente
                              _QRdTotGralOpe : AnsiString;             // importe total de la operación
                              _QRdTotIVA : AnsiString;                   // importe del IVA de la operación
                              _QRcItems : AnsiString;                    // cantidad de items facturado
                              _QRDigestValue : AnsiString;            // Digest de la firma
                              _QRIdCSC : AnsiString;                    // id del Codigo CSC facilitado por la SET para la generación de la url (puede haber 2)
                              _QRCSC : AnsiString): AnsiString;    // Código CSC facilitado por la SET para la generación de la url  (puede haber 2)
var
      _cHashQR : AnsiString;
      _QR,_QRCalcHash : AnsiString;
begin

      _QR := 'nVersion='+_QRVersion +'&' +
              'Id='+_QRId+'&' +
              'dFeEmiDE='+ lowercase((String2Hex(_QRdFeEmiDE))) +'&' +   //convertimos la fecha en su valor hexadecimal
              ''+_QRdRucRec +'&' +
              'dTotGralOpe='+_QRdTotGralOpe + '&' +
              'dTotIVA='+ _QRdTotIVA + '&' +
              'cItems='+ _QRcItems + '&' +
              'DigestValue=' + lowercase((String2Hex(_QRDigestValue))) + '&' +  //convertimos el digest de la firma en su valor hexadecimal
              'IdCSC=' + _QRIdCSC;


      _QRCalcHash := _QR + _QRCSC;                              // al valor calculado en paso anterior se adiciona el codigo CSC
      _cHashQR    :=  GetStrHashSHA256(_QRCalcHash);  // el resultado del paso anterior lo Generaramos el Hash

      _QR := _QR + '&cHashQR=' + _cHashQR;

      if idAmbienteActual = 1 then // ambiente de prueba
            _QR := urlQRPrueba + _QR
      else  if idAmbienteActual = 2 then  // ambiente de producción
            _QR := urlQRProduccion + _QR;

      result := StringReplace(_QR,'&','&',[rfReplaceAll, rfIgnoreCase]);  // escapamos el & por '&'
end;

abajo las otras funciones utilizadas


Código Delphi [-]
function String2Hex(const Buffer: AnsiString): string;
begin
  SetLength(Result, Length(Buffer) * 2);
  BinToHex(PAnsiChar(Buffer), PChar(Result), Length(Buffer));
end;

Código Delphi [-]
function GetStrHashSHA256(Str: String): String;
var
  HashSHA: THashSHA2;
begin
    HashSHA := THashSHA2.Create;
    HashSHA.GetHashString(Str);
    result := HashSHA.GetHashString(Str,SHA256);
end;
Responder Con Cita