public static string ReceiptSignature(this CreateFiscalCheckRequest parameters)
        {
            //------------------------ TEST ---------------------------------------------------------
            // проверка
            //using (var sha256 = SHA256.Create())
            //{
            //    var Shop_IDP = sha256.ComputeHash(Encoding.UTF8.GetBytes(parameters.ShopID));
            //    var PaymentAttemptID = sha256.ComputeHash(Encoding.UTF8.GetBytes(parameters.PaymentAttemptID));
            //    var Subtotal_P = sha256.ComputeHash(Encoding.UTF8.GetBytes(parameters.Subtotal.ToString("F2", CultureInfo.InvariantCulture)));
            //    var Receipt = sha256.ComputeHash(Encoding.UTF8.GetBytes(parameters.Receipt));
            //    var Password = sha256.ComputeHash(Encoding.UTF8.GetBytes(parameters.Password));

            //    Console.WriteLine($"ShopID={Byte2HexString(Shop_IDP)}");
            //    Console.WriteLine($"PaymentAttemptID={Byte2HexString(PaymentAttemptID)}");
            //    Console.WriteLine($"Subtotal={Byte2HexString(Subtotal_P)}");
            //    Console.WriteLine($"Receipt={Byte2HexString(Receipt)}");
            //    Console.WriteLine($"Password={Byte2HexString(Password)}");
            //}
            //--------------------------------------------------------------------------------------

            using (var sha256 = SHA256.Create())
            {
                var parts = parameters.GetParts()
                            .Select(p => p.SignPart(sha256))
                            .ToArray();

                var signature = string.Join("&", parts).Sign(sha256).ToUpper();
                return(signature);
            }
        }
        public static string Signature(this CreateFiscalCheckRequest parameters)
        {
            //------------------------ TEST ---------------------------------------------------------
            // проверка
            //using (var md5 = MD5.Create())
            //{
            //    var shopID = md5.ComputeHash(Encoding.UTF8.GetBytes(parameters.ShopID));
            //    var paymentAttemptID = md5.ComputeHash(Encoding.UTF8.GetBytes(parameters.PaymentAttemptID));
            //    var subtotal = md5.ComputeHash(Encoding.UTF8.GetBytes(parameters.Subtotal.ToString("F2", CultureInfo.InvariantCulture)));
            //    var password = md5.ComputeHash(Encoding.UTF8.GetBytes(parameters.Password));

            //    Console.WriteLine($"ShopID={Byte2HexString(shopID)}");
            //    Console.WriteLine($"PaymentAttemptID={Byte2HexString(paymentAttemptID)}");
            //    Console.WriteLine($"Subtotal={Byte2HexString(subtotal)}");
            //    Console.WriteLine($"Password={Byte2HexString(password)}");
            //}
            //--------------------------------------------------------------------------------------

            using (var md5 = MD5.Create())
            {
                var parts = parameters.GetParts()
                            .Select(p => p.SignPart(md5))
                            .ToArray();

                //var signature = string.Join("&", parts).Sign(md5).ToUpper();
                var signature = string.Concat(parts).Sign(md5).ToUpper();
                return(signature);
            }
        }