Adjunto la función que utilizo para generar la url del QR
Código Delphi
[-]function TdmSIGCZFE.generarQR(
_QRVersion : AnsiString; _QRId : AnsiString; _QRdFeEmiDE : AnsiString; _QRdRucRec : AnsiString; _QRdTotGralOpe : AnsiString; _QRdTotIVA : AnsiString; _QRcItems : AnsiString; _QRDigestValue : AnsiString; _QRIdCSC : AnsiString; _QRCSC : AnsiString): AnsiString; var
_cHashQR : AnsiString;
_QR,_QRCalcHash : AnsiString;
begin
_QR := 'nVersion='+_QRVersion +'&' +
'Id='+_QRId+'&' +
'dFeEmiDE='+ lowercase((String2Hex(_QRdFeEmiDE))) +'&' + ''+_QRdRucRec +'&' +
'dTotGralOpe='+_QRdTotGralOpe + '&' +
'dTotIVA='+ _QRdTotIVA + '&' +
'cItems='+ _QRcItems + '&' +
'DigestValue=' + lowercase((String2Hex(_QRDigestValue))) + '&' + 'IdCSC=' + _QRIdCSC;
_QRCalcHash := _QR + _QRCSC; _cHashQR := GetStrHashSHA256(_QRCalcHash);
_QR := _QR + '&cHashQR=' + _cHashQR;
if idAmbienteActual = 1 then _QR := urlQRPrueba + _QR
else if idAmbienteActual = 2 then _QR := urlQRProduccion + _QR;
result := StringReplace(_QR,'&','&',[rfReplaceAll, rfIgnoreCase]); 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;