Ejemplo n.º 1
0
        /// <summary>
        /// Collective collect
        /// </summary>
        public static async Task <String> Init_HKDME(FinTsClient client, DateTime SettlementDate, List <Pain00800202CcData> PainData, string NumberofTransactions, decimal TotalAmount)
        {
            Log.Write("Starting job HKDME: Collective collect money");

            client.SEGNUM = SEGNUM.SETInt(3);

            var TotalAmount_ = TotalAmount.ToString().Replace(",", ".");

            var    connectionDetails = client.ConnectionDetails;
            string segments          = "HKDME:" + client.SEGNUM + ":2+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+" + TotalAmount_ + ":EUR++" + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.002.02+@@";

            var message = pain00800202.Create(connectionDetails.AccountHolder, connectionDetails.Iban, connectionDetails.Bic, SettlementDate, PainData, NumberofTransactions, TotalAmount);

            segments = segments.Replace("@@", "@" + (message.Length - 1) + "@") + message;

            if (Helper.IsTANRequired("HKDME"))
            {
                client.SEGNUM = SEGNUM.SETInt(4);
                segments      = HKTAN.Init_HKTAN(client, segments);
            }

            var TAN = await FinTSMessage.Send(client, FinTSMessage.Create(client, client.HNHBS, client.HNHBK, segments, client.HIRMS));

            client.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(client, TAN);

            return(TAN);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Collect
        /// </summary>
        public static string Init_HKDSE(ConnectionDetails connectionDetails, string Payer, string PayerIBAN, string PayerBIC, decimal Amount, string Usage, DateTime SettlementDate, string MandateNumber, DateTime MandateDate, string CreditorIDNumber)
        {
            Log.Write("Starting job HKDSE: Collect money");

            SEG.NUM = SEGNUM.SETInt(4);

            string segments = "HKDSE:" + SEG.NUM + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.002.02+@@";

            var message = pain00800202.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, Payer, PayerIBAN, PayerBIC, Amount, Usage, SettlementDate, MandateNumber, MandateDate, CreditorIDNumber);

            segments = segments.Replace("@@", "@" + (message.Length - 1) + "@") + message;

            if (Helper.IsTANRequired("HKDSE"))
            {
                SEG.NUM  = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(segments);
            }

            var TAN = FinTSMessage.Send(connectionDetails.Url, FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM));

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(TAN);

            return(TAN);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Account transactions in SWIFT-format
        /// </summary>
        /// <param name="connectionDetails">ConnectionDetails object must atleast contain the fields: Url, HBCIVersion, UserId, Pin, Blz, Account, IBAN, BIC</param>
        /// <param name="anonymous"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns>
        /// Transactions
        /// </returns>
        public static List <SWIFTStatement> Transactions(ConnectionDetails connectionDetails, bool anonymous, DateTime?startDate = null, DateTime?endDate = null)
        {
            var swiftStatements = new List <SWIFTStatement>();

            if (Transaction.INI(connectionDetails, anonymous) == true)
            {
                var startDateStr = startDate?.ToString("yyyyMMdd");
                var endDateStr   = endDate?.ToString("yyyyMMdd");

                // Success
                var BankCode = Transaction.HKKAZ(connectionDetails, startDateStr, endDateStr, null);

                var Transactions = string.Empty;

                if (BankCode.Contains("HNSHA"))
                {
                    Transactions = ":20:STARTUMS" + Helper.Parse_String(BankCode, ":20:STARTUMS", "'HNSHA");
                }
                else // -> Postbank finishes with HNHBS
                {
                    Transactions = ":20:STARTUMS" + Helper.Parse_String(BankCode, ":20:STARTUMS", "'HNHBS");
                }

                swiftStatements.AddRange(MT940.Serialize(Transactions, connectionDetails.Account));


                string BankCode_ = BankCode;
                while (BankCode_.Contains("+3040::"))
                {
                    Helper.Parse_Message(BankCode_);

                    var Startpoint = new Regex(@"\+3040::[^:]+:(?<startpoint>[^']+)'").Match(BankCode_).Groups["startpoint"].Value;

                    BankCode_ = Transaction.HKKAZ(connectionDetails, startDateStr, endDateStr, Startpoint);

                    var Transactions_ = ":20:STARTUMS" + Helper.Parse_String(BankCode_, ":20:STARTUMS", "'HNSHA");

                    swiftStatements.AddRange(MT940.Serialize(Transactions_, connectionDetails.Account));
                }
                return(swiftStatements);
            }
            else
            {
                Log.Write("Initialization/sync failed");
                throw new Exception("Initialization/sync failed");
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Load prepaid
        /// </summary>
        public static string Init_HKPPD(ConnectionDetails connectionDetails, int MobileServiceProvider, string PhoneNumber, int Amount)
        {
            Log.Write("Starting job HKPPD: Load prepaid");

            string segments = "HKPPD:" + SEGNUM.SETVal(3) + ":2+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+" + MobileServiceProvider + "+" + PhoneNumber + "+" + Amount + ",:EUR'";

            segments = HKTAN.Init_HKTAN(segments);

            SEG.NUM = SEGNUM.SETInt(4);

            var TAN = FinTSMessage.Send(connectionDetails.Url, FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.Blz, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM));

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(TAN);

            return(TAN);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Confirm order with TAN
        /// </summary>
        /// <param name="connectionDetails">ConnectionDetails object must atleast contain the fields: Url, HBCIVersion, UserId, Pin, Blz</param>
        /// <param name="TAN"></param>
        /// <param name="MediumName"></param>
        /// <returns>
        /// Bank return codes
        /// </returns>
        public static string TAN4(ConnectionDetails connectionDetails, string TAN, string MediumName)
        {
            var BankCode = Transaction.TAN4(connectionDetails, TAN, MediumName);

            if (BankCode.Contains("+0010::") || BankCode.Contains("+0020::"))
            {
                var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                String[] values = BankCode_.Split('+');

                string msg = string.Empty;

                foreach (var item in values)
                {
                    if (!item.StartsWith("HIRMS"))
                    {
                        msg = msg + "??" + item.Replace("::", ": ");
                    }
                }

                return(msg);
            }
            else
            {
                // Error
                var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                String[] values = BankCode_.Split('+');

                string msg = string.Empty;

                foreach (var item in values)
                {
                    if (!item.StartsWith("HIRMS"))
                    {
                        msg = msg + "??" + item.Replace("::", ": ");
                    }
                }

                Log.Write(msg);

                return(msg);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Confirm order with TAN
        /// </summary>
        /// <param name="TAN"></param>
        /// <param name="URL"></param>
        /// <param name="HBCIVersion"></param>
        /// <param name="BLZ"></param>
        /// <param name="UserID"></param>
        /// <param name="PIN"></param>
        /// <param name="MediumName"></param>
        /// <returns>
        /// Bank return codes
        /// </returns>
        public static string TAN4(string TAN, string URL, int HBCIVersion, int BLZ, string UserID, string PIN, string MediumName)
        {
            var BankCode = Transaction.TAN4(TAN, URL, HBCIVersion, BLZ, UserID, PIN, MediumName);

            if (BankCode.Contains("+0020::"))
            {
                var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                String[] values = BankCode_.Split('+');

                string msg = string.Empty;

                foreach (var item in values)
                {
                    if (!item.StartsWith("HIRMS"))
                    {
                        msg = msg + "??" + item.Replace("::", ": ");
                    }
                }

                return(msg);
            }
            else
            {
                // Error
                var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                String[] values = BankCode_.Split('+');

                string msg = string.Empty;

                foreach (var item in values)
                {
                    if (!item.StartsWith("HIRMS"))
                    {
                        msg = msg + "??" + item.Replace("::", ": ");
                    }
                }

                Log.Write(msg);

                return(msg);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Parse bank error code
        /// </summary>
        /// <param name="BankCode"></param>
        /// <returns></returns>
        public static string Parse_BankCode_Error(string BankCode)
        {
            // Error
            var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

            String[] values = BankCode_.Split('+');

            string msg = string.Empty;

            foreach (var item in values)
            {
                if (!item.StartsWith("HIRMS"))
                {
                    msg = msg + "??" + item.Replace("::", ": ");
                }
            }

            return(msg);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Transfer
        /// </summary>
        public static string Init_HKCCS(ConnectionDetails connectionDetails, string ReceiverName, string ReceiverIBAN, string ReceiverBIC, decimal Amount, string Usage)
        {
            Log.Write("Starting job HKCCS: Transfer money");

            string segments = string.Empty;

            string sepaMessage = string.Empty;

            SEG.NUM = SEGNUM.SETInt(3);

            if (Segment.HISPAS == 1)
            {
                segments    = "HKCCS:" + SEG.NUM + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03+@@";
                sepaMessage = pain00100103.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1));
            }
            else if (Segment.HISPAS == 2)
            {
                segments    = "HKCCS:" + SEG.NUM + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.002.03+@@";
                sepaMessage = pain00100203.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1));
            }
            else if (Segment.HISPAS == 3)
            {
                segments    = "HKCCS:" + SEG.NUM + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03+@@";
                sepaMessage = pain00100303.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1));
            }

            segments = segments.Replace("@@", "@" + (sepaMessage.Length - 1) + "@") + sepaMessage;

            if (Helper.IsTANRequired("HKCCS"))
            {
                SEG.NUM  = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(segments);
            }

            var message  = FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM);
            var response = FinTSMessage.Send(connectionDetails.Url, message);

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(response);

            return(response);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Transfer terminated
        /// </summary>
        public static async Task<String> Init_HKCSE(FinTsClient client, string ReceiverName, string ReceiverIBAN, string ReceiverBIC, decimal Amount, string Usage, DateTime ExecutionDay)
        {
            Log.Write("Starting job HKCSE: Transfer money terminated");
            var connectionDetails = client.ConnectionDetails;
            string segments = string.Empty;

            string sepaMessage = string.Empty;

            client.SEGNUM = SEGNUM.SETInt(3);

            if (client.HISPAS == 1)
            {
                segments = "HKCSE:" + client.SEGNUM + ":1+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03+@@";
                sepaMessage = pain00100103.Create(connectionDetails.AccountHolder, connectionDetails.Iban, connectionDetails.Bic, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, ExecutionDay);
            }
            else if (client.HISPAS == 2)
            {
                segments = "HKCSE:" + client.SEGNUM + ":1+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.002.03+@@";
                sepaMessage = pain00100203.Create(connectionDetails.AccountHolder, connectionDetails.Iban, connectionDetails.Bic, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, ExecutionDay);
            }
            else if (client.HISPAS == 3)
            {
                segments = "HKCSE:" + client.SEGNUM + ":1+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03+@@";
                sepaMessage = pain00100303.Create(connectionDetails.AccountHolder, connectionDetails.Iban, connectionDetails.Bic, ReceiverName, ReceiverIBAN, ReceiverBIC, Amount, Usage, ExecutionDay);
            }

            segments = segments.Replace("@@", "@" + (sepaMessage.Length - 1) + "@") + sepaMessage;

            if (Helper.IsTANRequired("HKCSE"))
            {
                client.SEGNUM = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(client, segments);
            }

            var message = FinTSMessage.Create(client, client.HNHBS, client.HNHBK, segments, client.HIRMS);
            var response = await FinTSMessage.Send(client, message);

            client.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(client, response);

            return response;
        }
Ejemplo n.º 10
0
        private static RsaKeyParameters MakeKey(bool isPrivateKey)
        {
            byte[] key = null;

            if (isPrivateKey)
            {
                key = Encoding.UTF8.GetBytes(Helper.Parse_String(RDH_KEYSTORE.KEY_SIGNING_PRIVATE_XML, "<Modulus>", "</Modulus"));
            }
            else
            {
                key = Encoding.GetEncoding("iso8859-1").GetBytes(RDH_KEYSTORE.KEY_SIGNING_PRIVATE);
            }

            var Exponent = new byte[] { 1, 0, 1 };

            var modulus  = new Org.BouncyCastle.Math.BigInteger(1, key);
            var exponent = new Org.BouncyCastle.Math.BigInteger(Exponent);

            return(new RsaKeyParameters(isPrivateKey, modulus, exponent));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Get banker's orders
        /// </summary>
        /// <param name="BLZ"></param>
        /// <param name="IBAN"></param>
        /// <param name="BIC"></param>
        /// <param name="URL"></param>
        /// <param name="HBCIVersion"></param>
        /// <param name="UserID"></param>
        /// <param name="PIN"></param>
        /// <param name="Anonymous"></param>
        /// <returns>
        /// Banker's orders
        /// </returns>
        public static string GetBankersOrders(int BLZ, string IBAN, string BIC, string URL, int HBCIVersion,
                                              string UserID, string PIN, bool Anonymous)
        {
            if (Transaction.INI(BLZ, URL, HBCIVersion, UserID, PIN, Anonymous) == true)
            {
                // Success
                var BankCode = Transaction.HKCSB(BLZ, IBAN, BIC, URL, HBCIVersion, UserID, PIN);

                if (BankCode.Contains("+0020::"))
                {
                    // Success
                    return(BankCode);
                }
                else
                {
                    // Error
                    var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                    String[] values = BankCode_.Split('+');

                    string msg = string.Empty;

                    foreach (var item in values)
                    {
                        if (!item.StartsWith("HIRMS"))
                        {
                            msg = msg + "??" + item.Replace("::", ": ");
                        }
                    }

                    Log.Write(msg);

                    return(msg);
                }
            }
            else
            {
                return("Error");
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Get banker's orders
        /// </summary>
        /// <param name="connectionDetails">ConnectionDetails object must atleast contain the fields: Url, HBCIVersion, UserId, Pin, Blz, IBAN, BIC</param>
        /// <param name="anonymous"></param>
        /// <returns>
        /// Banker's orders
        /// </returns>
        public static string GetBankersOrders(ConnectionDetails connectionDetails, bool anonymous)
        {
            if (Transaction.INI(connectionDetails, anonymous) == true)
            {
                // Success
                var BankCode = Transaction.HKCSB(connectionDetails);

                if (BankCode.Contains("+0020::"))
                {
                    // Success
                    return(BankCode);
                }
                else
                {
                    // Error
                    var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                    String[] values = BankCode_.Split('+');

                    string msg = string.Empty;

                    foreach (var item in values)
                    {
                        if (!item.StartsWith("HIRMS"))
                        {
                            msg = msg + "??" + item.Replace("::", ": ");
                        }
                    }

                    Log.Write(msg);

                    return(msg);
                }
            }
            else
            {
                return("Error");
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Account transactions in SWIFT-format
        /// </summary>
        /// <param name="Account"></param>
        /// <param name="BLZ"></param>
        /// <param name="IBAN"></param>
        /// <param name="BIC"></param>
        /// <param name="URL"></param>
        /// <param name="HBCIVersion"></param>
        /// <param name="UserID"></param>
        /// <param name="PIN"></param>
        /// <param name="Anonymous"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns>
        /// Transactions
        /// </returns>
        public static List <SWIFTStatement> Transactions(string Account, int BLZ, string IBAN, string BIC, string URL, int HBCIVersion,
                                                         string UserID, string PIN, bool Anonymous, DateTime?startDate = null, DateTime?endDate = null)
        {
            var swiftStatements = new List <SWIFTStatement>();

            if (Transaction.INI(BLZ, URL, HBCIVersion, UserID, PIN, Anonymous) == true)
            {
                var startDateStr = startDate?.ToString("yyyyMMdd");
                var endDateStr   = endDate?.ToString("yyyyMMdd");

                // Success
                var BankCode = Transaction.HKKAZ(Account, BLZ, IBAN, BIC, URL, HBCIVersion, UserID, PIN, startDateStr, endDateStr, null);

                var Transactions = ":20:STARTUMS" + Helper.Parse_String(BankCode, ":20:STARTUMS", "'HNSHA");

                swiftStatements.AddRange(MT940.Serialize(Transactions, Account));


                string BankCode_ = BankCode;
                while (BankCode_.Contains("+3040::"))
                {
                    Helper.Parse_Message(BankCode_);

                    var Startpoint = new Regex(@"\+3040::[^:]+:(?<startpoint>[^']+)'").Match(BankCode_).Groups["startpoint"].Value;

                    BankCode_ = Transaction.HKKAZ(Account, BLZ, IBAN, BIC, URL, HBCIVersion, UserID, PIN, startDateStr, endDateStr, Startpoint);

                    var Transactions_ = ":20:STARTUMS" + Helper.Parse_String(BankCode_, ":20:STARTUMS", "'HNSHA");

                    swiftStatements.AddRange(MT940.Serialize(Transactions_, Account));
                }
                return(swiftStatements);
            }
            else
            {
                Log.Write("Initialization/sync failed");
                throw new Exception("Initialization/sync failed");
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Rebooking
        /// </summary>
        public static string Init_HKCUM(ConnectionDetails connectionDetails, string Receiver, string ReceiverIBAN, string ReceiverBIC, decimal Amount, string Usage)
        {
            Log.Write("Starting job HKCUM: Rebooking money");

            string segments = "HKCUM:" + SEGNUM.SETVal(3) + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.002.03+@@";

            var message = pain00100203.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, Receiver, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1));

            segments = segments.Replace("@@", "@" + (message.Length - 1) + "@") + message;

            segments = HKTAN.Init_HKTAN(segments);

            SEG.NUM = SEGNUM.SETInt(4);

            var TAN = FinTSMessage.Send(connectionDetails.Url, FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM));

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(TAN);

            return(TAN);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Get terminated transfers
        /// </summary>
        public static string Init_HKCSB(ConnectionDetails connectionDetails)
        {
            Log.Write("Starting job HKCSB: Get terminated transfers");

            SEG.NUM = SEGNUM.SETInt(3);

            string segments = "HKCSB:" + SEG.NUM + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+sepade?:xsd?:pain.001.001.03.xsd'";

            if (Helper.IsTANRequired("HKCSB"))
            {
                SEG.NUM  = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(segments);
            }

            string message  = FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM);
            string response = FinTSMessage.Send(connectionDetails.Url, message);

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(response);

            return(response);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Get terminated transfers
        /// </summary>
        public static async Task <String> Init_HKCSB(FinTsClient client)
        {
            Log.Write("Starting job HKCSB: Get terminated transfers");

            client.SEGNUM = SEGNUM.SETInt(3);

            var    connectionDetails = client.ConnectionDetails;
            string segments          = "HKCSB:" + client.SEGNUM + ":1+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+sepade?:xsd?:pain.001.001.03.xsd'";

            if (Helper.IsTANRequired("HKCSB"))
            {
                client.SEGNUM = SEGNUM.SETInt(4);
                segments      = HKTAN.Init_HKTAN(client, segments);
            }

            string message  = FinTSMessage.Create(client, client.HNHBS, client.HNHBK, segments, client.HIRMS);
            string response = await FinTSMessage.Send(client, message);

            client.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(client, response);

            return(response);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Collective transfer
        /// </summary>
        public static string Init_HKCCM(ConnectionDetails connectionDetails, List <pain00100203_ct_data> PainData, string NumberofTransactions, decimal TotalAmount)
        {
            Log.Write("Starting job HKCCM: Collective transfer money");

            var TotalAmount_ = TotalAmount.ToString().Replace(",", ".");

            string segments = "HKCCM:" + SEGNUM.SETVal(3) + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + TotalAmount_ + ":EUR++" + " + urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.002.03+@@";

            var message = pain00100203.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, PainData, NumberofTransactions, TotalAmount, new DateTime(1999, 1, 1));

            segments = segments.Replace("@@", "@" + (message.Length - 1) + "@") + message;

            segments = HKTAN.Init_HKTAN(segments);

            SEG.NUM = SEGNUM.SETInt(4);

            var TAN = FinTSMessage.Send(connectionDetails.Url, FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.Blz, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM));

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(TAN);

            return(TAN);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Submit bankers order
        /// </summary>
        public static async Task <String> Init_HKCDE(FinTsClient client, string Receiver, string ReceiverIBAN, string ReceiverBIC, decimal Amount, string Usage, DateTime FirstTimeExecutionDay, TimeUnit timeUnit, string Rota, int ExecutionDay, DateTime?LastExecutionDay)
        {
            Log.Write("Starting job HKCDE: Submit bankers order");

            client.SEGNUM = SEGNUM.SETInt(3);

            var    connectionDetails = client.ConnectionDetails;
            string segments          = "HKCDE:" + client.SEGNUM + ":1+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03+@@";

            var sepaMessage = pain00100103.Create(connectionDetails.AccountHolder, connectionDetails.Iban, connectionDetails.Bic, Receiver, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1)).Replace("'", "");

            segments = segments.Replace("@@", "@" + sepaMessage.Length + "@") + sepaMessage;

            segments += "+" + FirstTimeExecutionDay.ToString("yyyyMMdd") + ":" + (char)timeUnit + ":" + Rota + ":" + ExecutionDay;
            if (LastExecutionDay != null)
            {
                segments += ":" + LastExecutionDay.Value.ToString("yyyyMMdd");
            }

            segments += "'";

            if (Helper.IsTANRequired("HKCDE"))
            {
                client.SEGNUM = SEGNUM.SETInt(4);
                segments      = HKTAN.Init_HKTAN(client, segments);
            }

            string message  = FinTSMessage.Create(client, client.HNHBS, client.HNHBK, segments, client.HIRMS);
            var    response = await FinTSMessage.Send(client, message);

            client.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(client, response);

            return(response);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Load prepaid
        /// </summary>
        public static async Task <String> Init_HKPPD(FinTsClient client, int MobileServiceProvider, string PhoneNumber, int Amount)
        {
            Log.Write("Starting job HKPPD: Load prepaid");

            client.SEGNUM = SEGNUM.SETInt(3);

            var    connectionDetails = client.ConnectionDetails;
            string segments          = "HKPPD:" + client.SEGNUM + ":2+" + connectionDetails.Iban + ":" + connectionDetails.Bic + "+" + MobileServiceProvider + "+" + PhoneNumber + "+" + Amount + ",:EUR'";

            if (Helper.IsTANRequired("HKPPD"))
            {
                client.SEGNUM = SEGNUM.SETInt(4);
                segments      = HKTAN.Init_HKTAN(client, segments);
            }

            string message = FinTSMessage.Create(client, client.HNHBS, client.HNHBK, segments, client.HIRMS);
            var    TAN     = await FinTSMessage.Send(client, message);

            client.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(client, TAN);

            return(TAN);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Submit bankers order
        /// </summary>
        public static string Init_HKCDE(ConnectionDetails connectionDetails, string Receiver, string ReceiverIBAN, string ReceiverBIC, decimal Amount, string Usage, DateTime FirstTimeExecutionDay, TimeUnit timeUnit, string Rota, int ExecutionDay)
        {
            Log.Write("Starting job HKCDE: Submit bankers order");

            string segments = "HKCDE:" + SEGNUM.SETVal(3) + ":1+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + "+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.002.03+@@";

            var message = pain00100203.Create(connectionDetails.AccountHolder, connectionDetails.IBAN, connectionDetails.BIC, Receiver, ReceiverIBAN, ReceiverBIC, Amount, Usage, new DateTime(1999, 1, 1));

            message = message.Replace("'", "") + "+" + FirstTimeExecutionDay + ":" + (char)timeUnit + ":" + Rota + ":" + ExecutionDay + "'";

            segments = segments.Replace("@@", "@" + (message.Length - 1) + "@") + message;

            segments = HKTAN.Init_HKTAN(segments);

            SEG.NUM = SEGNUM.SETInt(4);

            var TAN = FinTSMessage.Send(connectionDetails.Url, FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.Blz, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM));

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(TAN, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(TAN);

            return(TAN);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Request tan medium name
        /// </summary>
        /// <param name="connectionDetails">ConnectionDetails object must atleast contain the fields: Url, HBCIVersion, UserId, Pin, Blz</param>
        /// <returns>
        /// TAN Medium Name
        /// </returns>
        public static string RequestTANMediumName(ConnectionDetails connectionDetails)
        {
            var BankCode = Transaction.HKTAB(connectionDetails);

            if (BankCode.Contains("+0020::"))
            {
                var BankCode_ = "HITAB" + Helper.Parse_String(BankCode, "'HITAB", "'");

                var msg = BankCode;

                msg = Helper.Parse_String(msg, "+A:1", "'").Replace(":", "");

                return(msg);
            }
            else
            {
                // Error
                var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

                String[] values = BankCode_.Split('+');

                string msg = string.Empty;

                foreach (var item in values)
                {
                    if (!item.StartsWith("HIRMS"))
                    {
                        msg = msg + "??" + item.Replace("::", ": ");
                    }
                }

                Log.Write(msg);

                return(msg);
            }
        }
Ejemplo n.º 22
0
        public static List <HBCIBankMessage> Parse_BankCode(string BankCode, object pictureBox, out Image matrixImage, out Image flickerImage, int flickerWidth,
                                                            int flickerHeight, bool renderFlickerCodeAsGif)
#endif

        {
            List <HBCIBankMessage> result = new List <HBCIBankMessage>();

            flickerImage = null;
            matrixImage  = null;

            var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

            String[] values = BankCode_.Split('+');

            string msg = string.Empty;

            foreach (var item in values)
            {
                if (!item.StartsWith("HIRMS"))
                {
                    TransactionConsole.Output = item.Replace("::", ": ");
                }

                var message = Parse_BankCode_Message(item);
                if (message != null)
                {
                    result.Add(message);
                }
            }

            var HITAN = "HITAN" + Helper.Parse_String(BankCode.Replace("?'", "").Replace("?:", ":").Replace("<br>", Environment.NewLine).Replace("?+", "??"), "'HITAN", "'");

            string HITANFlicker = string.Empty;

            var processes = TANProcesses.items;

            var processname = string.Empty;

            foreach (var item in processes)
            {
                if (item.ProcessNumber.Equals(Segment.HIRMS))
                {
                    processname = item.ProcessName;
                }
            }

            // Smart-TAN plus optisch
            // chipTAN optisch
            if (processname.Equals("Smart-TAN plus optisch") || processname.Contains("chipTAN optisch"))
            {
                HITANFlicker = HITAN;
            }

            String[] values_ = HITAN.Split('+');

            int i = 1;

            foreach (var item in values_)
            {
                i = i + 1;

                if (i == 6)
                {
                    TransactionConsole.Output = TransactionConsole.Output + "??" + item.Replace("::", ": ").TrimStart();

                    TransactionConsole.Output = TransactionConsole.Output.Replace("??", " ")
                                                .Replace("0030: ", "")
                                                .Replace("1.", Environment.NewLine + "1.")
                                                .Replace("2.", Environment.NewLine + "2.")
                                                .Replace("3.", Environment.NewLine + "3.")
                                                .Replace("4.", Environment.NewLine + "4.")
                                                .Replace("5.", Environment.NewLine + "5.")
                                                .Replace("6.", Environment.NewLine + "6.")
                                                .Replace("7.", Environment.NewLine + "7.")
                                                .Replace("8.", Environment.NewLine + "8.");
                }
            }

            // chipTAN optisch
            if (processname.Contains("chipTAN optisch"))
            {
                string FlickerCode = string.Empty;

                FlickerCode = "CHLGUC" + Helper.Parse_String(HITAN, "CHLGUC", "CHLGTEXT") + "CHLGTEXT";

                FlickerCode flickerCode = new FlickerCode(FlickerCode);
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), pictureBox);
                if (!renderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    flickerImage = flickerCodeRenderer.RenderAsGif(flickerWidth, flickerHeight);
                }
            }

            // Smart-TAN plus optisch
            if (processname.Equals("Smart-TAN plus optisch"))
            {
                HITANFlicker = HITAN.Replace("?@", "??");

                string FlickerCode = string.Empty;

                String[] values__ = HITANFlicker.Split('@');

                int ii = 1;

                foreach (var item in values__)
                {
                    ii = ii + 1;

                    if (ii == 4)
                    {
                        FlickerCode = item;
                    }
                }

                FlickerCode flickerCode = new FlickerCode(FlickerCode.Trim());
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), pictureBox);
                if (!renderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    flickerImage = flickerCodeRenderer.RenderAsGif(flickerWidth, flickerHeight);
                }
            }

            // Smart-TAN photo
            if (processname.Equals("Smart-TAN photo"))
            {
                var PhotoCode = Helper.Parse_String(BankCode, ".+@", "'HNSHA");

                var mCode = new MatrixCode(PhotoCode.Substring(5, PhotoCode.Length - 5));

                matrixImage = mCode.CodeImage;
                mCode.Render(pictureBox);
            }

            // PhotoTAN
            if (processname.Equals("photoTAN-Verfahren"))
            {
                // HITAN:5:5:4+4++nmf3VmGQDT4qZ20190130091914641+Bitte geben Sie die photoTan ein+@3031@       image/pngʉPNG
                var match = Regex.Match(BankCode, @"HITAN.+@\d+@(.+)'HNHBS", RegexOptions.Singleline);
                if (match.Success)
                {
                    var PhotoBinary = match.Groups[1].Value;

                    var mCode = new MatrixCode(PhotoBinary);

                    matrixImage = mCode.CodeImage;
                    mCode.Render(pictureBox);
                }
            }

            return(result);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Parse accounts and store informations
        /// </summary>
        /// <param name="Message"></param>
        /// <param name="Items"></param>
        /// <returns></returns>
        public static bool Parse_Accounts(string Message, List <AccountInformations> Items)
        {
            try
            {
                string          pattern = $@"HIUPD.*?$";
                MatchCollection result  = Regex.Matches(Message, pattern, RegexOptions.Multiline);

                for (int ctr = 0; ctr <= result.Count - 1; ctr++)
                {
                    string Accountnumber   = null;
                    string Accountbankcode = null;
                    string Accountiban     = null;
                    string Accountuserid   = null;
                    string Accounttype     = null;
                    string Accountcurrency = null;
                    string Accountowner    = null;
                    List <AccountPermissions> Accountpermissions = new List <AccountPermissions>();

                    // HIUPD:165:6:4+0123456789::280:10050000+DE22100500000123456789+5985932562+10+EUR+Meier+Peter+Sparkassenbuch Gold
                    var match = Regex.Match(result[ctr].Value, @"HIUPD.*?\+(.*?)\+(.*?)\+(.*?)\+(.*?)\+(.*?)\+(.*?)\+(.*?)\+(.*?)\+");
                    if (match.Success)
                    {
                        var accountInfo = match.Groups[1].Value;
                        var matchInfo   = Regex.Match(accountInfo, @"(\d+):(.*?):280:(\d+)");
                        if (matchInfo.Success)
                        {
                            Accountnumber   = matchInfo.Groups[1].Value;
                            Accountbankcode = matchInfo.Groups[3].Value;
                        }

                        Accountiban     = match.Groups[2].Value;
                        Accountuserid   = match.Groups[3].Value;
                        Accounttype     = match.Groups[4].Value;
                        Accountcurrency = match.Groups[5].Value;
                        Accountowner    = $"{match.Groups[6]} {match.Groups[7]}";
                        Accounttype     = match.Groups[8].Value;

                        if (Accountiban?.Length > 2)
                        {
                            // Account permissions
                            string          pat = "\\+.*?:1";
                            MatchCollection res = Regex.Matches(result[ctr].Value, pat, RegexOptions.Singleline);

                            for (int c = 0; c <= res.Count - 1; c++)
                            {
                                if (res[c].Value.Length < 10)
                                {
                                    Accountpermissions.Add(new AccountPermissions
                                    {
                                        Segment     = res[c].Value.Replace("+", "").Replace(":1", ""),
                                        Description = AccountPermissions.Permission(res[c].Value.Replace("+", "").Replace(":1", ""))
                                    });
                                }
                            }
                        }
                    }
                    else // Fallback
                    {
                        Accountiban  = "DE" + Helper.Parse_String(result[ctr].Value, "+DE", "+");
                        Accountowner = Helper.Parse_String(result[ctr].Value, "EUR+", "+");
                        Accounttype  = Helper.Parse_String(result[ctr].Value.Replace("++EUR+", ""), "++", "++");

                        if (Accountiban?.Length > 2)
                        {
                            // Account permissions
                            string          pat = "\\+.*?:1";
                            MatchCollection res = Regex.Matches(result[ctr].Value, pat, RegexOptions.Singleline);

                            for (int c = 0; c <= res.Count - 1; c++)
                            {
                                if (res[c].Value.Length < 10)
                                {
                                    Accountpermissions.Add(new AccountPermissions
                                    {
                                        Segment     = res[c].Value.Replace("+", "").Replace(":1", ""),
                                        Description = AccountPermissions.Permission(res[c].Value.Replace("+", "").Replace(":1", ""))
                                    });
                                }
                            }
                        }
                    }

                    if (Accountnumber?.Length > 2 || Accountiban?.Length > 2)
                    {
                        Items.Add(new AccountInformations()
                        {
                            Accountnumber      = Accountnumber,
                            Accountbankcode    = Accountbankcode,
                            Accountiban        = Accountiban,
                            Accountuserid      = Accountuserid,
                            Accounttype        = Accounttype,
                            Accountcurrency    = Accountcurrency,
                            Accountowner       = Accountowner,
                            Accountpermissions = Accountpermissions
                        });
                    }
                }

                if (Items.Count > 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Log.Write(ex.ToString());
                return(false);
            }
        }
Ejemplo n.º 24
0
        public static bool Parse_Segment(string UserID, int BLZ, int HBCIVersion, string Message)
        {
            try
            {
                String[] values = Message.Split('\'');

                var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                var dir       = Path.Combine(documents, Program.Buildname);

                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }

                List <string> msg = new List <string>();

                foreach (var item in values)
                {
                    msg.Add(item + Environment.NewLine.Replace(",", ""));
                }

                string msg_ = string.Join("", msg.ToArray());

                string bpd = "HIBPA" + Parse_String(msg_, "HIBPA", "\r\n" + "HIUPA");
                string upd = "HIUPA" + Parse_String(msg_, "HIUPA", "\r\n" + "HNSHA");

                // BPD
                dir = Path.Combine(dir, "BPD");

                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }

                if (!File.Exists(Path.Combine(dir, "280_" + BLZ + ".bpd")))
                {
                    using (File.Create(Path.Combine(dir, "280_" + BLZ + ".bpd")))
                    { };

                    File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
                }
                else
                {
                    File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
                }

                // UPD
                dir = Path.Combine(documents, Program.Buildname);
                dir = Path.Combine(dir, "UPD");

                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }

                if (!File.Exists(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
                {
                    using (File.Create(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
                    { };

                    File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
                }
                else
                {
                    File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
                }

                foreach (var item in values)
                {
                    if (item.Contains("HIRMS"))
                    {
                        var item_ = item;

                        if (item_.Contains("3920"))
                        {
                            string TAN  = string.Empty;
                            string TANf = string.Empty;

                            string[] procedures = Regex.Split(item_, @"\D+");

                            foreach (string value in procedures)
                            {
                                if (!string.IsNullOrEmpty(value))
                                {
                                    int i = int.Parse(value);

                                    if (Convert.ToString(i).StartsWith("9"))
                                    {
                                        if (String.IsNullOrEmpty(TAN))
                                        {
                                            TAN = Convert.ToString(i);
                                        }
                                        else
                                        {
                                            if (String.IsNullOrEmpty(TANf))
                                            {
                                                TANf = Convert.ToString(i);
                                            }
                                            else
                                            {
                                                TANf = TANf + ";" + Convert.ToString(i);
                                            }
                                        }
                                    }
                                }
                            }

                            Segment.HIRMS  = TAN;
                            Segment.HIRMSf = TANf;
                        }
                    }

                    if (item.Contains("HNHBK"))
                    {
                        var ID = Parse_String(item.ToString(), "+1+", ":1");
                        Segment.HNHBK = ID;
                    }

                    if (item.Contains("HISYN"))
                    {
                        var ID = item.Substring(13, item.Length - 13);
                        Segment.HISYN = ID;
                    }

                    if (item.Contains("HNHBS"))
                    {
                        var item_ = item + "'";

                        var MSG = Parse_String(item_.Replace("HNHBS:", ""), "+", "'");

                        if (MSG.Equals("0") || MSG == null)
                        {
                            Segment.HNHBS = "2";
                        }
                        else
                        {
                            Segment.HNHBS = Convert.ToString(Convert.ToInt16(MSG) + 1);
                        }
                    }

                    if (item.Contains("HISALS"))
                    {
                        var SEG = Parse_String(item.Replace("HISALS:", ""), ":", ":");

                        Segment.HISALS = SEG;

                        Segment.HISALSf = item;
                    }

                    if (item.Contains("HITANS"))
                    {
                        var TAN = Parse_String(item.Replace("HITANS:", ""), ":", "+").Replace(":", "+");

                        Segment.HITANS = TAN;
                    }

                    if (item.Contains("HKKAZ"))
                    {
                        if (String.IsNullOrEmpty(Segment.HKKAZ))
                        {
                            var VER = Parse_String(item, "HKKAZ;", ";");

                            Segment.HKKAZ = VER;
                        }
                    }
                }

                if (!String.IsNullOrEmpty(Segment.HIRMS))
                {
                    UserID = string.Empty;
                    return(true);
                }
                else
                {
                    UserID = string.Empty;

                    // Error
                    var BankCode = "HIRMG" + Helper.Parse_String(msg_, "HIRMG", "HNHBS");

                    String[] values_ = BankCode.Split('+');

                    foreach (var item in values_)
                    {
                        if (!item.StartsWith("HIRMG"))
                        {
                            Console.WriteLine(item.Replace("::", ": "));

                            Log.Write(item.Replace("::", ": "));
                        }
                    }

                    return(false);
                }
            }
            catch (Exception ex)
            {
                UserID = string.Empty;

                Log.Write(ex.ToString());

                Console.WriteLine("Software error");

                return(false);
            }
        }
Ejemplo n.º 25
0
        /// <summary>
        /// Transactions in camt053 format
        /// </summary>
        public static string Init_HKCAZ(ConnectionDetails connectionDetails, string FromDate, string ToDate, string Startpoint, camtVersion camtVers)
        {
            string segments = string.Empty;

            SEG.NUM = SEGNUM.SETInt(3);

            switch (camtVers)
            {
            case camtVersion.camt052:
                Log.Write("Starting job HKCAZ: Request transactions in camt052 format");

                if (String.IsNullOrEmpty(FromDate))
                {
                    if (String.IsNullOrEmpty(Startpoint))
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt052 + "+N'";
                    }
                    else
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt052 + "+N++++" + Startpoint + "'";
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(Startpoint))
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt052 + "+N+" + FromDate + "+" + ToDate + "'";
                    }
                    else
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt052 + "+N+" + FromDate + "+" + ToDate + "++" + Startpoint + "'";
                    }
                }

                SEG.NUM = SEGNUM.SETInt(3);
                break;

            case camtVersion.camt053:
                Log.Write("Starting job HKCAZ: Request transactions in camt053 format");

                if (String.IsNullOrEmpty(FromDate))
                {
                    if (String.IsNullOrEmpty(Startpoint))
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt053 + "+N'";
                    }
                    else
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt053 + "+N++++" + Startpoint + "'";
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(Startpoint))
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt053 + "+N+" + FromDate + "+" + ToDate + "'";
                    }
                    else
                    {
                        segments = "HKCAZ:" + SEG.NUM + ":" + Segment.HKCAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+" + Scheme.camt053 + "+N+" + FromDate + "+" + ToDate + "++" + Startpoint + "'";
                    }
                }

                break;

            default:     // -> Will never happen, only for compiler
                return(string.Empty);
            }

            if (Helper.IsTANRequired("HKCAZ"))
            {
                SEG.NUM  = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(segments);
            }

            string message  = FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM);
            string response = FinTSMessage.Send(connectionDetails.Url, message);

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(response);

            return(response);
        }
Ejemplo n.º 26
0
        /// <summary>
        /// Parse bank message and handle tan process
        /// </summary>
        /// <param name="BankCode"></param>
        /// <param name="pictureBox"></param>
        /// <param name="flickerImage"></param>
        /// <param name="flickerWidth"></param>
        /// <param name="flickerHeight"></param>
        /// <param name="renderFlickerCodeAsGif"></param>
        public static void Parse_BankCode(string BankCode, PictureBox pictureBox, out Image flickerImage, int flickerWidth,
                                          int flickerHeight, bool renderFlickerCodeAsGif)
        {
            flickerImage = null;

            var BankCode_ = "HIRMS" + Helper.Parse_String(BankCode, "'HIRMS", "'");

            String[] values = BankCode_.Split('+');

            string msg = string.Empty;

            foreach (var item in values)
            {
                if (!item.StartsWith("HIRMS"))
                {
                    TransactionConsole.Output = item.Replace("::", ": ");
                }
            }

            var HITAN = "HITAN" + Helper.Parse_String(BankCode.Replace("?'", "").Replace("?:", ":").Replace("<br>", Environment.NewLine).Replace("?+", "??"), "'HITAN", "'");

            string HITANFlicker = string.Empty;

            var processes = TANProcesses.items;

            var processname = string.Empty;

            foreach (var item in processes)
            {
                if (item.ProcessNumber.Equals(Segment.HIRMS))
                {
                    processname = item.ProcessName;
                }
            }

            // Smart-TAN plus optisch
            // chipTAN optisch
            if (processname.Equals("Smart-TAN plus optisch") || processname.Contains("chipTAN optisch"))
            {
                HITANFlicker = HITAN;
            }

            String[] values_ = HITAN.Split('+');

            int i = 1;

            foreach (var item in values_)
            {
                i = i + 1;

                if (i == 6)
                {
                    TransactionConsole.Output = TransactionConsole.Output + "??" + item.Replace("::", ": ").TrimStart();
                }
            }

            // chipTAN optisch
            if (processname.Contains("chipTAN optisch"))
            {
                string FlickerCode = string.Empty;

                FlickerCode = "CHLGUC" + Helper.Parse_String(HITAN, "CHLGUC", "CHLGTEXT") + "CHLGTEXT";

                FlickerCode flickerCode = new FlickerCode(FlickerCode);
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), pictureBox);
                if (!renderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    flickerImage = flickerCodeRenderer.RenderAsGif(flickerWidth, flickerHeight);
                }
            }

            // Smart-TAN plus optisch
            if (processname.Equals("Smart-TAN plus optisch"))
            {
                HITANFlicker = HITAN.Replace("?@", "??");

                string FlickerCode = string.Empty;

                String[] values__ = HITANFlicker.Split('@');

                int ii = 1;

                foreach (var item in values__)
                {
                    ii = ii + 1;

                    if (ii == 4)
                    {
                        FlickerCode = item;
                    }
                }

                FlickerCode flickerCode = new FlickerCode(FlickerCode.Trim());
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), pictureBox);
                if (!renderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    flickerImage = flickerCodeRenderer.RenderAsGif(flickerWidth, flickerHeight);
                }
            }

            // Smart-TAN photo
            if (processname.Equals("Smart-TAN photo"))
            {
                var PhotoCode = Helper.Parse_String(BankCode, ".+@", "'HNSHA");

                var mCode = new MatrixCode(PhotoCode.Substring(5, PhotoCode.Length - 5));
            }
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Parse message and extract public bank keys -> Encryption, Signing
        /// </summary>
        /// <param name="Message"></param>
        /// <param name="BLZ"></param>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public static bool Parse_Segment_RDH_Key(string Message, int BLZ, string UserID)
        {
            var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            var dir       = Path.Combine(documents, Program.Buildname);

            Message = Message.Replace("'?", "||?");

            String[] values = Message.Split('\'');

            List <string> msg = new List <string>();

            foreach (var item in values)
            {
                msg.Add(item + Environment.NewLine.Replace(",", ""));
            }

            string msg_ = string.Join("", msg.ToArray());

            string bpd = "HIBPA" + Parse_String(msg_, "HIBPA", "\r\n" + "HIUPA");
            string upd = "HIUPA" + Parse_String(msg_, "HIUPA", "\r\n" + "HNSHA");

            // BPD
            dir = Path.Combine(dir, "BPD");

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            if (!File.Exists(Path.Combine(dir, "280_" + BLZ + ".bpd")))
            {
                using (File.Create(Path.Combine(dir, "280_" + BLZ + ".bpd")))
                { };

                File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
            }
            else
            {
                File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
            }

            // UPD
            dir = Path.Combine(documents, Program.Buildname);
            dir = Path.Combine(dir, "UPD");

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            if (!File.Exists(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
            {
                using (File.Create(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
                { };

                File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
            }
            else
            {
                File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
            }

            foreach (var item in values)
            {
                if (item.Contains("HNHBK"))
                {
                    var ID = Parse_String(item.ToString(), "+1+", ":1");
                    Segment.HNHBK = ID;
                }

                if (item.Contains("HISYN"))
                {
                    var ID = item.Substring(13, item.Length - 13);
                    Segment.HISYN = ID;
                }

                if (item.Contains("HIISA"))
                {
                    if (item.Contains(":V:10"))
                    {
                        var item_ = item.ToString().Replace("||?", "'?");

                        RDH_KEYSTORE.KEY_ENCRYPTION_PUBLIC_BANK = Parse_String(item_, "@248@", ":12:");
                    }
                }

                if (item.Contains("HIISA"))
                {
                    if (item.Contains(":S:10"))
                    {
                        var item_ = item.ToString().Replace("||?", "'?");

                        RDH_KEYSTORE.KEY_SIGNING_PUBLIC_BANK = Parse_String(item_, "@248@", ":12:");
                    }
                }
            }

            if (!String.IsNullOrEmpty(RDH_KEYSTORE.KEY_ENCRYPTION_PUBLIC_BANK) &&
                !String.IsNullOrEmpty(RDH_KEYSTORE.KEY_SIGNING_PUBLIC_BANK))
            {
                // Update hbci key
                RDHKEY.Update(RDHKEY.RDHKEYFILE, RDHKEY.RDHKEYFILEPWD);

                // Release rdhkey credentials
                RDHKEY.RDHKEYFILE    = string.Empty;
                RDHKEY.RDHKEYFILEPWD = string.Empty;

                return(true);
            }
            else
            {
                // Error
                var BankCode = "HIRMG" + Helper.Parse_String(msg_, "HIRMG", "HNHBS");

                String[] values_ = BankCode.Split('+');

                foreach (var item in values_)
                {
                    if (!item.StartsWith("HIRMG"))
                    {
                        Console.WriteLine(item.Replace("::", ": "));

                        Log.Write(item.Replace("::", ": "));
                    }
                }

                return(false);
            }
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Parsing segment -> UPD, BPD
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="BLZ"></param>
        /// <param name="HBCIVersion"></param>
        /// <param name="Message"></param>
        /// <returns></returns>
        public static bool Parse_Segment(string UserID, int BLZ, int HBCIVersion, string Message)
        {
            try
            {
                String[] values = Message.Split('\'');

                List <string> msg = new List <string>();

                foreach (var item in values)
                {
                    msg.Add(item + Environment.NewLine.Replace(",", ""));
                }

                string msg_ = string.Join("", msg.ToArray());

                string bpd = "HIBPA" + Parse_String(msg_, "HIBPA", "\r\n" + "HIUPA");
                string upd = "HIUPA" + Parse_String(msg_, "HIUPA", "\r\n" + "HNSHA");

                if (Trace.Enabled)
                {
                    var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    var dir       = Path.Combine(documents, Program.Buildname);

                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    // BPD
                    dir = Path.Combine(dir, "BPD");

                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    if (!File.Exists(Path.Combine(dir, "280_" + BLZ + ".bpd")))
                    {
                        using (File.Create(Path.Combine(dir, "280_" + BLZ + ".bpd")))
                        { };

                        File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
                    }
                    else
                    {
                        File.WriteAllText(Path.Combine(dir, "280_" + BLZ + ".bpd"), bpd);
                    }

                    // UPD
                    dir = Path.Combine(documents, Program.Buildname);
                    dir = Path.Combine(dir, "UPD");

                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    if (!File.Exists(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
                    {
                        using (File.Create(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd")))
                        { };

                        File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
                    }
                    else
                    {
                        File.WriteAllText(Path.Combine(dir, "280_" + BLZ + "_" + UserID + ".upd"), upd);
                    }
                }

                foreach (var item in values)
                {
                    if (item.Contains("HIRMS"))
                    {
                        var item_ = item;

                        if (item_.Contains("3920"))
                        {
                            string TAN  = string.Empty;
                            string TANf = string.Empty;

                            string[] procedures = Regex.Split(item_, @"\D+");

                            foreach (string value in procedures)
                            {
                                int i;
                                if (!string.IsNullOrEmpty(value) && int.TryParse(value, out i))
                                {
                                    if (Convert.ToString(i).StartsWith("9"))
                                    {
                                        if (String.IsNullOrEmpty(TAN))
                                        {
                                            TAN = i.ToString();
                                        }

                                        if (String.IsNullOrEmpty(TANf))
                                        {
                                            TANf = i.ToString();
                                        }
                                        else
                                        {
                                            TANf += $";{i}";
                                        }
                                    }
                                }
                            }
                            if (string.IsNullOrEmpty(Segment.HIRMS))
                            {
                                Segment.HIRMS = TAN;
                            }
                            else
                            {
                                if (!TANf.Contains(Segment.HIRMS))
                                {
                                    throw new Exception($"Invalid HIRMS/Tan-Mode detected. Please choose one of the allowed modes: {TANf}");
                                }
                            }
                            Segment.HIRMSf = TANf;

                            // Parsing TAN processes
                            if (!String.IsNullOrEmpty(Segment.HIRMS))
                            {
                                Parse_TANProcesses(bpd);
                            }
                        }
                    }

                    if (item.Contains("HNHBK"))
                    {
                        var ID = Parse_String(item.ToString(), "+1+", ":1");
                        Segment.HNHBK = ID;
                    }

                    if (item.Contains("HISYN"))
                    {
                        var ID = item.Substring(item.IndexOf("+") + 1);
                        Segment.HISYN = ID;
                    }

                    if (item.Contains("HNHBS"))
                    {
                        var item_ = item + "'";

                        var MSG = Parse_String(item_.Replace("HNHBS:", ""), "+", "'");

                        if (MSG.Equals("0") || MSG == null)
                        {
                            Segment.HNHBS = "2";
                        }
                        else
                        {
                            Segment.HNHBS = Convert.ToString(Convert.ToInt16(MSG) + 1);
                        }
                    }

                    if (item.Contains("HISALS"))
                    {
                        var SEG = Parse_String(item.Replace("HISALS:", ""), ":", ":");

                        Segment.HISALS = SEG;

                        Segment.HISALSf = item;
                    }

                    if (item.Contains("HITANS"))
                    {
                        var TAN = Parse_String(item.Replace("HITANS:", ""), ":", "+").Replace(":", "+");

                        Segment.HITANS = TAN;
                    }

                    if (item.Contains("HKKAZ"))
                    {
                        string pattern  = @"HKKAZ;.*?;";
                        Regex  rgx      = new Regex(pattern);
                        string sentence = item;

                        foreach (Match match in rgx.Matches(sentence))
                        {
                            var VER = Parse_String(match.Value, "HKKAZ;", ";");

                            if (String.IsNullOrEmpty(Segment.HKKAZ))
                            {
                                Segment.HKKAZ = VER;
                            }
                            else
                            {
                                if (int.Parse(VER) > int.Parse(Segment.HKKAZ))
                                {
                                    Segment.HKKAZ = VER;
                                }
                            }
                        }

                        // Fallback if HKKAZ is not delivered by BPD (eg. Postbank)
                        if (String.IsNullOrEmpty(Segment.HKKAZ))
                        {
                            Segment.HKKAZ = "6";
                        }
                    }
                }

                if (!String.IsNullOrEmpty(Segment.HIRMS))
                {
                    UserID = string.Empty;
                    return(true);
                }
                else
                {
                    UserID = string.Empty;

                    // Error
                    var BankCode = "HIRMG" + Helper.Parse_String(msg_, "HIRMG", "HNHBS");

                    String[] values_ = BankCode.Split('+');

                    foreach (var item in values_)
                    {
                        if (!item.StartsWith("HIRMG"))
                        {
                            Console.WriteLine(item.Replace("::", ": "));

                            Log.Write(item.Replace("::", ": "));
                        }
                    }

                    return(false);
                }
            }
            catch (Exception ex)
            {
                UserID = string.Empty;

                Log.Write(ex.ToString());

                Console.WriteLine($"Software error: {ex.Message}");

                return(false);
            }
        }
Ejemplo n.º 29
0
        /// <summary>
        /// Transactions
        /// </summary>
        public static string Init_HKKAZ(ConnectionDetails connectionDetails, string FromDate, string ToDate, string Startpoint)
        {
            Log.Write("Starting job HKKAZ: Request transactions");

            string segments = string.Empty;

            SEG.NUM = SEGNUM.SETInt(3);

            if (String.IsNullOrEmpty(FromDate))
            {
                if (String.IsNullOrEmpty(Startpoint))
                {
                    if (Convert.ToInt16(Segment.HKKAZ) < 7)
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N'";
                    }
                    else
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N'";
                    }
                }
                else
                {
                    if (Convert.ToInt16(Segment.HKKAZ) < 7)
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N++++" + Startpoint + "'";
                    }
                    else
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N++++" + Startpoint + "'";
                    }
                }
            }
            else
            {
                if (String.IsNullOrEmpty(Startpoint))
                {
                    if (Convert.ToInt16(Segment.HKKAZ) < 7)
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N+" + FromDate + "+" + ToDate + "'";
                    }
                    else
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N+" + FromDate + "+" + ToDate + "'";
                    }
                }
                else
                {
                    if (Convert.ToInt16(Segment.HKKAZ) < 7)
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N+" + FromDate + "+" + ToDate + "++" + Startpoint + "'";
                    }
                    else
                    {
                        segments = "HKKAZ:" + SEG.NUM + ":" + Segment.HKKAZ + "+" + connectionDetails.IBAN + ":" + connectionDetails.BIC + ":" + connectionDetails.Account + "::280:" + connectionDetails.Blz + "+N+" + FromDate + "+" + ToDate + "++" + Startpoint + "'";
                    }
                }
            }

            if (Helper.IsTANRequired("HKKAZ"))
            {
                SEG.NUM  = SEGNUM.SETInt(4);
                segments = HKTAN.Init_HKTAN(segments);
            }

            string message  = FinTSMessage.Create(connectionDetails.HBCIVersion, Segment.HNHBS, Segment.HNHBK, connectionDetails.BlzPrimary, connectionDetails.UserId, connectionDetails.Pin, Segment.HISYN, segments, Segment.HIRMS, SEG.NUM);
            string response = FinTSMessage.Send(connectionDetails.Url, message);

            Segment.HITAN = Helper.Parse_String(Helper.Parse_String(response, "HITAN", "'").Replace("?+", "??"), "++", "+").Replace("??", "?+");

            Helper.Parse_Message(response);

            return(response);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Fill given <code>TANDialog</code> and wait for user to enter a TAN.
        /// </summary>
        /// <param name="BankCode"></param>
        /// <param name="pictureBox"></param>
        /// <param name="flickerImage"></param>
        /// <param name="flickerWidth"></param>
        /// <param name="flickerHeight"></param>
        /// <param name="renderFlickerCodeAsGif"></param>
        public static async Task <string> WaitForTanAsync(FinTsClient client, HBCIDialogResult dialogResult, TANDialog tanDialog)
        {
            var BankCode_ = "HIRMS" + Parse_String(dialogResult.RawData, "'HIRMS", "'");

            String[] values = BankCode_.Split('+');
            foreach (var item in values)
            {
                if (!item.StartsWith("HIRMS"))
                {
                    TransactionConsole.Output = item.Replace("::", ": ");
                }
            }

            var HITAN = "HITAN" + Parse_String(dialogResult.RawData.Replace("?'", "").Replace("?:", ":").Replace("<br>", Environment.NewLine).Replace("?+", "??"), "'HITAN", "'");

            string HITANFlicker = string.Empty;

            var processes = TanProcesses.Items;

            var processname = string.Empty;

            foreach (var item in processes)
            {
                if (item.ProcessNumber.Equals(client.HIRMS))
                {
                    processname = item.ProcessName;
                }
            }

            // Smart-TAN plus optisch
            // chipTAN optisch
            if (processname.Equals("Smart-TAN plus optisch") || processname.Contains("chipTAN optisch"))
            {
                HITANFlicker = HITAN;
            }

            String[] values_ = HITAN.Split('+');

            int i = 1;

            foreach (var item in values_)
            {
                i = i + 1;

                if (i == 6)
                {
                    TransactionConsole.Output = TransactionConsole.Output + "??" + item.Replace("::", ": ").TrimStart();

                    TransactionConsole.Output = TransactionConsole.Output.Replace("??", " ")
                                                .Replace("0030: ", "")
                                                .Replace("1.", Environment.NewLine + "1.")
                                                .Replace("2.", Environment.NewLine + "2.")
                                                .Replace("3.", Environment.NewLine + "3.")
                                                .Replace("4.", Environment.NewLine + "4.")
                                                .Replace("5.", Environment.NewLine + "5.")
                                                .Replace("6.", Environment.NewLine + "6.")
                                                .Replace("7.", Environment.NewLine + "7.")
                                                .Replace("8.", Environment.NewLine + "8.");
                }
            }

            // chipTAN optisch
            if (processname.Contains("chipTAN optisch"))
            {
                string FlickerCode = string.Empty;

                FlickerCode = "CHLGUC" + Helper.Parse_String(HITAN, "CHLGUC", "CHLGTEXT") + "CHLGTEXT";

                FlickerCode flickerCode = new FlickerCode(FlickerCode);
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), tanDialog.PictureBox);
                if (!tanDialog.RenderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    tanDialog.FlickerImage = flickerCodeRenderer.RenderAsGif(tanDialog.FlickerWidth, tanDialog.FlickerHeight);
                }
            }

            // Smart-TAN plus optisch
            if (processname.Equals("Smart-TAN plus optisch"))
            {
                HITANFlicker = HITAN.Replace("?@", "??");

                string FlickerCode = string.Empty;

                String[] values__ = HITANFlicker.Split('@');

                int ii = 1;

                foreach (var item in values__)
                {
                    ii = ii + 1;

                    if (ii == 4)
                    {
                        FlickerCode = item;
                    }
                }

                FlickerCode flickerCode = new FlickerCode(FlickerCode.Trim());
                flickerCodeRenderer = new FlickerRenderer(flickerCode.Render(), tanDialog.PictureBox);
                if (!tanDialog.RenderFlickerCodeAsGif)
                {
                    RUN_flickerCodeRenderer();

                    Action   action = STOP_flickerCodeRenderer;
                    TimeSpan span   = new TimeSpan(0, 0, 0, 50);

                    ThreadStart start  = delegate { RunAfterTimespan(action, span); };
                    Thread      thread = new Thread(start);
                    thread.Start();
                }
                else
                {
                    tanDialog.FlickerImage = flickerCodeRenderer.RenderAsGif(tanDialog.FlickerWidth, tanDialog.FlickerHeight);
                }
            }

            // Smart-TAN photo
            if (processname.Equals("Smart-TAN photo"))
            {
                var PhotoCode = Parse_String(dialogResult.RawData, ".+@", "'HNSHA");

                var mCode = new MatrixCode(PhotoCode.Substring(5, PhotoCode.Length - 5));

                tanDialog.MatrixImage = mCode.CodeImage;
                mCode.Render(tanDialog.PictureBox);
            }

            // PhotoTAN
            if (processname.Equals("photoTAN-Verfahren"))
            {
                // HITAN:5:5:4+4++nmf3VmGQDT4qZ20190130091914641+Bitte geben Sie die photoTan ein+@3031@       image/pngʉPNG
                var match = Regex.Match(dialogResult.RawData, @"HITAN.+@\d+@(.+)'HNHBS", RegexOptions.Singleline);
                if (match.Success)
                {
                    var PhotoBinary = match.Groups[1].Value;

                    var mCode = new MatrixCode(PhotoBinary);

                    tanDialog.MatrixImage = mCode.CodeImage;
                    mCode.Render(tanDialog.PictureBox);
                }
            }

            return(await tanDialog.WaitForTanAsync());
        }