Beispiel #1
0
        private static Iso8583Message PerformReversal(Iso8583Message message, ListenerPeer listener)
        {
            var STAN = ExtractSTAN(message);

            message = SetFee(message, 0);
            var transactionsToReverse = _context.TransactionLogs.Where(c => c.STAN.Equals(STAN) && !c.Narration.Equals("Reversal")).ToList();

            try
            {
                string responseCode = null;

                if (transactionsToReverse != null || transactionsToReverse.Count > 0)
                {
                    foreach (var transaction in transactionsToReverse)
                    {
                        if (!transaction.Narration.Equals("Balance Enquiry"))
                        {
                            if (transaction.TypeOfEntry.Equals("Debit"))
                            {
                                if (transaction.Account2 == null)
                                {
                                    bool remote1 = false;
                                    if (transaction.RemoteOnUs == true)
                                    {
                                        remote1 = true;
                                    }

                                    responseCode = CBA.PerformDoubleEntry("Credit", transaction.Account1, transaction.Amount, remote1);
                                    var isoAmt = Convert.ToDouble(FormatTo2Dp(Convert.ToDecimal(transaction.Amount))) * 100;
                                    message.Fields.Add(4, isoAmt.ToString().PadLeft(10, '0'));
                                    new TransactionLogger().LogTransaction(message, "Credit", "Reversal");
                                    transaction.STAN = transaction.STAN + "R";

                                    continue;
                                }
                            }
                            bool remote = false;
                            if (transaction.RemoteOnUs == true)
                            {
                                remote = true;
                            }
                            responseCode = CBA.PerformDoubleEntry("Debit", transaction.Account1, transaction.Amount, remote);
                            var isoAmount = Convert.ToDouble(FormatTo2Dp(Convert.ToDecimal(transaction.Amount))) * 100;
                            message.Fields.Add(4, isoAmount.ToString().PadLeft(10, '0'));
                            new TransactionLogger().LogTransaction(message, "Debit", "Reversal");
                            transaction.STAN = transaction.STAN + "R";
                        }
                    }
                    _context.SaveChanges();
                    message = SetResponseMessage(message, responseCode);
                    message = SendResponseMessage(listener, message);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return(message);
        }
Beispiel #2
0
        public Iso8583Message ProcessTransaction(Iso8583Message message, ListenerPeer listener)
        {
            if (message != null)
            {
                if (!message.IsReversalOrChargeBack())
                {
                    message = CheckIfFeeApplies(message);
                    var fee = ExtractFee(message);

                    var trxType       = ExtractTransactionType(message);
                    var accountNumber = ExtractAccountNumber(message);
                    var amount        = ExtractAmount(message);
                    var STAN          = ExtractSTAN(message);
                    var RRN           = ExtractRRN(message);
                    if (trxType.ToString().Equals(Codes.WITHDRAWAL) || trxType.ToString().Equals(Codes.PAYMENT))
                    {
                        if (accountNumber != null && amount != null)
                        {
                            if (trxType.ToString().Equals(Codes.PAYMENT))
                            {
                            }
                            var responseCode = CBA.PerformDoubleEntry("Debit", accountNumber, (amount + fee), CheckIfRemote(message));
                            message = SetResponseMessage(message, responseCode);
                            message = SendResponseMessage(listener, message);
                            if (!message.Fields[39].Value.ToString().Equals(Codes.APPROVED))
                            {
                                Debug.WriteLine("Transaction Incomplete ...");
                            }
                            else
                            {
                                new TransactionLogger().LogTransaction(message, "Debit", "Request");
                                Debug.WriteLine("Transaction Complete ...");
                            }
                        }
                    }
                    else if (trxType.ToString().Equals(Codes.BALANCE_ENQUIRY))
                    {
                        var amountEnquired = CBA.BalanceEnquiry(accountNumber);
                        if (amountEnquired != null)
                        {
                            message.Fields.Add(54, amountEnquired);
                            message.Fields.Add(4, "0000000000");
                            SetResponseMessage(message, Codes.APPROVED);
                            message = SendResponseMessage(listener, message);
                            new TransactionLogger().LogTransaction(message, null, "Balance Enquiry");
                        }
                    }
                    return(message);
                }

                if (message.IsReversalOrChargeBack())
                {
                    message = PerformReversal(message, listener);
                }
            }
            return(message);
        }